Syllabus

Course texts

Required:

The C++ Programming Language, 3rd Edition,
Bjarne Stroustrup, 1997 Addison-Wesley.

Optional (for the motivated reader):

View Larger Cover Image C++ Programming Today
Barbara Johnston, 2002 Prentice Hall.
View Larger Cover Image UML and C++: A Practical Guide to Object-Oriented Development, 2nd Edition,
Richard C. Lee and William M. Tepfenhart, 2001 Prentice Hall.
UML Distilled, 2nd Edition,
Martin Fowler with Kendall Scott, 2000 Addison-Wesley
Software Engineering: A Practitioner's Approach, 4th Edition,
Roger S. Pressman, 1996 McGraw-Hill College Division.
C++: The Complete Reference, 3rd Edition,
Herbert Schildt, 1998 Osborne McGraw-Hill.
Design Patterns, 1st Edition,
E. Gamma, R. Helm, R. Johnson, J. Vlissides, 1995 Addison-Wesley Publishing.

Description

This course is a comprehensive introduction to object-oriented software development in the C++ programming language. The fundamentals of object-oriented design and programming are presented and related to features of C++. The syntax and behavior of C++ language elements and idioms are illustrated through discussion and demonstration.

The lectures cover the principles and techniques of object-oriented design and programming, notation used in object modeling, C++ class and interface design and construction. Specific language topics such as data types, variables, pointers, arrays, storage classes, function call convention, references, execution control, overloading, virtual member functions, single and multiple inheritance, member access control, "Orthodox Canonical Form", templates, the STL, and exception handling are covered. Topics in OO-Analysis and OO-Design include object identification, classification, CRC, use cases, UML and the iterative/incremental development cycle. As time permits, the course may also address related topics such as C++/Java contrasts, building on application frameworks, design patterns, or multithreaded programming. 

This course is best suited to students with previous structured programming experience. Although the course covers much of C as background for C++, students with experience in C will be better able to focus on the OO/C++ aspects of the material.

Logistics

Class meetings take the form of lectures and discussion. In addition to the lecture material, the course uses handouts, weekly reading assignments, and design and programming exercises.

Students are welcome to use any C++ compiler for the programming coursework, provided it supports current ANSI/ISO standards such as the Standard Template Library (STL) and exceptions. The instructor recommends Microsoft Visual C++ v6.0 or the latest version of GNU C++, both of which meet this requirement.

Schedule

Classes meet Thursday evenings, from 6:00 to 9:30

Week
Date Lecture Homework Reading
1
9/11 1 HW1, due week 2 Chapters 1, 2
2
9/18 2 HW2, due week 3 Chapter 3
3
9/25 3 HW3, due week 4 Chapter 23
4
10/2 4 HW4, due week 5 Chapters 4, 5, 6.2-6.6
5
10/9 5 HW5, due week 6 Chapter 7
6
10/16 6 Prepare for Mid-Term Review Chapters 1-7 and Lecture Notes
7
10/23 Mid-Term Exam    
8
10/30 7 HW6, due week 9 Chapter 10
9
11/6 8 HW7, due week 10 Chapter 11, 12
10
11/13 9 HW8, due week 11 Chapter 13
11
11/20 10 Prepare for Presentation Chapter 14, 16
12
11/27 Thanksgiving Holiday    
13
12/4 Project Presentations   Chapter 15
14
12/11 11 Prepare for Final Review Chapters 10-16 and Lecture Notes
15
12/18 Final Exam    

Grading

Grades for the course are broken down as follows:

Homework 100 points
Mid-term exam 100 points
Final exam 100 points
Project 200 points
Total 500 points

Letter grades will be given as follows:

Point total Letter Grade
450-500 A
425-449 A-
400-424 B+
375-399 B
350-374 B-
325-349 C+
300-324 C
250-299 C-

Lectures and assignments

Lecture 1 - Object-Oriented Principles
OO contrasted with conventional approach. Concepts of class, objects, encapsulation, inheritance, polymorphism and overloading introduced. Code organization basics.
Reading:
Assignment: Hello World!

Lecture 2 - OO Software Development (1) - Process
Object-oriented "programming-in-the-large", overview of techniques and steps in analysis and design.  Using Use Cases to capture and document software requirements.   
Reading:  
Assignment: Project Use Cases

Lecture 3 - OO Software Development (2) - Using UML
The Unified Modeling Language (UML).  Using Rational Rose to create analysis and design models.  Automatic code generation and Reverse engineering.  Class Responsibilities and Collaboration (CRC) exercise on term project.
Reading:
Assignment: Project Analysis model

Lecture 4 - Core C++ (1)
Language fundamentals: data types, variables, pointers, arrays, statements, expressions and operators. Execution control. Defining functions, argument matching. 
Reading:
Assignment: Dates and pointers

Lecture 5 - Core C++ (2)
Closer look at OO fundamentals mapped to specific C++ features: the class, access control, inheritance, overloading and polymorphism. The Minefield game.
Reading:
Assignment: Extending Minefield

Lecture 6 - Core C++ (3)
Constructors and destructors introduced. Storage types. Argument passing conventions. Const.  Standard library introduced; vector and string classes.
Reading:
Assignment: Fractions

Lecture 7 - The C++ Class (1)
Designing the class.  Embedding objects vs. pointers to objects.  Virtual member functions.  Abstract base classes, inline, "this" pointer. The "shapes" program.
Reading:
Assignment: review for midterm.

Mid-term exam

Lecture 8 - The C++ Class (2)
Inheritance access specification, "Orthodox Canonical Form": defining the class ctor, dtor, copy ctor and assignment operator.  User-defined conversions. 
Reading:
Assignment: Project Object Model

Lecture 9 - Templates, Generic Programming
Function and class templates, generic programming.
Reading:
Assignment: Integer stack

Lecture 10 - The C++ Standard Library
Stream-based I/O; The Standard Template Library (STL) - Template-based container classes, generic algorithms, auto_ptr
Reading:
Assignment: TBD

Lecture 11 - Design Patterns
Motivation for and introduction to Design Patterns.  Implementation of design patterns in C++
Reading:
Assignment: TBD

Lecture 12 - Odds & Ends
Design and use of C++ exceptions.  Multiple inheritance. Run-time type information (RTTI),  C++ casts. 
Reading:
Assignment: finish projects, prepare for presentations.

Lecture 13 - Project Presentations
10-15 minute presentations of project design, implementation, and operation.  Discussion of lessons learned, design
Reading:
Projects due.
Assignment: review for final exam.

Final Exam