The goal of this course is to teach the students techniques in writing quality programs. After covering top-down program design techniques, students learn object-oriented programming concepts as the means to manage complexity in medium- or large-scale programs. These techniques and concepts are reviewed in a number of case studies from various domains such as program interpretation, simulation, and games. Throughout the course, program correctness is emphasized using unit tests, assertions, and pre- and post-conditions. The focus of the course is more on techniques rather than specific language constructs, yet most parts of the C++ language are covered, as well as the STL library.
The following two textbooks are used during the course.
- B. Stroustrup, Programming Principles and Practice Using C++, Addison-Wesley, 2009.
- H.M. Deitel and P.J. Deitel, C++ How to Program, 6th ed., Prentice Hall, 2008.
The final score of the students are computed according to the following weights:
Assignments and Final Project
- The assignments will be corrected with automatic testers. The result will make a major part of the assignment grades. The assignments will be reviewed manually to check the design and style.
- To pass the course, students must get at least 50% of the mid-term and final exams
- In case of copies, both source and destination receive a 100% penalty.
The course emphasizes practices of programming through weekly computer assignments (CAs). The assignments are accessible through the course CECM page. To give the students a chance to review the concepts introduced in the class quickly, there are a series of short assignments during the term. The CAs are tested automatically for correctness and manually for design and style. The final project of the term is scheduled for the last three weeks of the term.
- Introduction to Advanced Programming
- Overview of the basic features of C++
- Basic usage of string and vector types
- Top-down program design
- Basics of unit testing
- Introduction to object-oriented programming
- Basic class design
- Case study: Simulation
- Operator overloading
- Exception handling
- Dynamic binding
- Object-oriented design
- Stream I/O
- Dynamic data structures
- Generic programming
- STL containers and algorithms
- Passing in behavior
- Functional and logic paradigms for programming
- Other object-oriented languages (Java and Python)