Principles of Programming Languages
This course meets from 12:15-1:30 TTh, in room 39 (aka room 17)
in the basement of the Business Building.
An Introduction to Object-Oriented Programming,
by Timothy Budd, is required.
Other documentation will be provided
on-line or in handouts. For example, see
my brief tutorial on Scheme,
List of Adages on Software Development and Design,
Oriented Programming FAQ.
aka Literate Programming
and Object-Oriented Programming
The textbook discusses the languages C++, Objective C, two different
languages named Object Pascal, Smalltalk, and Java. All of these, to my
mind, are fairly similar to one another, so
I'd like to also give you the CLOS perspective
on object-oriented programming.
"CLOS", which stands for Common Lisp Object System, is a package of
extensions to Common Lisp to help people do object-oriented programming.
Since you're already familiar with Scheme, rather than Common Lisp,
we'll use a package named Tiny CLOS,
a package of extensions to Scheme
that implements the basic ideas of CLOS.
(I've installed Tiny CLOS on panther under the name "tclos"; you should
be able to just type that command and starting using it.)
I've written the beginnings of a
tutorial for Tiny CLOS; in addition,
some examples are in foods.scm
(which defines a bunch of objects, classes, and actions relevant to
hw2.4.scm (my solutions to a
particular homework problem last year),
and tiny-examples.scm (the
examples provided with the Tiny CLOS package).
If you like to learn a language by looking at its source code
(don't laugh, you can actually do that with Tiny CLOS!), take a look at
will be available in LaTeX,
updated schedule will
the latest updates to homework due dates, lecture topics, etc.
Please check the schedule regularly and keep up on the assigned reading!
I also taught this course in Spring 1995 and
- Homework 1, in-class portion (6 Feb)
- In groups, choose a software project (you're not tied to it for the
rest of the semester), discuss user-interface and (using CRC cards)
identify major components, responsibilities, and interactions among
- Homework 1, assigned 6 Feb, presentations due 18 Feb
- In groups, flesh out descriptions of user interface, software
components, responsibilities, interactions, and state information,
for whatever project you worked on in class 6 Feb.
- Homework 2, assigned 20 Feb, first draft due 27 Feb, final draft
due 6 March.
- Pick a group and a software project for the rest of the semester.
- Give me a schedule for the rest of the semester: what aspects of
your project will be done (and working) by what dates?
- Divide your project into pieces for individuals to work on.
(This may change later, but I want an initial decision on it.)
- Give me a list of all the major classes of objects and all the
software components (those two notions may be identical, or they may
differ somewhat) and their responsibilities, described precisely, with
- Decide what programming language to use (we have Tiny CLOS,
CLOS, C++, Java, and Objective C, with documentation for each.
I assume that by this point in your education you can pick up a
new computer language quickly.)
- Start writing.
- Homework 3, assigned 6 March, due 8 May (the last day of class).
- Your project, as chosen in homework 2. I expect you to show me
"what you've got so far" several times before the end of the semester,
so I can make suggestions and tell whether you're on schedule.
You are visitor number
to this page since Jan. 13, 1997.
Stephen Bloch / firstname.lastname@example.org