Fall, 1995. Instructor: David J. Eck. Monday, Wednesday, Friday, 2:40--3:50. Lansing 300.
Everything is "object-oriented" these days: Object-oriented programming, object-oriented databases, object-oriented operating systems, object-oriented documents, object-oriented software analysis and design,... What's behind all the hype?
One of the advantages of object orientation is that it organizes things in the virtual world similarly to the way they are organized in the real world: as discrete objects with definite individual identities and behaviors. Object-orientation is supposed to make the virtual world more concrete and therefore easier to design, easier to construct, and easier to modify. Whether it is the long-sought "silver bullet" is not clear, but when applied appropriately it does seem to confer many advantages.
In the case of programming, one of the major advantages is reuse. Much of the effort in a typical programming project turns out to be duplicated effort. Object-oriented programming permits the construction of software components that can be used and reused in many programs. More important, components can be adapted or specialized to particular projects without modifying the original code. This ability, known as inheritance, is the major distinguishing feature of object-oriented programming.
In this course, you will learn the basic ideas and techniques of object-oriented software development. All the programming you do will be in C++, but learning C++ should not in itself be your major goal in the course. The text I have chosen, An Introduction to Object Oriented Programming, by Timothy Budd, tries to teach to principles of object-oriented programming. It uses examples from several different languages, including C++, but it does not try to teach any of those languages in detail. I will supplement the text with additional information on C++, and students in the course will give presentations on some of its advanced aspects. As a general reference on C++, the book The C++ Programming Language, by Bjarne Stroustrup (the designer of the language) is on reserve at the library.
There will be two in-class tests, on Monday, October 2 and Wednesday, November 8. The object of the tests will be to test your basic understanding of the material, not your advanced programming skills. There will be no final exam.
Each student will write a term paper for the course on a topic related to C++, to object-oriented programming, or to object-orientation in general. Several of the paper topics will have to cover advanced aspects of C++ such as templates, exceptions, operator polymorphism, and multiple inheritence. Other possible topics are object-oriented databases, object-oriented operating systems, object-oriented application frameworks for Windows or Macintosh, the LambdaMOO programming language, Taligent technology, and object linking and embedding (OLE) in Windows.
Starting October 27 or 30, each student will make a class presentation on his or her project. Each presentation should take up between 1/3 and 1/2 of a class period.
You have the option of supplementing your paper/presentation with a small demonstration project, such as a computer program. If you do this, I would not expect your paper to be as long as it would be otherwise. You should negotiate the details with me.
I expect you to select a project early in the course and to begin work on it. The actual paper and project are not due in final form until the end of the term, but I expect you to consult frequently with me along the way, and I encourage you to turn in preliminary versions for comments and evaluation.
There will be occasional C++ programming assignments, most of them during the first half of the course. I will not accept programming assignments late, but you have the option of revising and improving them before the end of the term.
More important, there is a group programming project, which is: As a group (of anywhere from two students to the entire class), conceive, design, implement, test, and document a significant and useful C++ program. Documentation must include a journal of the discussion and work done at each stage. It should also include a manual for users of the program. Each student should be individually responsible for some part of the C++ code that has to be written for the project.
At the end of the term, each student will turn in a portfolio of work done for the course. This should include all your programming assignments, your paper and demo project, and a copy of the work that you individually contributed to the group programming project.
In addition, each programming group should turn in a portfolio for its group project, including the group journal, the program itself, and all documentation produced by the group.
Your portfolio is due in my office on Saturday, November 18, at 11:00 AM (during the officially scheduled final exam period for the course).
Each of the following will contribute 20% of your grade for this course (but see also the next item): (1) First Test; (2) Second Test; (3) Paper / presentations; (4) Group programming project; and (5) Other programming assignments.
I expect you to attend at least two departmental colloquia. I also expect you to be at almost all regular classes. I reserve the right to adjust your grade for the course if you violate these expectations.
My office is room 301 in Lansing Hall, just next door to our regular classroom. My office phone extension is 3398. I am on campus most days, and you are welcome to come in anytime you can find me there. I will announce regular office hours (when I promise to try my best to definitely be in my office) as soon as I schedule them.
My email address is ECK (or email@example.com from off-campus). Email is good way to communicate with me, since I usually answer messages the day I receive them.