﻿<?xml version="1.0" encoding="utf-8" ?> 
<?xml-stylesheet type="text/xsl" href="../../webpages/courses.xsl" ?>
<!--
/////////////////////////////////////////////////////////////////////////////////////////
//  CSE687codeL13.xml - provides links Lecture #13 materials                //
//                                 on the ECS college server                              //
//                                                                                                   //
//  Jim Fawcett, CST 2-187, Syracuse University, jfawcett@twcny.rr.com //
/////////////////////////////////////////////////////////////////////////////////////////
-->

<courses name="Fawcett">

  <btitle>CSE687 Lecture #13</btitle>
  <theme src="../../webpages/CodeTheme.css" />

  <visible>
  <title>CSE687 - Object Oriented Design</title>
  <subtitle>Lecture #13 - Interface Segregation Principle</subtitle>
  <revised>01 March 2009</revised>
  
  <hilight>
    <ifile title="Home">../../webpages/FawcettHome.xml</ifile>&#32;
    <ifile title="Courses">../../webpages/Courses.xml</ifile>&#32;
    <ifile title="Code">../../webpages/Code.xml</ifile>&#32;
    <ilink title="Handouts">www.ecs.syr.edu/faculty/fawcett/handouts</ilink>&#32;
    <ifile title="CoreTech">../../webpages/CoreTechnologies.xml</ifile>&#32;
    <ifile title="Books">../../webpages/Books.xml</ifile>&#32;
    <ifile title="Articles">../../webpages/Articles.xml</ifile>&#32;
    <ifile title="Math">../../webpages/Mathematics.xml</ifile>&#32;
    <ifile title="Research">../../webpages/research.xml</ifile>&#32;
    <ifile title="Masters Projects">../../webpages/MastersProjects.xml</ifile>&#32;
    <ifile title="SWDev">../../webpages/swdev.xml</ifile>&#32;
    <ifile title="WebDev">../../webpages/webdev.xml</ifile>&#32;
    <ifile title="News">../../webpages/news.xml</ifile>&#32;
    <ifile title="OtherLinks">../../webpages/OtherLinks.xml</ifile>&#32;
    <ifile title="SiteDesign">../../webpages/SiteDesign.xml</ifile>&#32;
    <ifile title="Graduates">../../webpages/graduates.xml</ifile>&#32;
    <ifile title="AllPages">../../webpages/AllPages.xml</ifile>&#32;
    <ifile title="Office Hours">../../webpages/OfficeHours.xml</ifile>&#32;
    <notice title="Notices">../../webpages/notices.xml</notice>&#32;
    <html><a href="#contents">Contents</a></html>&#32;
  </hilight>

  <!-- <include src="CoursesNavBar.xml"/> -->

  <hilight>
    <ifile title="CSE681-SWMAA">../../webpages/CSE681.xml</ifile>&#32;
    <ifile title="CSE686-IP">../../webpages/CSE686.xml</ifile>&#32;
    <ifile title="CSE687-OOD">../../webpages/CSE687.xml</ifile>&#32;
    <ifile title="CSE775-DO">../../webpages/CSE775.xml</ifile>&#32;
    <ifile title="CSE776-DP">../../webpages/CSE776.xml</ifile>&#32;
    <ifile title="CSE778-AWP">../../webpages/CSE778.xml</ifile>&#32;
    <ifile title="CSE784-SWS">../../webpages/CSE784.xml</ifile>
  </hilight>

  <hilight>
    <ifile title="Lecture #01">../Lectures/CSE687CodeL1.xml</ifile>&#32;
    <ifile title="Lecture #02">../lectures/CSE687CodeL2.xml</ifile>&#32;
    <ifile title="Lecture #03">../Lectures/CSE687CodeL3.xml</ifile>&#32;
    <ifile title="Lecture #04">../Lectures/CSE687CodeL4.xml</ifile>&#32;
    <ifile title="Lecture #05">../Lectures/CSE687CodeL5.xml</ifile>&#32;
    <ifile title="Lecture #06">../Lectures/CSE687CodeL6.xml</ifile>&#32;
    <ifile title="Lecture #07">../Lectures/CSE687CodeL7.xml</ifile>&#32;<br/>
    <ifile title="Lecture #08">../Lectures/CSE687CodeL8.xml</ifile>&#32;
    <ifile title="Lecture #09">../Lectures/CSE687CodeL9.xml</ifile>&#32;
    <ifile title="Lecture #10">../Lectures/CSE687CodeL10.xml</ifile>&#32;
    <ifile title="Lecture #11">../Lectures/CSE687CodeL11.xml</ifile>&#32;
    <ifile title="Lecture #12">../Lectures/CSE687CodeL12.xml</ifile>&#32;
    <ifile title="Lecture #13">../Lectures/CSE687CodeL13.xml</ifile>&#32;
    <ifile title="Lecture #14">../Lectures/CSE687CodeL14.xml</ifile>&#32;<br/>
    <ifile title="Lecture #15">../Lectures/CSE687CodeL15.xml</ifile>&#32;
    <ifile title="Lecture #16">../Lectures/CSE687CodeL16.xml</ifile>&#32;
    <ifile title="Lecture #17">../Lectures/CSE687CodeL17.xml</ifile>&#32;
    <ifile title="Lecture #18">../Lectures/CSE687CodeL18.xml</ifile>&#32;
    <ifile title="Lecture #19">../Lectures/CSE687CodeL19.xml</ifile>&#32;
    <ifile title="Lecture #20">../Lectures/CSE687CodeL20.xml</ifile>&#32;
    <ifile title="Lecture #21">../Lectures/CSE687CodeL21.xml</ifile>&#32;<br/>
    <ifile title="Lecture #22">../Lectures/CSE687CodeL22.xml</ifile>&#32;
    <ifile title="Lecture #23">../Lectures/CSE687CodeL23.xml</ifile>&#32;
    <ifile title="Lecture #24">../Lectures/CSE687CodeL24.xml</ifile>&#32;
    <ifile title="Lecture #25">../Lectures/CSE687CodeL25.xml</ifile>&#32;
    <ifile title="Lecture #26">../Lectures/CSE687CodeL26.xml</ifile>&#32;
    <ifile title="Lecture #27">../Lectures/CSE687CodeL27.xml</ifile>&#32;
    <ifile title="Lecture #28">../Lectures/CSE687CodeL28.xml</ifile>&#32;
  </hilight>

  <hilight>
    <html><a href="#Contents">Contents</a></html>&#32;
    <html>
      <a href="../../webpages/cse687.xml#Syllabus">Syllabus</a>
    </html>&#32;
    <ifile title="SG - Design">StudyGuideDesign.xml</ifile>&#32;
    <ifile title="SG - Templates">StudyGuideTemplates.xml</ifile>&#32;
    <ifile title="SG - Class Relationships">StudyGuideClassRelationships.xml</ifile>&#32;
  </hilight>
  
  <section title="Web Resources:">
    <ilink title="Stroustrup's Home Page">www.research.att.com/~bs/homepage.html</ilink>,
    <ilink title="Assoc. of C/C++ Users">www.accu.org</ilink>,
    <ilink title="C++&#160;at&#160;Microsoft">www.gotw.ca/publications/standard_c++_meets_managed_c++.htm</ilink>, 
    <ilink title="Code&#160;Project">www.codeproject.com</ilink>,
    <ilink title="Sells&#160;Brothers">www.sellsbrothers.com</ilink>,
    <ilink title="Guru&#160;of&#160;the&#160;Week">www.gotw.ca</ilink>,
    <ilink title="C/C++&#160;User's&#160;Journal">www.cuj.com</ilink>,
    <ilink title="devCentral">devCentral.iftech.com</ilink>,
    <ilink title="Dr.&#160;Dobb's&#160;Journal">www.ddj.com</ilink>,
    <ilink title="Boost&#160;Library">www.boost.org</ilink>,
    <ilink title="techNetCast">technetcast.ddj.com</ilink>
  </section>
  
  <isection title="Office Hours:">
    <ifile title="Instructor &amp; TAs">../../webpages/officeHours.htm</ifile>
  </isection>
  
  <section title="Content:">
  <html><a name="Contents" id="Syllabus"/></html>
  This lecture covers Interfaces and the Interface Segregation Principle.
    <olist>
       <litem>
         <html>
           <a href="../../webpages/cse687.xml#Syllabus">Syllabus</a><br/>Describes topics to be covered,
           reading material for you to digest <u>before coming to class</u>, and due dates
           for the assigned projects.
         </html>
       </litem>
<!--
      <litem>
        <note>Grievence day:</note> A few of you believe that I missed something in your project grading, or didn't use
        it in a way that illustrates its capabilities.  Rather than have you go through the TA, I've decided to hold a 
        grievence session on Thursday, between 9:00am and 2:00pm, to allow you to demonstrate your project to me.
        <p/>
        To participate you need to do two things: send me an email as soon as possible that requests a time on Thursday
        between 9:00am and 2:00pm.  Please indicate any times that you have classes scheduled in that period, so that I can 
        schedule a time slot for you.  The other thing you need to do is to bring your graded project with you.  We will meet
        in my office.  I will bring my laptop with your submitted code so don't bring code with you.  
        <p/>
        Note that I will not be talked into giving you a few more points for anything, unless you can demonstrate that
        there is something I did not see about your project.  We will test it on my test files, which you will find
        in <ifile title="Handouts/cse687/code/TestPr1Sp06">../cse687/code/TestPr1Sp06</ifile>.  You may wish to test your
        project on that code yourself before coming in.
      </litem>
      <litem>
        At 7:00pm on Friday, March 10, I'll hold a basic helper on Project #2, in CST 2-122.  <note>Note that this is not a substitute for
        the Friday morning help session</note>.  I will refuse to answer sophisticated questions about the project.  This session
        is for those few of you who are still struggling with how to start the project, and that is all that I will talk about.
      </litem>
-->
      <litem>
        <ifile title="Project #2">../projects/pr2s09.doc</ifile>, Graph data type<br/>
        <ifile title="Project #3">../projects/pr3s09.doc</ifile>, Testbed<br/>
        <ifile title="Project #4">../projects/pr4s09.doc</ifile>, Remote Testbed with charting<br/>
      </litem>
<!--
      <litem>
        <ifile title="XMLParsing">../code/xmlParsing</ifile> or <ifile title="XMLTran">../code/xmlTran</ifile><br/>
        Two modules that do basic XML handling - building XML strings and pulling them apart.  They do not understand
        XML namespaces or schemas.  Either on will work for the parsing part of Project #2.
      </litem>
-->
       <litem>
         <file title="The Dependency Inversion Principle">../presentations/principles.ppt#273,22,Dependency Inversion Principle</file>
         Components should depend on abstractions, not other components.
       </litem>
       <litem>
         <file title="Programming to Interfaces Presentation">../presentations/ProgrammingToInterfaces.ppt</file>
         Discusses interfaces, layers, factories, and breaking design, compile, and static link dependencies.
       </litem>
       <litem>
         <file title="Object Factory Project">../code/FactoryForAbstractProduct</file>
         This project implements a factory that allows clients to use derived classes but only bind to their
         abstractions.  It also demonstrates the use of products with multiple interfaces.
       </litem>
       <litem>
         <file title="Programming to Interface Project">../code/progToInterface</file>
         This project implements a template-based "pluggable object factory" and shows how to access 
         members of a hierarchy through an interface.
       </litem>
      <litem>
        <file title="Dynamic Link Library Project">../code/MakeDll</file>
        This project demonstrates that compile and static link dependencies can be broken by programming
        to interfaces and using object factories.
      </litem>
       <litem>
         <file title="Run-Time Type Indentification Presentation">../presentations/RTTI.ppt</file>
         RTTI is, perhaps, the antithesis of the Open/Closed Principle.  Paradoxically, I used it building the trace class.
       </litem>
       <litem>
         <file title="Interface Segregation Principle">../presentations/principles.ppt#279,30,Interface Segregation Principle</file>
         Discusses why you may need to provide more than one interface for a component.
       </litem>
       <litem>
         <file title="Exceptions Presentation">../presentations/except.ppt</file>
       </litem>
       <litem>
         <file title="Basic Exceptions Demo">../code/Exceptions/BasicExceptions</file>
       </litem>
       <litem>
         <file title="Standard Exceptions Demo">../code/Exceptions/stdException</file>
       </litem>
       <litem>
         <file title="Exception Performance Demo">../code/Exceptions/ExceptionPerformance</file>
       </litem>
<!--
       <litem>
         <file title="iostreams presentation">../presentations/iostreams.ppt</file>
         The presentation discusses the iostream hierarchy and the role of each of many of its classes.
       </litem>
       <litem>
         <file title="iostreams reference"> ../presentations/iostreams.doc</file>
         The reference presents class relationships and interface details.
       </litem>
       <litem>
         <file title="iostreams code examples">../code/iostreams</file>
         Illustrates stream formatting, buffering, opening for reading and writing, and use of stringstreams.
       </litem>
-->
       <litem>
         <file title="Design Presentation">../presentations/design.ppt</file>
         Summarizes design issues for modules and classes.
       </litem>
       <litem>
         <ifile title="Design Rules">../presentations/DesignRules.ppt</ifile><br/>
         Design rules and idioms that transcend Object Oriented Design.
       </litem>
    </olist>
  </section>  
  <p/><hr/><p/>
  </visible>
</courses>
