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 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 - Fall 2018:

Syllabus CSE687 - Object Oriented Design
Lecture Topics Read before class Project
Introduction:
Lecture #1, Mon Aug 27
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, Wed Aug 29
classes, object model, templates, references, streams CPPP 7, 16
links on lecture page, CppR - language
Pr1
Mon Sep 3 Labor Day Holiday No classes - Celebrate by not working! Pr1
Encapsulation:
Lecture #3, Wed Sep 5
Encapsulation Principle, interfaces, object factories CPPP 7
links on lecture page
Pr1
Abstraction:
Lecture #4, Mon Sep 10
Abstract Data Types, simulating support for native types CPPP 7, 13, 14
links on lecture page, CppR - class
Pr1
Overloading:
Lecture #5, Wed Sep 12
operator model, overloading, std::string CPPP 14, CPPSL 13
links on lecture page, CppR - Operators
Pr1
Templates:
Lecture #6, Mon Sep 17
templates, binding time, software reuse CPPP 16
links on lecture page, CppR - Templates
Pr1
Template Applications:
Lecture #7, Wed Sep 19
Template pollicies, traits, Containers, smart pointers, reference counted objects CPPP 16
links on lecture page, CppR - Templates
Pr1 due
Hierarchy:
Lecture #8, Mon Sep 24
relationships between classes CPPP 15
links on lecture page
Pr2
Inheritance & Composition:
Lecture #9, Wed Sep 26
Inheritance & Composition examples, initialiation CPPP 15
links on lecture page, CppR - Derived Classes
Pr2
Liskov Substitution Principle:
Lecture #10, Mon Oct 01
Inheritance examples, initialization, polymorphism, Liskov Substitution Principle (ISP) CPPP 15
links on lecture page
Pr2
Open/Closed Principle:
Lecture #11, Wed Oct 03
Open/Closed Principle (OCP), design for OCP links on lecture page Pr2
Interfaces:
Lecture #12, Mon Oct 08
Depencency Inversion Principle (DIP), interfaces and object factories again links on lecture page Pr2
Processes and Threads
Lecture #13, Wed Oct 10
Win32 Processes, Threads and Locking classes links on lecture page Pr2 due
Processes and Threads
Lecture #14, Mon Oct 15
Win32 Processes, Threads and Locking classes continued CPPPL 41, 42
links on lecture page
Pr3
Midterm Review:
Lecture #15, Wed Oct 17
Review last year's exam CPPP, CPPSL
Class Notes
Pr3
Midterm Exam:
Lecture #16, Mon Oct 22
Midterm Exam You may bring in one page of notes. Write on both sides if you wish. Pr3
Sockets:
Lecture #17, Wed Oct 24
Win32 Sockets links on lecture page Pr3
Sockets:
Lecture #18, Mon Oct 29
Socket Communication links on lecture page Pr3
Managed C++:
Lecture #19, Wed Oct 31
(Managed) C++/CLI, Syntax and Example Applications, Framework Class Libraries links on lecture page Pr3
WPF
Lecture #20, Mon Nov 05
Windows Presentation Foundation using (managed) C++/CLI links on lecture page Pr3
Midterm Results:
Lecture #21, Wed Nov 07
Exams returned, solutions discussed, Midterm Makeup Examination solutions handed out Pr3 due
Components:
Lecture #22, Mon Nov 12
components, interfaces, Interface Segregation Principle (ISP), Exceptions CPPPL 13
links on lecture page
Pr4
Streams:
Lecture #23, Wed Nov 14
Exceptions, iostreams CPPP 8, 18
links on lecture page
Pr4
Mon Nov 19 Thanksgiving Break no classes Pr4
Wed Nov 21 Thanksgiving Break no classes Pr4
Standard Template Library:
Lecture #24, Mon Nov 26
Standard Template Library (STL), STL containers, iterators CPPSL 6-7, CPPP 9-11
links on lecture page
Pr4
STL Details:
Lecture #25, Wed Nov 28
STL details CPPSL 8-12
links on lecture page
Pr4
Template Metaprogramming:
Lecture #26, Mon Dec 03
compile-time functions, selection, type lists links on lecture page Pr4
Applications of Template Metaprogramming:
Lecture #27, Wed Dec 05
Typelists, functors, smart pointers, Loki Library links on lecture page Pr4 due

campus at night