﻿<?xml version="1.0" encoding="utf-8" ?> 
<?xml-stylesheet type="text/xsl" href="courses.xsl" ?>
<courses name="CSE687">
 
  <btitle>CSE687</btitle>
  <theme src="CoursesTheme.css" />

  <visible>
  <title>CSE687 - Object Oriented Design</title>
  <revised>05 May 2011</revised>

  <hnav/>
  <cnav/>

  <html><img src="students/cse687s05b.jpg" width="100%"/></html>

  <html><a name="contents"/></html>

  <section title="Resources:">
    <lhilight>
      <html>
        <a href="cse687.xml#Syllabus">Syllabus</a>
      </html>&#32;
      <ifile title="Lectures">../CSE687/Lectures/cse687codeL1.xml</ifile>&#32;
      <ifile title="SG - OOD">../CSE687/lectures/StudyGuideOOD.xml</ifile>&#32;
      <ifile title="SG - Design">../CSE687/lectures/StudyGuideDesign.xml</ifile>&#32;
      <ifile title="SG - Templates">../CSE687/lectures/StudyGuideTemplates.xml</ifile>&#32;
      <ifile title="SG - Class Relationships">../CSE687/lectures/StudyGuideClassRelationships.xml</ifile>&#32;
      <ifile title="Uploading Project Submissions">uploads.doc</ifile>&#32;
      <ilink title="C++0x, final edition">www2.research.att.com/~bs/C++0xFAQ.html</ilink>&#32;
      <ilink title="Project Handins, Spring 2011">www.ecs.syr.edu/faculty/fawcett/handouts/CSE687/projects/Handins687Sp11.xls</ilink>
    </lhilight>
  </section>
  
  <section title="Course Scope:">
  Covers design and implementation of object oriented programs using the C++ language.
  This is an intensive course covering: design strategies used in object oriented design, 
  essentially all of the Standard C++ Programming Lanaguage, and its Standard Library.
  A typical class will introduce some part of the C++ language, present a design principle
  that relates in some way to that part, and illustrate both with code examples.
  <p/>
  Four design and implementation projects are required that are progressively more 
  challenging.  A lot of work outside of class is expected.  Students that complete this
  course with good grades will have the skills to work in almost any commercial or 
  industrial organization in this country.
  </section>
 
  <section title="Required Texts and Notes:"/>
  <olist>
    <litem>
      The C++ Programming Lanaguage (CPPPL), Bjarne Stroustrup, 3rd Edition, Addison-Wesley, 1997,
      ISBN 0-201-88954-4
    </litem>
    <litem>
      The C++ Standard Library (CPPSL), Nicolai Josuttis, Addison-Wesley, 1999, ISBN 0-201-37926-0
    </litem>
    <litem>
      Class Notes, available on 
      <ilink title="www.ecs.syr.edu/faculty/fawcett/handouts/CSE687">www.ecs.syr.edu/faculty/fawcett/handouts/cse687</ilink>
    </litem>
    <litem>
      <ilink title="C++ FAQs">www.parashift.com/c++-faq-lite/</ilink>&#32;
      <ilink title="Boost C++ Library">www.boost.org</ilink>&#32;
      <ilink title="UML Tutorial">bdn.borland.com/article/0,1410,31863,00.html</ilink>&#32;
      <ilink title="cplusplus.com references">www.cplusplus.com/reference</ilink>&#32;
      <ilink title="Schmidt Tutorials">www.cs.wustl.edu/~schmidt/C++/index.html</ilink>&#32;
      <ilink title="ACCU.org">www.accu.org</ilink>&#32;
      <ilink title="C/C++ User's Journal">www.cuj.com</ilink>&#32;
      <ilink title="The C++ Source">www.artima.com/cppsource</ilink>&#32;
      <ilink title="STL Programming Links">www.hal9k.com/cug/links/subject145.htm</ilink>&#32;
      <ilink title="DinkumWare C++ Std::Lib reference">www.dinkumware.com/manuals/default.aspx</ilink>
    </litem>
  </olist>
 
  <section title="Recommended References:"/>
  <olist>
    <litem>
      C++ Primer Plus, Stephen Prata, Waite Group Press, 1998, ISBN 1-57169-131-6,
      available at desk in SciTech Library
    </litem>
    <litem>
      C++ Coding Standards, Herb Sutter, Andrei Alexandrescu, Addison-Wesley, 2005
    </litem>
    <litem>
      C++ Gotchas, Avoiding Common Problems in Coding and Design, Stephen Dewhurst, 
      Addison-Wesley, 2003
    </litem>
    <litem>
      Effective STL, Scott Meyers, Addison-Wesley, 2002
    </litem>
    <litem>
      Effective C++, Scott Meyers, Addison-Wesley, 3rd Edition, 2005
    </litem>
    <litem>
      More Effective C++, Scott Meyers, Addison-Wesley, 1996
    </litem>
    <litem>
      The Design and Evolution of the C++ Language, Bjarne Stroustrup, Addison-Wesley, 1994
    </litem>
    <litem>
      Modern C++ Design, Andre Alexandrescu, Addison-Wesley, 2001
    </litem>
    <litem>
      Imperfect C++, Matthew Wilson, Addison-Wesley, 2005
    </litem>
    <litem>
      Exceptional C++, Herb Sutter, Addison-Wesley, 2000
    </litem>
    <litem>
      More Exceptional C++, Herb Sutter, Addison-Wesley, 2002
    </litem>
    <litem>
      Exceptional C++ Style, Herb Sutter, Addison-Wesley, 2005
    </litem>
  </olist>

  <section title="Prerequisites:"/>
  <block>
    Students are expected to have a good working knowledge of the C Programming Language.
    Some knowledge of C++ will help you, but is not required.  This course is significanly
    more challenging than the usual undergraduate course in C++.
  </block>
  
  <section title="Syllabus - Spring 2011:"/>
  <html><a name="Syllabus" id="Syllabus"/></html>
  <syllabus>
    <syllHeading>
      <sd>Lecture</sd>
      <hd>Topics</hd>
      <hd>Read before class</hd>
      <hd>Project</hd>
    </syllHeading>
    <lecture>
      <ld>
        Introduction:<br/>
        <ifile title="Lecture&#32;#1">../CSE687/Lectures/cse687codeL1.xml</ifile>
        <br/>Tue Jan 18
      </ld>
      <ld>
        Syllabus, projects, examination, grading, notation, packages,
        <ilink title="Handouts">www.ecs.syr.edu/faculty/fawcett/handouts/cse687</ilink>
      </ld>
      <ld>skim CPPPL&#32;chp&#32;1-9<br/>read CPPPL&#32;2,&#32;3, CPPSL&#32;2</ld>
      <cd>hand out <ifile title="Pr1">../CSE687/projects/Pr1s11.doc</ifile></cd>
    </lecture>
    <lecture>
      <ld>
        Language&#32;Survey:<br/>
        <ifile title="Lecture&#32;#2">../CSE687/Lectures/cse687codeL2.xml</ifile>
        <br/>Thur Jan 20
      </ld>
      <ld>
        classes, object model, templates, references, streams
      </ld>
      <ld>CPPPL 2, 3, 10 <br/>Web Notes</ld>
      <cd><ifile title="Pr1">../CSE687/projects/Pr1s11.doc</ifile></cd>
    </lecture>
<!--   
    <emlecture>
      <ld>Thur, Jan 19</ld>
      <ld>Martin Luther King Jr. Day, no classes</ld><ld> - </ld><cd> - </cd>
    </emlecture>
-->
    <lecture>
      <ld>
        Encapsulation:<br/>
        <ifile title="Lecture&#32;#3">../CSE687/Lectures/cse687codeL3.xml</ifile>
        <br/>Tue Jan 25
      </ld>
      <ld>Encapsulation Principle, interfaces, object factories</ld>
      <ld>CPPPL 2, 3, 10 <br/>Web Notes</ld>
      <cd><ifile title="Pr1">../CSE687/projects/Pr1s11.doc</ifile></cd>
    </lecture>
    <lecture>
      <ld>
        Abstraction:<br/>
        <ifile title="Lecture&#32;#4">../CSE687/Lectures/cse687codeL4.xml</ifile>
      <br/>Thur Jan 27</ld>
      <ld>Abstract Data Types, simulating support for native types</ld>
      <ld>CPPPL 10, 11, CPPSL 11 <br/>Web Notes</ld>
      <cd><ifile title="Pr1">../CSE687/projects/Pr1s11.doc</ifile></cd>
    </lecture>
    <lecture>
      <ld>
        Overloading:<br/>
        <ifile title="Lecture&#32;#5">../CSE687/Lectures/cse687codeL5.xml</ifile>
      <br/>Tue Feb 01</ld>
      <ld>operator model, overloading, std::string</ld>
      <ld>CPPPL 11 <br/>Web Notes</ld>
      <cd><ifile title="Pr1">../CSE687/projects/Pr1s11.doc</ifile></cd>
    </lecture>
    <lecture>
      <ld>
        Templates:<br/>
        <ifile title="Lecture&#32;#6">../CSE687/Lectures/cse687codeL6.xml</ifile>
      <br/>Thur Feb 03</ld>
      <ld>templates, binding time, software reuse</ld>
      <ld>CPPSL 2,<br/>CPPPL 13 <br/>Web Notes</ld>
      <cd><ifile title="Pr1">../CSE687/projects/Pr1s11.doc</ifile></cd>
    </lecture>
    <lecture>
      <ld>
        Template Applications:<br/>
        <ifile title="Lecture&#32;#7">../CSE687/Lectures/cse687codeL7.xml</ifile>
      <br/>Tue Feb 08</ld>
      <ld>Template pollicies, traits, Containers, smart pointers, reference counted objects</ld>
      <ld>CPPPL 13 <br/>Web Notes</ld>
      <cd><ifile title="Pr1">../CSE687/projects/Pr1s11.doc</ifile></cd>
    </lecture>
    <lecture>
      <ld>
        Hierarchy:<br/>
        <ifile title="Lecture&#32;#8">../CSE687/Lectures/cse687codeL8.xml</ifile>
      <br/>Thur Feb 10</ld>
      <ld>relationships between classes</ld>
      <ld>CPPPL 12, 15 <br/>Web Notes</ld>
      <cd><ifile title="Pr1">../CSE687/projects/Pr2s11.doc</ifile></cd>
    </lecture>
    <lecture>
      <ld>
        Inheritance &amp; Composition:<br/>
        <ifile title="Lecture&#32;#9">../CSE687/Lectures/cse687codeL9.xml</ifile>
      <br/>Tue Feb 15</ld>
      <ld>Inheritance &amp; Composition examples, initialiation</ld>
      <ld>CPPPL  10<br/>Web Notes</ld>
      <ed><ifile title="Pr1 due">../CSE687/projects/Pr2s11.doc</ifile></ed>
    </lecture>
    <lecture>
      <ld>
        Liskov Substitution Principle:<br/>
        <ifile title="Lecture&#32;#10">../CSE687/Lectures/cse687codeL10.xml</ifile>
      <br/>Thur Feb 17</ld>
      <ld>Inheritance examples, initialization, polymorphism, Liskov Substitution Principle (ISP)</ld>
      <ld>CPPPL 12, 15 <br/>Web Notes</ld>
      <cd><ifile title="Pr2">../CSE687/projects/Pr2s11.doc</ifile></cd>
    </lecture>
    <lecture>
      <ld>
        Open/Closed&#32;Principle:<br/>
        <ifile title="Lecture&#32;#11">../CSE687/Lectures/cse687codeL11.xml</ifile>
      <br/>Tue Feb 22</ld>
      <ld>Open/Closed&#32;Principle&#32;(OCP), design for OCP</ld>
      <ld>Web Notes</ld>
      <cd><ifile title="Pr2">../CSE687/projects/Pr2s11.doc</ifile></cd>
    </lecture>
    <lecture>
      <ld>
        Interfaces:<br/>
        <ifile title="Lecture&#32;#12">../CSE687/Lectures/cse687codeL12.xml</ifile>
      <br/>Thur Feb 24</ld>
      <ld>Depencency Inversion Principle (DIP), interfaces and object factories again</ld>
      <ld>CPPPL 12 <br/>Web Notes</ld>
      <cd><ifile title="Pr2">../CSE687/projects/Pr2s11.doc</ifile></cd>
    </lecture>
    <lecture>
      <ld>
        Interface Segregation Principle:<br/>
        <ifile title="Lecture&#32;#13">../CSE687/Lectures/cse687codeL13.xml</ifile>
      <br/>Tue Mar 01</ld>
      <ld>components, interfaces, Interface Segregation Principle (ISP), Exceptions</ld>
      <ld>CPPPL 12<br/>Web Notes</ld>
      <cd><ifile title="Pr2">../CSE687/projects/Pr2s11.doc</ifile></cd>
    </lecture>
    <lecture>
      <ld>
        Streams:<br/>
        <ifile title="Lecture&#32;#17">../CSE687/Lectures/cse687codeL17.xml</ifile>
      <br/>Thur Mar 03</ld>
      <ld>Exceptions, iostreams</ld>
      <ld>CPPSL 13,<br/>CPPPL 14, 21<br/>Web Notes</ld>
      <cd><ifile title="Pr3">../CSE687/projects/Pr3s11.doc</ifile></cd>
    </lecture>
    <lecture>
      <ld>
        Midterm Review:<br/>
        <ifile title="Lecture&#32;#14">../CSE687/Lectures/cse687codeL14.xml</ifile>
      <br/>Tues Mar 08</ld>
      <ld>Review last year's exam</ld>
      <ld>CPPSL, CPPPL <br/>Notes </ld>
      <cd><ifile title="Pr2">../CSE687/projects/Pr2s11.doc</ifile></cd>
    </lecture>
    <emlecture>
      <ld>
        Midterm Exam:<br/>
        <ifile title="Lecture&#32;#15">../CSE687/Lectures/cse687codeL15.xml</ifile>
      <br/>Thur Mar 10</ld>
      <ld><html><b style="font-size:large;">Midterm Exam</b></html></ld>
      <cd>You may bring in one page of notes.  Write on both sides if you wish.</cd>
      <cd><ifile title="Pr2">../CSE687/projects/Pr2s11.doc</ifile></cd>
    </emlecture>
    <emlecture>
      <ld>Tue Mar 15</ld>
      <ld><html><b style="font-size:large;">Spring Break</b></html></ld>
      <cd>no classes</cd>
      <ed><ifile title="Pr2">../CSE687/projects/Pr2s11.doc</ifile></ed>
    </emlecture>
    <emlecture>
      <ld>Thur Mar 17</ld>
      <ld><html><b style="font-size:large;">Spring Break</b></html></ld>
      <cd>no classes</cd>
      <cd><ifile title="Pr2">../CSE687/projects/Pr2s11.doc</ifile></cd>
    </emlecture>
    <lecture>
      <ld>
        Midterm Results:<br/>
        <ifile title="Lecture&#32;#16">../CSE687/Lectures/cse687codeL16.xml</ifile>
      <br/>Tue Mar 22</ld>
      <ld>Exams returned, solutions discussed, <ifile title="Midterm Makeup">../cse687/midterm/MTSp11/MTmakeupSp11.doc</ifile></ld>
      <ld>solutions handed out</ld>
      <cd><ifile title="Pr2">../CSE687/projects/Pr2s11.doc</ifile></cd>
    </lecture>
    <lecture>
      <ld>
        Streams Details:<br/>
        <ifile title="Lecture&#32;#18">../CSE687/Lectures/cse687codeL18.xml</ifile>
      <br/>Thur Mar 24</ld>
      <ld>iostreams, stringstreams, manipulators</ld>
      <ld>CPPSL 13,<br/>CPPPL 21<br/>Web Notes</ld>
      <ed><ifile title="Extended Pr2 due">../CSE687/projects/Pr2s11.doc</ifile></ed>
    </lecture>
    <lecture>
      <ld>
        Standard Template Library:<br/>
        <ifile title="Lecture&#32;#19">../CSE687/Lectures/cse687codeL19.xml</ifile>
      <br/>Tue Mar 29</ld>
      <ld>Standard Template Library (STL), STL containers, iterators</ld>
      <ld>CPPSL 5, 6, 7<br/>CPPPL 16, 17, 19<br/>Web Notes</ld>
      <cd><ifile title="Pr3">../CSE687/projects/Pr3s11.doc</ifile></cd>
    </lecture>
    <lecture>
      <ld>
        Sockets, Pr#3:<br/>
        <ifile title="Lecture&#32;#20">../CSE687/Lectures/cse687codeL20.xml</ifile>
      <br/>Thur Mar 31</ld>
      <ld>STL details</ld>
      <ld>CPPSL 8, 9,<br/>CPPPL 18<br/>Web Notes</ld>
      <cd><ifile title="Pr3">../CSE687/projects/Pr3s11.doc</ifile></cd>
    </lecture>
    <lecture>
      <ld>
        Processes and Threads<br/>
        <ifile title="Lecture&#32;#21">../CSE687/Lectures/cse687codeL21.xml</ifile>
      <br/>Tue Apr 05</ld>
      <ld>Win32 Processes, Threads and Locking classes</ld>
      <ld>Web Notes</ld>
      <cd>
        <ifile title="Pr3">../CSE687/projects/Pr4s11.doc</ifile> 
      </cd>
    </lecture>
    <lecture>
      <ld>
        Sockets:<br/>
        <ifile title="Lecture&#32;#22">../CSE687/Lectures/cse687codeL22.xml</ifile>
      <br/>Thur Apr 07</ld>
      <ld>Win32 Sockets, socketcommunicator</ld>
      <ld>Web Notes</ld>
      <ed>
        <ifile title="Pr3 due">../CSE687/projects/Pr3s11.doc</ifile> 
      </ed>
    </lecture>
    <lecture>
      <ld>
        Managed&#32;C++:<br/>
        <ifile title="Lecture&#32;#23">../CSE687/Lectures/cse687codeL23.xml</ifile>
      <br/>Tue Apr 12</ld>
      <ld>(Managed) C++/CLI, Syntax and Example Applications, Framework Class Libraries</ld>
      <ld>Web Notes</ld>
      <cd>
        <ifile title="Pr4">../CSE687/projects/Pr4s11.doc</ifile>
      </cd>
    </lecture>
    <lecture>
      <ld>
        OOD Design and Design Issues<br/>
        <ifile title="Lecture&#32;#24">../CSE687/Lectures/cse687codeL24.xml</ifile>
      <br/>Thur Apr 14</ld>
      <ld>Winforms using (managed) C++/CLI</ld>
      <ld>Web Notes</ld>
      <cd>
        <ifile title="Pr4">../CSE687/projects/Pr4s11.doc</ifile>
      </cd>
    </lecture>
    <lecture>
      <ld>
        Template Metaprogramming:<br/>
        <ifile title="Lecture&#32;#25">../CSE687/Lectures/cse687codeL25.xml</ifile>
      <br/>Tue Apr 19</ld>
      <ld>compile-time functions, selection, type lists</ld>
      <ld>Web Notes</ld>
      <cd>
        <ifile title="Pr4">../CSE687/projects/Pr4s11.doc</ifile> 
      </cd>
    </lecture>
    <lecture>
      <ld>
        Applications of Template Metaprogramming:<br/>
        <ifile title="Lecture&#32;#26">../CSE687/Lectures/cse687codeL26.xml</ifile>
      <br/>Thur Apr 21</ld>
      <ld>Typelists, functors, smart pointers, Loki Library</ld>
      <ld>Web Notes</ld>
      <cd>
        <ifile title="Pr4">../CSE687/projects/Pr4s11.doc</ifile> 
      </cd>
    </lecture>
<!--
    <lecture>
      <ld>
        Help with Projects 4a,b,c,d<br/>
        <ifile title="Lecture&#32;#26">../CSE687/Lectures/cse687codeL26.xml</ifile>
      <br/>Thur Apr 28</ld>
      <ld>Some ideas, a little prototype code, suggested layered approach</ld>
      <ld>Web Notes</ld>
      <cd>
        <ifile title="Pr4">../CSE687/projects/Pr4s11.doc</ifile> 
      </cd>
    </lecture>
-->
    <lecture>
      <ld>
        Documenting OO Designs:<br/>
        <ifile title="Lecture&#32;#27">../CSE687/Lectures/cse687codeL27.xml</ifile>
      <br/>Tue Apr 26</ld>
      <ld>Diagrams: packages, classes, activities, modules, examples</ld>
      <ld>Web Notes</ld>
      <cd>
        <ifile title="Pr4">../CSE687/projects/Pr4s11.doc</ifile> 
      </cd>
    </lecture>
    <lecture>
      <ld>
        Wrap-up:<br/>
        <ifile title="Lecture&#32;#28">../CSE687/Lectures/cse687codeL28.xml</ifile>
      <br/>Thur Apr 28</ld>
      <ld>Where do we go from here?</ld>
      <ld>Web Notes</ld>
      <ed>
        <ifile title="Pr4">../CSE687/projects/Pr4s11.doc</ifile> due 
      </ed>
    </lecture>
  </syllabus>
  </visible>
</courses>
