L T B H P N L Lectures

CSE687 - Object Oriented Design

Design Tactics with Native Code

"The purpose of life is a life of purpose."
- Robert Byrne

Resources:

Syllabus, Lectures, Videos, Principles
Submitting Projects, Academic Integrity and Grading Policy
SG - OOD, SG - Design, SG - Templates, SG - Class Relationships
Succeeding with OOD Projects, Uploading Project Submissions
C++ Wikipedia, C++11 Wikipedia, C++14 Wikipedia, C++17 Wikipedia
CppCon 2018, CppCon 2017, CppCon 2016, CppCon 2015, CppCon 2014
Going Native 2013, Going Native 2012
Stroustrup's Home Page, Herb Sutter's Blog, Herb Sutter Videos - Channel 9, Thomas Becker's blog
Universal References - Scott Meyers
Modules - early experiment
SysInternals - Microsoft
Getting Started with C++

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.

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.

Required Texts and Notes:

  1. C++ Programming Languge (CPPPL), 4th Edition, Stroustrup .
  2. The C++ Standard Library (CPPSL), Second Edition, Nicolai Josuttis, Addison-Wesley, 2012, ISBN 978-0-321-62321-8
  3. Class Notes, available on www.ecs.syr.edu/faculty/fawcett/handouts/CSE687
  4. CppReference.com - Excellent synopsis of the C++ language and library

Recommended References:

These are texts I like and use from time to time. I don't expect you to look at all of these - just know they are here and think about buying if you find yourself working as a C++ developer after finishing your program.
  1. C++ Primer (CPPP), Fifth Edition, Lippman, Lajoie, Moo, Addison-Wesley, 2013
  2. A Tour of C++, Bjarne Stroustrup, ISBN 978-0-321-95831
  3. C++ Primer Plus, Stephen Prata, Waite Group Press, 2012, ISBN 0-321-77640-2, Sixth Edition available at desk in SciTech Library
  4. C++ Coding Standards, Herb Sutter, Andrei Alexandrescu, Addison-Wesley, 2005
  5. C++ Gotchas, Avoiding Common Problems in Coding and Design, Stephen Dewhurst, Addison-Wesley, 2003
  6. Effective STL, Scott Meyers, Addison-Wesley, 2002
  7. Effective C++, Scott Meyers, Addison-Wesley, 3rd Edition, 2005
  8. More Effective C++, Scott Meyers, Addison-Wesley, 1996
  9. The Design and Evolution of the C++ Language, Bjarne Stroustrup, Addison-Wesley, 1994
  10. Modern C++ Design, Andre Alexandrescu, Addison-Wesley, 2001
  11. Imperfect C++, Matthew Wilson, Addison-Wesley, 2005
  12. Exceptional C++, Herb Sutter, Addison-Wesley, 2000
  13. More Exceptional C++, Herb Sutter, Addison-Wesley, 2002
  14. Exceptional C++ Style, Herb Sutter, Addison-Wesley, 2005
  15. Boost C++ Library UML Tutorial cplusplus.com references Schmidt Tutorials ACCU.org The C++ Source STL Programming Links

Prerequisites:

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++.

Syllabus - Spring 2019:

Syllabus CSE687 - Object Oriented Design
Lecture Topics Read before class Project
Introduction:
Lecture #1, Tue Jan 15
Syllabus, projects, examination, grading, notation, packages, Handouts skim CPPPL chp 1-9
skim CPPP 1-6, CPPSL 2
hand out Pr1
Language Survey:
Lecture #2, Thur Jan 17
classes, object model, templates, references, streams CPPP 7, 16
links on lecture page
CppR - language
Pr1
Encapsulation:
Lecture #3, Tue Jan 22
Encapsulation Principle, interfaces, object factories CPPP 7
links on lecture page
Pr1
Abstraction:
Lecture #4, Thur Jan 24
Value Types, simulating support for native types CPPP 7, 13, 14
links on lecture page
CppR - class
Pr1
Overloading:
Lecture #5, Tue Jan 29
operator model, overloading, std::string CPPP 14, CPPSL 13
links on lecture page
CppR - Operators
Pr1
Templates:
Lecture #6, Thur Jan 31
templates, binding time, software reuse CPPP 16
links on lecture page
CppR - Templates
Pr1
Template Applications:
Lecture #7, Tue Feb 05
Template pollicies, traits, Containers, smart pointers, reference counted objects CPPP 16
links on lecture page
CppR - Templates
Pr1 due
Hierarchy:
Lecture #8, Thur Feb 07
relationships between classes CPPP 15
links on lecture page
Pr2
Inheritance & Composition:
Lecture #9, Tue Feb 12
Inheritance & Composition examples, initialiation CPPP 15
links on lecture page
CppR - Derived Classes
Pr2
Liskov Substitution Principle:
Lecture #10, Thur Feb 14
Inheritance examples, initialization, polymorphism, Liskov Substitution Principle (ISP) CPPP 15
links on lecture page
Pr2
Open/Closed Principle:
Lecture #11, Tue Feb 19
Open/Closed Principle (OCP), design for OCP links on lecture page Pr2
Interfaces:
Lecture #12, Thur Feb 21
Depencency Inversion Principle (DIP), interfaces and object factories again links on lecture page Pr2
Processes and Threads:
Lecture #13, Tue Feb 26
Win32 Processes, Threads and Locking classes links on lecture page Pr2
Processes and Threads:
Lecture #14, Thur Feb 28
Win32 Processes, Threads and Locking classes continued CPPPL 41, 42
links on lecture page
Pr2
Midterm Review:
Lecture #15, Tue Mar 05
Review last year's exam CPPP, CPPSL
Class Notes
Pr2 due
Midterm Exam:
Lecture #16, Thur Mar 07
Midterm Exam You may bring in one page of notes. Write on both sides if you wish. Pr3
Tue Mar 12 Spring Break no classes Pr3
Thur Mar 14 Spring Break no classes Pr3
Sockets:
Lecture #17, Tue Mar 19
Win32 Sockets links on lecture page Pr3
Sockets:
Lecture #18, Thu Mar 21
Socket Communication links on lecture page Pr3
Managed C++:
Lecture #19, Tue Mar 26
(Managed) C++/CLI, Syntax and Example Applications, Framework Class Libraries links on lecture page Pr3
WPF
Lecture #20, Thu Mar 28
Windows Presentation Foundation using (managed) C++/CLI links on lecture page Pr3
Midterm Results:
Lecture #21, Tue Apr 02
Exams returned, solutions discussed, Midterm Makeup Examination solutions handed out Pr3
Components:
Lecture #22, Thu Apr 04
components, interfaces, Interface Segregation Principle (ISP), Exceptions CPPPL 13
links on lecture page
Pr3
Streams:
Lecture #23, Tue Apr 09
Exceptions, iostreams CPPP 8, 18
links on lecture page
Pr3 due
Standard Template Library:
Lecture #24, Thu Apr 11
Standard Template Library (STL), STL containers, iterators CPPSL 6,7
CPPP 9-11
links on lecture page
Pr4
STL Details:
Lecture #25, Tue Apr 16
STL details CPPSL 8-12
links on lecture page
Pr4
Template Metaprogramming:
Lecture #26, Thu Apr 18
compile-time functions, selection, type lists links on lecture page Pr4
Applications of Template Metaprogramming:
Lecture #27, Tue Apr 23
Typelists, functors, smart pointers, Loki Library links on lecture page Pr4
Wrap-up:
Lecture #28, Thu Apr 25
Where do we go from here? links on lecture page Pr4
Wrap-up:
Lecture #29, Tue Apr 30
Help with Project #4 links on lecture page Pr4 due

campus at night