Object-Oriented Design and implementation of large scale software using C++. Topics include inheritance, polymorphism, virtual functions, and the STL. Prior knowledge of C++ is not required. Extensive programming required. Prerequisite: CSC 161 and knowledge of C++ or Java.
Besides topics introducing various features of C++, the course will focus on a series of projects that will culminate in the implementatioin of an interpreter for a small programming language. The series of projects will be used as a vehicle to illustrate the design, implementation, and testing of ``large" software project.
My office is in Carnegie Hall 311 B. You can stop by in person, or call my office at 630-637-5174. If I am not at the office and you need immediate attention, you can call me at home at 630-759-2110. You can email me at firstname.lastname@example.org. Spring term office hours are Tuesdays and Thursdays 3:50 - 6:20 pm. I can also see you by appointment.
The class textbook is The C++ Programming Language, Bjarne Stroustrup, Pearson Education, 2013. Here is a link to the book.
The book is meant to be used as a C++ resource and reference. The course lectures will not be based on the book: rather, the book will be used by students as a resource for C++ matters not explicitly covered in lecture, and for additional examples and explication of C++ material covered in lecture.
There will be two main threads of discussion during lectures. One thread will focus on C++ topics, and will cover general use of the language as a tool for software development. Short programs that use various C++ concepts will be assigned as homework to help students solidify their understanding of the C++ language.
A second thread will discuss software development topics, focusing on the design, implementation, and testing of a "large" software projects. The emphasis here will be on how to go about designing and developing large projects. Students will implement a series of projects that build on each other and culminate in the construction of an interpreter for a small language. The projects are designed to give students experience both with software development, and with features of C++. There is no text for this part of the course, and the main resource will be the instructor's lectures. Language-implementation information is difficult to find in easily digestible form in printed books or online, so be sure to take good notes during lectures.
Toward the end of the course, students will work in teams of two or three to design and implement another project. Details on the team project will be provided later.
Tentative Order of Coverage for C++ Topics
The following order of discussion is tentative, and will likely be adjusted as the course progresses. In particular, order of course topics will be changed as needed to accomodate the implementation of the language interpreter project.
- Overview of C++, functions, global and local variables, The C++ preprocessor, const variables, Console input and output, primitive types, arrays.
- The Standard Template Library, sequence and random access containers, iterators, vector, list, set and map classes; IO stream classes, file streams, string streams.
- Value and reference parameters, default parameters; Classes: default, copy, and convert constructors; class destructors; Application of class constructors and destructors to trace function calls and returns during debugging, Use of constructors and destructors in resource allocation and deallocation.
- Pointers and dynamic memory allocation.
- Inheritance and Polymorphism, virtual functions, Runtime Type Identification; static and dynamic casts.
Schedule of In-class TestsThere will be a quiz on Thursday of Week 3 (5%), a midterm on Thursday of Week 5 (13%), a test on Thursday of Week 8 (13 %), and a final exam (24 %). All homework or programming assignments done outside of class will account for a total 45%. Shorter assignments will weigh less than major projects.
Most of the homework will be short programs focused on a few C++ concepts, and will usually be due within two days of being assigned. Course projects will typically be due within a week of being assigned.
All assignments and projects must be submitted via email using your College email account.
and must have a subject that begins with
All assignments and projects should be turned in by midnight on the day due. A 10% penalty will be assessed on projects turned in late, but in general this penalty will not be levied if the assignment is turned in before I have completed grading the batch of assignments to which it belongs. No assignment/project turned in after the due date for the next assignment/project will be graded. I will make an exception to this rule for students who have been coming to see me for help, where I judge that the student is reasonably close to getting the assignment or project done.
Policy on Missed Tests and QuizzesIn-class tests and quizzes missed without a legitimate excuse cannot be made up. If you have to miss quiz or test (for some legitimate reason) please let me know at least a week before and I will make arrangements for a make up. In the event some unexpected reason beyond your control prevents you from being in class on the day of a test, contact me as soon as possible by phone or email to arrange a make up.