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.