Stanford University
Computer Science 249B: Winter 2011

Advanced Object-Oriented Programming

Overview | Details | Materials | Exams | Project | Policies



This course examines the grand challenge of producing "perfect software systems" or more modestly stated, how to produce really, really, good software. The next stage of evolution of software engineering is producing large-scale systems that manage critical infrastructure and in some cases, life-critical systems. How do we produce really high-quality software at a reasonable cost, software that does what it is supposed to do at a reasonable cost, and that can evolve to meet changing requirements and circumstances, and the behaves sensibly under overload conditions.

The objectives of the course are to:

Students are expected carry out a software development project that explores some aspect of the course. One possibility is developing a software system that explores some aspect of the structuring and practice discussed in the course. The project includes a report. There is a midterm and a final exam on the material covered in lectures. Students are also expected to attend and participate in class.

The following is the basic syllabus:

  1. Introduction to Part II: Process, People and Practice
  2. Audit: Integrating Invariant Checks with Production Software
  3. Named Descriptions: Implementing Large Value Types
  4. Concurrency with Modular Object-oriented Programming
  5. Collection Implementation: How to Achieve Predictable Performance
  6. Generic Programming and Templates
  7. Design of Value Types
  8. Memory Management: Controlling Placement, Locality and Consumption
  9. The Software Development Process
  10. Inheritance: When and Why Multiple Inheritance


Tuesday and Thursday 11:00am to 12:15pm Math 380-381T
Announced as needed.
David Cheriton <cheriton (at) cs (dot) stanford (dot) edu>
Gates 439
(650) 723-1131
Office Hours: by arrangement through email, Gates 439
Course assistant:
none assigned
Knowledge of CS 249A is recommended.
3 units
Midterm Information
75 minute closed book exam
Grading (Tentative):
15% Midterm, 30% Final, 55% Project
Schedule (All due dates are midnight unless otherwise stated)
1/20/11: Project Proposal.
2/1/11: Midterm
2/15/11: Milestone due
3/14/11: Monday, March 14th: Final exam 3:30pm-6:30pm Location TBA
3/15/11 Project Demos.


Required reading

The course reader will be provided in PDF online in advance of the lectures. These are chapters that continue on from the CS 249A chapters. We keep the prior years readings as a reference for students to read ahead. As we update the reader for this year, we will mark the reading as updated.

Chapter 11 - Introduction (Updated) pdf and postscript

N. Leveson, High-pressure Steam Engines and Software Engineering

Chapter 12 - Audit (Updated) pdf and postscript

Chapter 13 - Named Descriptions (Updated) pdf and postscript

Chapter 14 - Concurrency (Updated) pdf and postscript

Chapter 15 - Collection and Iterator Implementation (Updated) pdf and postscript

Chapter 16 - Genericity, Templates, and Generic Programming (Updated) pdf and postscript

Chapter 17 - Value-Oriented Programming (updated) pdf and postscript

Chapter 18 - Memory Management (updated) pdf and postscript

Chapter 19 - OOP and the Object Model (updated) pdf and postscript

Chapter 20 - Type Structure and RTTI (Updated) pdf and postscript

Chapters 21 and 22 - Process and Conclusion (Updated) pdf and postscript


If you are interested in using the framework interfaces and classes discussed in cs249A for your project, they can be found here. These are the files used for the first homework assignment in cs249A. You will want to look inside of Tissue-HW.tar for the framework classes.

Files specific to cs249b can be found here: cs249b Files.

Optional readings

Interesting articles


2008 Midterm

2005 Midterm

2005 Final

2008 Final


Please take a look at the detailed project page.


The honor code is to be followed and shall be enforced. In particular:

The Stanford honor code applies to all work done in this course. All work you submit must be your own. Suspected violations of the honor code will be investigated and referred to the Office of Judicial Affairs. The university requires faculty to investigate and refer suspected violations as part of their responsibility under the honor code.

Honor code violations are a serious matter, and being found guilty of one can ruin your academic career. Review the honor code. If you ever find yourself uncertain about how it applies to your situation, ask. Asking what you might think is a silly question is better than risking your career.

Incomplete policy

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