COM1204, Object-Oriented Design, Summer 1998, Professor Futrelle

Course Information


The general information for my teaching this summer, covering both COM1204 and COM1370, can be found on a page devoted to this. The detailed syllabus is also available. Below is more specific information.

Classes: Classes meet in Sequence 1, 8:00-9:05am, Mondays, Wednesdays and Thursdays, in room 247CN.


Object-Oriented Software Construction by Bertrand Meyer - 1296 pages 2nd edition (April 1997) Prentice Hall. (Read the excellent reviews of this book.)

C++ Primer by Stanley B. Lippman, Josee Lajoie Paperback - 1237 pages 3rd edition (April 1998) Addison-Wesley Pub Co. (Read the excellent reviews of this book.)

These books are big and thick and not cheap. But they represent the best there is out there, as you can see from the reviews, and I hope that you'll be able to keep and use these books for years to come.

Programming Environment: Code Warrior C++ on Macintoshes in 129CN and 201CN. Some of you will insist on doing your C++ programming on Wintel, Linux, or Unix. And I insist that no matter where or how you develop your code, that you hand in your projects as files on the Mac that compile and run under CodeWarrior on the Mac. It will be virtually impossible to share your code in your group and especially with other groups unless everyone stores and exchanges code on the same platform, the Macintoshes. This course requires that you be flexible enough to deal with Macs, even if you own or use other systems routinely.

As professionals, you must be able to adapt to various environments -- if I hadn't adapted, my CS career would have come to an end in 1965, when I left the IBM mainframe at MIT, using assembler code, to work in California on CDC machines in Fortran, and on Wang machines. I've changed languages and operating systems many times since then, and I'll certainly change in the future. Currently, my research work tends to use Macintosh Common Lisp for batch runs, graphics, and the MIT AI Lab web server, and Unix for Allegro Common Lisp and other things.

The major course design and implementation activity: Telephone systems: The beauty of building a telephone system is that we are very familiar with what they're supposed to do, they are made up of lots of modular components, and we can start off simply and add components and features incrementally. The simplest phone system is two phones "hardwired" together. Then we can add controls such as ring and hangup. Then dialing without central switching, then central switching, then call billing, directory service, and on and on -- we'll see how far we get. All of this is ideally suited for object-oriented software, from the phone objects themselves to the information packets that are sent across the "lines". We know that many different brands of phones, that differ internally, work fine when plugged in -- that's what good object-oriented software should do. Also, real calls are switched through many differently implemented switching systems, all of which end up routing the call to give the same end result.

Our phone system will be driven interactively by typing commands and then from a command file that does essentially the same, but much faster. The system activity will be logged on a log file in human-readable form, recording both the commands and the activity and responses they generate. I've had some experience with implementing a model of a phone system in COM1204 before. One student even added a "modem" capability that allowed two phones to exchange files -- clever!

For the truly adventurous (extra credit), you can "wire" two or more machines together via file-sharing, by having messages delivered by writing files shared with other machines. Someone or a group can experiment with this.

Comments on the design of this course: The entire subject of object-oriented software design and related software engineering issues is in a tremendous state of flux, with thousands of different opinions as to how to go about it. For this reason, this course gets redesigned all the time and is taught differently by different faculty members. This is the first time the new Meyer book and the new Lippman book have been used in COM1204, and the first time I've used them, so the structure on the course is not cast in concrete. You'll see it evolve as the quarter proceeds. So bear with me and be ready for a few sudden turns and shifts of emphasis. It should be a lot of fun and quite educational, no matter the details.

Programming by individuals and groups: Each person will be responsible for certain basic design and programming. We will also have groups responsible for more complex modules -- each individual cannot write all the interesting modules by themselves.

The first thing we'll do is to make sure that every student can sit at the machine and create a programming project from scratch. That will assure that you can operate independently and will not be restricted in your skills simply to modifying code that you are given. I will demonstrate the process in class and the Code Warrior manuals are online to help also.