schwartz@dinl.uucp (Michael Schwartz) (12/06/89)
Following some brief remarks is my current cut of a reasonable syllabus for C++/OOD coursework at the quasi-graduate level. Sorry it took so long to compile this, but the number of responses from the net was very low. I'm not sure what the reason is for this: a) No one knows what needs to be taught (an attendee of a popular c++/ood tutorial suggested this). b) Knowing is so valuable that everyone considers the information proprietary. c) The knowledge is so self-evident that no one wishes to enlighten a fool who doesn't see it. Also, no syllabi were provided from anywhere. This was fairly disturbing. In the way of background, I have held an employee seminar at my company which was filled with highly motivated people with a basic background in C, and a strong background in one of C, SmallTalk, Lisp/Flavors. The seminar was successful (I was learning the language at the same time), but not appropriate for other personnel who wished/needed to learn C++. As in this news group, many of the issues that were discussed deeply were fairly esoteric; discussions of idiomatic designs in C++, Smalltalk, and Lisp/Flavors filled up many a seminar session. In addition, at least 2 sessions were devoted to the philosophy of testing classes, abstract classes, and heavily interacting families of classes. It is intended that evaluation of both outside and inside courses may be done by comparing to this syllabus. The syllabus is not yet properly time-sequenced. The reading list from the seminar (15 weeks, 1.0-1.5 hours per session) is attached. While better and more comprehensive reading lists have appeared (& I hope will continue to appear) in this newsgroup, this is one that was used in a fixed-duration seminar. Thanks to Ralph Johnson, Mark Gooderum, Joseph Yip, Lawrence Mayka and others (phone & personal conversations) whose input helped a great deal. I welcome responses, critiques, and alternative suggestions. Could a course be less than this and still produce a valuable C++ programmer? Must the course have more than this to produce a valuable C++ programmer? =======SYLLABUS=================================== Title: Introduction to C++ and Object Oriented Programming Objective: Student should be able to independently design, code, and test general C++-based applications at the end of the course. Student should be able to design and critique the design of classes in support of a general C++-based application. Prerequisites: Good working knowledge of C. (say, 6 months experience). Several people suggested that without a working knowledge of C, much of the rationale behind C++ will make no sense to students. No one suggested this was not so. Another pet idea down the tubes. Length of course: 30-45 contact hours (Somewhere between 1 semester and 2 quarters) This amount of time should be enough to do several small projects, and one large one. 30-60 lab hours Textbook: Leaning toward: Lippman, C++ Primer for advanced students Eckel, Using C++ for less advanced students Both books have problems for teaching, and need to be supplemented with additional material. Eckel is more self-learning, but examples are not of the highest quality; also, concentrates on version 1.2 with mentions of version 2.0. Lippman is somewhat more reference oriented, so a course using this book will tend to skip around. I also believe that some motivational material concerning object oriented analysis/information model should be provided quite early in order to provide a reasonable chance for larger projects to succeed. In particular, Stroustrup, The C++ Programming Language is no longer adequate. Weiner & Pinson is also inadequate. There are sure to be other useful textbook choices. Topics: Review of C data structures/usage. Brief review of C control statements. ANSI C function prototypes linkage rules headers stdarg preprocessor changes Basics History of C++ Simple programs in C++ streams library function overloading type-safe linkage References and pointers Programming models (I can't say paradigm with a straight face anymore) Data processing model Data centered model Object oriented model Functional programming Objects Basics What is an object What is a method Design Methods Object-Oriented design method Other design methods (esp. Functional design) Implementation Representing classes and methods in C++ Constructors/Destructors How to be a client How to be a provider Design Issues Deriving new classes When to inherit, when to have member objects friend classes and functions (pragmatics?) Designing for Reuse/Abstract classes virtual functions public/private/protected Testing your classes Comparison of C++ with other OO languages (Smalltalk and CLOS were mentioned most often) First-class objects Pragmatics (come up as required above) Inheritance & Multiple inheritance in C++ Exceptions Linkage rules/name mangling Handling all those include files Using 'make' and 'rcs' Arcane compiler switches Debugging c++ Testing your program Incompatibilities between C++ and ANSI C Speculation Future of C++ Programming in the large with OOP (Scalability) Sample Projects: Small: Tool classes Booch's components (as in Software Components in Ada) Lists, Sets, Queues, Stacks, Trees, Graphs, Strings, Rings, Monitors. Banking classes Geometric object classes Text object classes Conway's 'Life' Large: Class browser Simulation of Banking application Text editor Picture editor Curses-based hypertext application Where X and a workstation per student are available, InterViews seems to be an excellent source of classes for use in sample problems. ========READING LIST OF FIRST SEMINAR===================== Evolution of C++: 1985-1987, Bjarne Stroustrup, appeared in 1987 USENIX C++ papers; since superceded by an excellent article, Evolution of C++: 1985-1989, in Computing Systems, Summer 1989. Tutorial: Object Oriented Computing, Volume 1: Concepts, Gerald E. Peterson Ed. Concentration on section 1 reprints. A Style for Writing C++ Classes, Peter A. Kirslis, appeared in 1987 Usenix C++ Papers. Object-Oriented Program Construction, Bertrand Meyer, Prentice Hall, Chapters 1-5, 10, 14, 17-21. (added late in the seminar). Object Oriented Programming, An Evolutionary Approach, Brad Cox, Addison-Wesley, Ch. 1-5. (motivational material) Object-Oriented Systems Analysis, Shlaer & Mellor, Yourdon Press. The C++ Programming Language, Bjarne Stroustrup, Addison-Wesley. Our primary reference. What is Object-Oriented Programming, Bjarne Stroustrup, appearing in 1987 Usenix C++ Papers. libg++ User's Guide, Doug Lea, part of libg++ distribution. Optional reading: Weiner and Pinson's introductory chapters (which are excellent motivational material). Smalltalk-80: The Language and Its Implementation, Goldberg and Robson, Addison-Wesley. -- ----------------------- schwartz@pogo.den.mmc.com "Expect everything ... mschwartz@mmc.com and the unexpected never happens." ncar!dinl!schwartz --the phantom tollbooth DISCLAIMER: The opinions expressesed are not necessarily those of my employer or myself.