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 OOP course at my school (which is geared towards students that already have a Java background) uses the following books:
"Fundamentals of Object-Oriented Design in UML" by Melier Page-Jones. This is book that covers software design using UML.
"Object-Oriented Software Design & Construction with Java" by Dennis Kafura. The title pretty much summarizes the book.
UML is a good tool for teaching OOP, in my opinion. It helps to illustrate concepts that can be difficult to understand trough code alone. Dynamic Binding is a good example of this.
I currently TA for our intro to comp. sci course (which uses Java). A lot of students get hung up on the difference between between an instance variable and class attribute/behavior(i.e. non-static vs. static members and methods). If they already have a background in C, concepts such as conditionals and looping won't be a big deal. Concepts such as "actions are being performed on an object" may.
It's really benificial to explain extending as "is a special type of" and composition as "has a". Anyways... I'm babbling... but those are both pretty good books. Email me if you're interested in other issues.
-Andy
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.
I also know that they are working on a Java version of the book, that should be out Real Soon.
Please note that the link I've given is to a Canadian bookseller, so it's aboot 30 bucks less for you yanks... :)
mah na mah na.
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.
Check it out. For an ideology that worships power and seeks the destruction of the "weak" and "inferior" they sure seem like a tiny bunch of pathetic cry-babies.
Never mind black vs. white, these guys are the sorriest excuse for white people. Why is it that only the stupidest, weakest, most fucked-up white people ever join these tiny "white supremicist" cults?
A book containing data structures may be good. It can actually show them the applications of OOP. A book that I use the cover an incredible about of material is An Introduction to Data Structures by Nyhoff. Very complete book, but way to much stuff to ever cover in one semester.
Talk to the department secretary and find out who the local salesperson is for the publishers of the texts you are looking at. OR just go to their website and surf to find the right salesperson.
The book publishers are more than happy to send out a copy here or there to someone who is looking to choose a text for a college course. Think about it - it costs them $30 to give away a $60 book. IF it is chosen for the text then they sell 20-50 copies. If the profit for the publisher is only $10 per book that still leaves them a lot left over.
My experience - I started teaching a class almost a year ago. It is my first teaching experience. Since then I have received 1 book that I specifically asked for and about 5 or 6 that just appeared in the mail for me. I know of some other professors who have asked for and received whole boxes of books.
The sales guys did call the department secretary to verify that I was actually teaching the course I said I was, and since the saleman is local he knew the school and the departments, etc. So if you want to scam the publishers to try and get some textbooks for free you'll have to work at it a little bit.
Of course, the cover will possibly be stamped "Review Copy - Not for Resale" which means you can't unload the extra copies for suplemental income. Which at the rate college profs get paid could be handy <-grin->
And you can't spell, that's for damn sure.
Design Patterns Explained: A New Perspective on Object-Oriented Design by Alan Shalloway, James R. Trott This book is excellent. It talks about the use design patterns as a key OO technique in a very easy-to-read manner. The book also explains the differences in meanings of terms used in Gamma et al's "Design Patterns" and Martin Fowler's "UML Distilled" ("Design Patterns" was written before UML was developed). And while "Design Patterns" says things in a prescriptive manner: "favour composition over inheritance" this book gives examples as to why over-use of inheritance is bad. The concept of design patterns introduce a "new" way of thinking about OO design and programming. Older books and techniques tended to promote inheritance.
Using C or C++ will let procedural programming thinking creep in. Using Java will frustrate people when, as they starting thinking in objects, find they can't call, say myInteger.abs() but instead have to start using procedural library calls like Math.abs(myInteger).
Java is the blue pill
Choose the red pill
There's a great free text on C++ online, with a decent intro to OOP. I was able to understand Stroustrup much better after going through this.
For generic OOD, I really liked Booch's Object-Oriented Analysis and Design with Applications (ISBN 0805353402).
This is a tautology.
I've taken a design course here which teaches fundamentals in psuedo code. We covered both structured programming and OOP. While this book is *very* English like, it does a good job of scratching the surface.
I think you'll find it's easier to teach OOP if the students understand structured programming first.
"All I ever wanted was to see Larry Wall give Bill Gates a Perl necklace."
http://www.eisenschmidt.org/jweisen