Object-Oriented Programming from a
Modeling and Simulation Perspective

Stanford University
Computer Science 249A: Fall 2015 (3 units)
TTh 3:00-4:15, Gates B03 (also broadcast on SCPD)
Instructor: Prof David Cheriton,

Course Assistants:

Please sign up for this course on Piazza. Important announcements, including assignment release and deadlines will be posted on Piazza.

This course examines object-oriented programming techniques and issues, emphasizing programming as modeling and simulation, and covers the role of programming conventions, style, restrictions, and design patterns to leverage object-oriented programming for programming-in-the-large.

The objectives of the course include to cover issues involved in developing large-scale object-oriented software systems, to show how programming style conventions and language restrictions can ease object-oriented software development, and to provide insights into software component interface design.

For more background information, see the email message sent in the past to advertise the course.

Students will design and implement simulations in C++, applying the techniques covered in the course. You may develop your C++ code on any machine with a modern C++ implementation (must support C++11 language features), but you should test your code on one of the Stanford corn machines (corn.stanford.edu) because we will evaluate assignments on these machines.

There will also be a midterm exam on Tuesday, October 27 at 8:00-9:15pm at the Braun Lecture Hall. There will also be a final exam on Tuesday, December 8 from 3:30-6:30pm at Gates B03. The alternate final will be held in Y2E2 111 on Monday, December 7 from 3:30-6:30pm

Prerequisites: Knowledge of C/C++ and programming methodology as developed in CS 106B or 106X, and 107.

Required Readings

The course reader is available here. The chapters will be revised slightly in the week before we cover them. Last year's version of the chapter is made available (as indicated by the 2014 designation) for those interested in reading ahead.

Optional Readings


Under the Stanford Honor Code, each of you must submit your own work in this course. However, we expect you will ask others (instructor, CAs, other students) for hints and debugging help, as well as discussing problem-solving and program-structuring techniques.

We have set up a Piazza for the class and we encourage you all to sign up for it here

We encourage you to collaborate with others, but we require that you indicate on your assignments any assistance you received. You are also responsible for understanding and being able to explain the work that you submit.

Any assistance not cited may be considered a violation of the Honor Code, and suspected violations of the honor code will be investigated and referred to the Board on Judicial Affairs. Honor code violations are a serious matter, and being found guilty of one can ruin your academic career. Please review the honor code. If you ever find yourself uncertain about how it applies to your situation, please ask. Asking what you might think is a silly question is better than risking your career.

Late assignments

Each student has 5 24-hour extensions to use for late projects. No more than 3 extensions can be used for any single project.

Lectures are made available via SCPD on the same day they are taped, so SCPD students are expected to follow the same schedule as the rest of the class. This means that the above late assignment policy applies to SCPD students as well; exceptions are not granted due to students' work obligations.

Final grade breakdown

Assignments (3): 40%
Midterm: 15%
Final: 45%

Incomplete policy

No incompletes can be given in this course. Please make sure you determine before the drop deadline whether you can complete the course satisfactorily.