tags:

views:

1551

answers:

21

I have been programming OO for a while. But now I feel I have reached a place where I need to understand principles and fundamentals of object oriented design and theory scientifically and deeply.

What resource, especially books can you suggest?

+11  A: 

Both of these are excellent:

Head First Design Patterns

Head First Object-Oriented Analysis and Design

Mitch Wheat
I agree, but think you posted the same link for both books.
Jim Anderson
Which one should I start reading first?
Ali
@Ali - Head First Object-Oriented Analysis and Design
Mitch Wheat
The Head First... books are supposed to be great but I could not stand the style. I'd buy one of them and see if you like the style first.
Garry Shutler
I'd suggest skimming one at a bookstore or library first and see if the style works for you as the books aren't for everyone.
JB King
+7  A: 

Design Patterns: Elements of Reusable Object-Oriented Software - GoF

Actually now that I think of it...I think fowler's refactoring also gave me a great appreciation for object oriented design.

Jason Punyon
That book may well be a classic but honestly it's one of the driest, dullest books I've ever (tried to) read.
cletus
Have to agree 100% with Cletus. Very difificult to learn from
Mitch Wheat
...despite being the definitive reference work on the subject. Great for people already experienced with OO design
Mitch Wheat
Yeah, I agree, it's pretty rough to get through for someone just trying to learn design patterns. I'd start with the Head First Design Patterns. Once you get through that, the GoF book will make much more sense.
Andy White
I dunno guys. I guess I just got it. I never had a problem with the book. I thought if imparted things well with it's examples. Maybe I should pick up head first and take a look. Thanks for the info.
Jason Punyon
Sorry for the typos. I'm on my iPhone.
Jason Punyon
+1 both of these, they're my #1 suggestions.
ChrisW
I agree with cletus. I have that book and i fall asleep while reading it.
Jack
+4  A: 

This isn't an entire book, but I've always liked the first chapter of Thinking in Java or Thinking in C++ by Bruce Eckel. It makes for a wonderful primer or introduction.

vinc456
+1  A: 

For the fundementals you really need to move beyond introductory books. And GoF really assumes an understanding of OO rather than digging into it.

Not looked at the (much newer) 3rd edition as I have the 2nd, but "Object Oriented Design with Applications" by Grady Booch et al was the standard.

Richard
+5  A: 

Object Thinking by David West

Jay Bazuzi
Right on. This book, while it does get a little preachy, strikes a good balance between the "what", the "why", and the "how" of object-oriented design.
Tim Lesher
+5  A: 

Domain Driven Design

Andrew Bullock
Heck yes! A great resource!
Rizwan Kassim
A: 

It might be a basic book but I really liked Object Oriented Thought Process by Matt Weisfeld. New edition has examples in C# and references to all other excellent books on OOP.

Gulzar
+2  A: 

I suggest you to consider this one: Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development.

This is the best book, about OOP, I ever read.

Rafael Romão
+1 Yeah! Just the introduction opened my eyes w.r.t. OO mindset when I read it!
Bill Karwin
A: 

If you want a better understanding of the concepts used in object-oriented languages, I can recommend The Interpretation of Object-Oriented Programming Languages by Iain Craig.

Just check out its table of contents.

Amazon

Google Books

eljenso
A: 

Another free online book is "Building Skills in OO Design," written by one of StackOverflow's top gurus, S. Lott.

Bill Karwin
+1  A: 

I like Designing Object-Oriented Software by Wirfs-Brock, Wilkerson and Wiener. It describes responsibility-driven design, which really clicked with me.

Amazon

TMN
+1  A: 

Smalltalk Best Practice Patterns is the best book I know on OO design. Definitely not for Smalltalkers only. (Besides, Simula-67 may have invented objects, but Smalltalk-80 really put them to work. Most later designs, with the honorable exceptions of Self and its friends, are just footnotes to Smalltalk. I include C++ and Ruby in that group, for example.)

Norman Ramsey
A: 

I like

  • Design Patterns Explained, Shalloway & Trott
  • Agile Principles, Patterns, and Practices in C#, Martin
George V. Reilly
A: 

I dont know about anyone else, but I would be wary of understanding Object Oriented Design Deeply.

It can even with the best of intentions lead to over engineered solutions :)

Toby Allen
I'd counter this with the observation that understanding OO design properly includes awareness of when to use it, and when not to use it. It's the fiend who only has a hammer who thinks everything is a nail.
Bevan
A: 
epatel
A: 

To understand pure object-orientation's goal of simulating the interaction of actors (objects), study SmallTalk and the Simula dialects.

Also check out non-mainstream implementations such as the Common Lisp Object System, including its Meta-Object Protocol.

It's also informative to read about modern languages that eschew many aspects of mainstream object-oriented programming, such as the JVM Lisp dialect Clojure (see also Object Oriented Programming section of the page on identity and state).

Steve Betten
Thanks for mentioning Common Lisp Object System. It reminded me of The Art of the Metaobject Protocol that is on my shelf for long now and never got to read it.
Ali
A: 
Koistya Navin
Why was this downmodded?
Rizwan Kassim
+1  A: 

Two books by Robert Martin are a great starting point:

  1. Clean Code
  2. Agile Principles, Patterns, and Practices

I'd also recommend

  • Designing Object-Oriented Software (Wirfs-Brock, et. al.)
Rob Scott
+2  A: 

If you understand the following 4 principals, you probably have a good handle of OO design:

  1. Encapsulation - The ability to take a problemspace and wrap it up into an object that can contain/maintain its own state and provide a public interface for usage.

  2. Abstraction - The ability to generalize about a set of related objects. For instance, a Truck and a Car are both types of Automobile.

  3. Reification - The ability to create concrete objects from abstractions (ie. the opposite of Abstraction). Think of sorting algorithms; the algorithms can be contained within objects (Bubblesort, Qsort, etc), and those objects can be interchanged within other objects that require sorting (e.g. A Spreadsheet could contain an abstract instance of a Sort object, which would be implemented by Bubblesort, Qsort, etc.).

  4. Substitution - The ability to substitute one similar object for another.

As for books, I second the recommendation of Design Patterns by the Gang of Four (Gamma, Helm, Johnson, Vlissides). This book defines idioms that have evolved through the use of object oriented programming. The examples used are written primarily in C++, with some Smalltalk and other languages, but the concepts are also provided graphically. When reading this book, I suggest using the patterns to help solve a problem. Don't use it as a "cookbook" to start designing your software. Also, it is a fairly old book, so you won't find newer patterns in there.

Alan S
A: 

I would suggest Martin Fowler's "UML Destilled" This books give you perspectives to think about the object oriented design.

David Gruzman
A: 

For deeply understanding OO Design, the bible is Betrand Meyer's Object Oriented Software Construction 2nd Edition. It's a big but brilliant book.

dalton