Good Textbooks for Object Oriented Programming?
Captain_Frisk asks: "My buddy and I have recently received approval to teach a programming course at our Alma Mater. We have pretty much free reign over what we teach, so we've elected to teach 'An Introduction to Object Oriented Programming,' to fill a void at a school where the only programming languages taught are C and Matlab. Can anyone out there recommend some good books for the course, not just for the students, but for us to read as preparation material? We've never taught a class before, and as graduates of this school, we've never had any formal training in OOP. I read a few books at work a few years back, but I don't remember their names, nor did they strike me as particularly memorable. So far I've looked at An Introduction to Object-Oriented Programming and Object-Oriented Software Construction, 2nd Edition (a book reviewed at Slashdot 3 years ago), but have not invested in either."
Best place to start is the comp.object FAQ. Don't underestimate the power of some of the better FAQ's out there - you can get a good grasp of basics and an excellent review of literature, all gratis.
One key point you neglected to state is the level of instruction you are participating in. Are you getting involved in high school programming or college? There are texts for both areas, and you might get a better reponse by telling us.
Secondly, if you are going to be doing high school instruction, you might want to consider broading your research. The AP test (for high school students to get college credit) will be in Java starting in '02 or '03 (I forget), so that might impact your decision, since you *might* be helping your students by getting them acclimated to Java and OOP from the start.
One book that I would really recommend is Design Patterns (to just about anyone doing program design, really). It's excellent. The Gang of Four (as the authors are usually refered to because nobody can ever remember all their names :P) did one or two other books on a simliar line ("More Design Patterns", I think?).
Since you didn't say what kind of language you're going to use, and you mention the only stuff there is C and Matlab, I'll throw out some languages suggestions as well:
It kind of depends on the experiences of the people you're teaching. If they already know C, C++, or Java, maybe doing the course in C++ or Java is the way to go. However, they may have too many preconcieved notions in those languages (like old C programmers moving to C++, and basically still writing C, ignoring the OO stuff when they can) to be effective object oriented programmers in those languages without some other experience.
So you may want to look into something like Python. I can't think of any other major OO scripting languages (Perl doesn't really count too much), and ML/O'Caml/Lisp/Scheme aren't really OO langauges in that sense.
Oh, maybe Smalltalk would work I don't know of any free implementations, hopefully there is in fact at least one good one. Objective-C is C plus Smalltalk-style OO and as it's built into GCC, it would be available for everyone, so that might be another option. Since it's much less complicated than C++ (I like C++ but even I think it's a huge language), it would be relatively easy to learn in short order.
The OO course came after a C++ course and a course on elementary data structures and algorithms. Chances are good that because your students know C, they probably have some familarity with the DS/A stuff.
The books I had to get for my OOP course was Intro to Software Design by Steve Reiss, the Gamma et al Design Patterns book pointed out by others, and a reference book on UML.
The software design book is a good intro for OOP. It teaches OO using C++ and also introduces UML. The later chapters aren't really necessary, IMHO. They go into designing GUIs, distributed systems, large systems, project management, and other things that are better left to a course on software engineering. If you do use Reiss's book, do what my prof did: ignore those chapters.
The book did say it could be used for students with no C++ experience, and assumes to previous experience with classes, inheritance, etc. IIRC, there were was a chapter introducing the syntax of a class and stuff like that. It recommends a C++ reference to supplement the book if the students have had no C++ previously. I recommend Bjarne Stroustrup (sp??) The C++ Programming Language, a 1000+ page reference and specification on the entire language and the STL.
The One Rule Of Chess You'll Ever Need: Don't play someone who carries a kit in their bookbag.
If you can find a copy of it, C+C++: Programming with Objects in C and C++ by Allen Holub. The book gives a solid overview of object orientation, as well as examples of how to implement object oriented programming in ostensibly non-object oriented languages (in this case, standard C). Once it has introduced the basic OO concepts, and how you might implement them in a non-OO language, it goes on to show you how C++ delivers the same language features with much less hassle. As with other books by Allen Holub, this one is written with clarity and humor: it is both informative and enjoyable to read.