Object-Oriented Software Principles
Semester: Spring 2012

Course Information

  • Instructor: Hongwei Xi (email: hwxi AT cs DOT bu DOT edu)
  • Instructor's Office: MCS 287
  • Instructor's Office Hours: M 5-7 and W 4-6; or by appointment
  • Grader: Zhiqiang Ren (email: aren AT cs DOT bu DOT edu)
  • Syllabus: (pdf) (ps)
  • A week-by-week schedule
  • Lecture Times: Monday & Wednesday 1:00-2:30
  • Classroom: MCS B25
  • Midterm: Take-home
  • Final Project: Presentation


Object-oriented Software Principles is a course that introduces students to some fundamental principles and techniques in object-oriented programming. Howewer, there is always logic before principles and techniques. We plan to spend the first half of the course on logics: propositional logic, predicate logic, linear (propositional and predicate) logic, etc. In the second half of the course, we are to make use of some concerete and interesting examples to demonstrate a programming style that unifies formal specification (based on the logics presented in the first half) with implementation. In particular, we are to make essential use of linear types to model objects accurately as well as effectively. At the end of course, we will also give a brief introduction to linear temporal logic (LTL).


  • Familiarity with programming in general.
  • CS320 (Concepts of Programming Languages) or equivalents.


Reference Books

Programming Languages

  • ATS (this mode may be helpful if you use emacs to edit ATS source code)


  • Multiple Inheritance for C++ (mi.pdf)

Class Calendar

  • Monday, the 20th of February, 2012: No Class (Holiday)
  • Tuesday, the 21st of February, 2012: Substitute Monday's Schedule
  • Week of March 12-18: No class (Spring Recess)
  • Monday, the 16th of April, 2012: No Class (Holiday)
  • Wednesday, the 18th of April, 2012: Substitute Monday's Schedule
  • Wednesday, the 2nd of May, 2012: Last Day of Class


  • Assignment 1: Due on Wednesday, the 25th of January, 2012

    Links: (assignment.dats)

  • Assignment 2: Due on Wednesday, the 1st of February, 2012

    Links: (assignment.sats) (assignment.dats)

  • Assignment 3: Due on Wednesday, the 8th of February, 2012

    Links: (assignment)

  • Assignment 4: Due on Wednesday, the 15th of February, 2012

    Links: (assignment.dats)

  • Assignment 5: Due on Wednesday, the 22nd of February, 2012

    Links: (btree.dats)

  • Assignment 6: Due on Wednesday, the 29th of February, 2012

    Links: (GameOf24)

  • Assignment 7: Due on Wednesday, the 21th of March, 2012

    1. (50 points) Please use the cairo API in ATS to draw the following images:

    2. (80 points) Please find out on-line what Enigma machines are and then implement one in ATS. I expect that you make convincing use of ATS types in specifying the kind of Enigma machine you implement.

  • Assignment 8: Due on Monday, the 9th of April, 2012

    1. (40 points) Then code in GameOf24_par outlines an approach to parallelizing the implementation of Game-Of-24. Please complete the code after your figuring out how it works.

    2. (40 points) You can find a clock implementation here that makes use of GTK and cairo. Please implement a similar clock that should NOT employ the event loop provided by GTK to handle time-stamped events; it should instead use the workshop implementation given in Workshop2 to do so. Note that you are expected to design and implement a clock of your own (instead of entirely copying the one given as an example).


  • Midterm is due by 11:59pm on Sunday, the 15th of April

Final Project


This page is created with ATS by Hongwei Xi (email: hwxi AT cs DOT bu DOT edu).