Sign up ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

I'm looking to really grasp OO once and for all.

Any recommendations on a good Objected-Oriented book?

I program in .Net, so if it's .Net oriented all the better.


share|improve this question

closed as not constructive by Mark Trapp Nov 22 '11 at 17:28

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

See also the lots of similar threads on SO. –  Péter Török Feb 2 '11 at 8:28
Allen Holub's "Holub on Patterns" ( is a very interesting read: both addressing common pitfalls of "OOP-ish" (but not in fact OO) practices and providing a example/tutorial comprehensive enough to make the reader sure the author himself really knows the OOP trade (a full-fleged SQL interpreter ( –  mlvljr Feb 10 '11 at 0:57

12 Answers 12

up vote 2 down vote accepted

I don't think a single book will get you up to speed. Do do do, read other's people's code and discuss.

But to get you started I would recommend the following books in that order. In my mind the next step after OO thinking is patterns, if you know the basic you see them applied in the patterns and you can learn the trade off's, making you better in OO.

  1. Head First Object-Oriented Analysis and Design (Head First) [ILLUSTRATED] (Paperback)
  2. Applying UML and Patterns (Hardcover)
  3. Agile Principles, Patterns, and Practices in C# (Robert C. Martin Series) (Hardcover)

After that you are ready for the basic gang of four design patterns

  1. Head First Design Patterns (Head First) [ILLUSTRATED] (Paperback)
  2. The Design Pattern BIBLE
share|improve this answer
Thanks for your comments and links. Very handy I will look into those books. –  TeaDrinkingGeek Feb 2 '11 at 9:56
I always thought "The Art of Computer Programming" was the bible. Maybe TAOCP is the old testament and Design Patterns is the new testament then? –  nikie Feb 2 '11 at 10:55
:) okay small nuance it is the design pattern bible –  KeesDijk Feb 2 '11 at 11:00


Object Thinking from Microsoft Press.

This book is really well written and goes deep into real object orientation - how to break out of procedural thinking and structure your code as interacting objects.

share|improve this answer
A bit expensive compare to some of the other OO books recommended here. Is it worth the price? –  TeaDrinkingGeek Feb 2 '11 at 9:57
Absolutely! I'm probably luckier - as I'm in India and the Indian edition is really cheap (400 bucks - that's around $8) without compromising on the paper quality. That said, it's a really good book. –  talonx Feb 2 '11 at 12:05
Great book on pure OO theory. Translating the theory into practise using .NET is a challenge because the theory goes against the grain of useful .NET features such as data-binding. For less radical, more practical advice, I recommend 'Object Design: Roles, Responsibilities and Collaborations'. –  Ed James Feb 3 '11 at 11:06
The link seems to be down –  Mahmoud Hossam Feb 18 '11 at 2:10
Just tried the link - seems to be working now. –  Bevan Feb 20 '11 at 23:08

Object Oriented Software Construction, 2nd Edition, by Bertrand Meyer.

Book cover

Take a look at the table of contents of the book in Wikipedia.

Part A: The issues'

1 Software quality
2 Criteria of object orientation

Part B: The road to object orientation

3 Modularity
4 Approaches to reusability
5 Towards object technology
6 Abstract data types

Part C: Object-oriented techniques

7 The static structure: classes
8 The run-time structure: objects
9 Memory management
10 Genericity
11 Design by Contract: building
    reliable software
12 When the contract is broken:
    exception handling
13 Supporting mechanisms
14 Introduction to inheritance
15 Multiple inheritance
16 Inheritance techniques
17 Typing
18 Global objects and constants

Part D: Object-oriented methodology:
applying the method well

19 On methodology
20 Design pattern: multi-panel
    interactive systems
21 Inheritance case study: “undo”
    in an interactive system
22 How to find the classes
23 Principles of class design
24 Using inheritance well
25 Useful techniques
26 A sense of style
27 Object-oriented analysis
28 The software construction process
29 Teaching the method

Part E: Advanced topics

30 Concurrency, distribution, client-server
    and the Internet
31 Object persistence and databases
32 Some O-O techniques for graphical
    interactive applications

Part F: Applying the method in various
languages and environments

33 O-O programming and Ada
34 Emulating object technology in non-O-O environments
35 Simula to Java and beyond: major O-O
    languages and environments

Part G: Doing it right

36 An object-oriented environment
Epilogue, In Full Frankness Exposing the Language

Part H: Appendices

A Extracts from the Base library
B Genericity versus inheritance
C Principles, rules, precepts and definitions
D A glossary of object technology
E Bibliography
share|improve this answer

Object Design: Roles, Responsibilities, and Collaborators

Object Design: Roles, Responsibilities, and Collaborations is a complete, superbly detailed, if somewhat advanced, definition on what it takes to build an object-oriented system.

share|improve this answer

Object Oriented Thought Process by Matt Weisfeld.

An introduction to object-oriented concepts for developers looking to master modern application practices. Object-oriented programming (OOP) is the foundation of modern programming languages, including C++, Java, C#, and Visual Basic .NET. By designing with objects rather than treating the code and data as separate entities, OOP allows objects to fully utilize other objects' services as well as inherit their functionality. OOP promotes code portability and reuse, but requires a shift in thinking to be fully understood. Before jumping into the world of object-oriented programming languages, you must first master The Object-Oriented Thought Process. Written by a developer for developers who want to make the leap to object-oriented technologies as well as managers who simply want to understand what they are managing, The Object-Oriented Thought Process provides a solution-oriented approach to object-oriented programming. Readers will learn to understand object-oriented design with inheritance or composition, object aggregation and association, and the difference between interfaces and implementations. Readers will also become more efficient and better thinkers in terms of object-oriented development.

It explains the OOP concepts very well in a simple to understand language (good for novice, specially a non-native English speaker, like me).

share|improve this answer
Here is a link:… –  KeesDijk Feb 2 '11 at 8:38
Seconded. Good read. –  Kevin Feb 7 '11 at 18:37
would you mind explaining more on what it does and why do you recommend it as answering the question asked? –  gnat May 29 '13 at 11:04
@gnat: It explains the OOP concepts very well in a simple to understand language (good for novice, specially a non-native English speaker, like me). –  Mudassir May 29 '13 at 14:10

I highly recommend Head First Design Patterns.

It's a very illustrative and simple to digest explanation of the most common design patterns. It's teaching style is easier to consume than other highly text/academic way of teaching the patterns.

share|improve this answer
i like this book as well –  maz3tt Feb 2 '11 at 10:05
would you mind explaining more on what it does and why do you recommend it as answering the question asked? "Link-only answers" are not quite welcome at Stack Exchange –  gnat May 29 '13 at 11:03

If you already have a good grasp of OOP principles from C++, then really all you need is a Java reference manual that has examples. I would recommend the Core Java books by Horstmann and Cornell (at least Vol. 1, and maybe Vol. 2 as well if you are interested in the topics in it).

If you learned C++ only as an afterthought to learning C, then you maybe are missing the OOP concepts and big picture. You'll need to have a pretty good understanding of OOP to really grok Java programming, since Java was designed as a OOP language only, while C++ can be used for a structured programming style in addition to its OOP features. (As a university computer programming instructor, I have run into many people who say they know C++ very well, but their programs were always written in a structured programming style, starting topdown with main() and breaking down into subfunctions, and maybe grouping some of the subfunctions as static functions in a "class", but they couldn't really do OOP - starting with the classes needed first and writing main() last, writing proper constructors/destructors/copy constructors, information hiding, recognizing when inheritance and virtualization would help them reuse code and/or make their program more flexible, etc.) If that's the case, then I would recommend starting with a book more like an "introduction to programming using Java" book that emphasizes objects. Head First Java, part of the O'Reilly series, is a good short fun book. Cay Horstmann has a series of Java textbooks that are also pretty good, introducing creating classes and objects in a very early chapter and using them throughout.

If you want the true master-level view of Java, then I would recommend Bruce Eckel's Thinking In Java. He really delves into the what and the why of why Java is the way Java is. Sources: Amazon

share|improve this answer
I come from a VB background, haven't touch C++. –  TeaDrinkingGeek Feb 2 '11 at 9:57

Applying UML Patterns (link)

Martin fowler, a well respected programmer, says this about this book: "People often ask me which is the best book to introduce them to the world of OO design. Ever since I came across it, Applying UML and Patterns has been my unreserved choice."

I have the book, but haven't read it yet.

If you really feel like you want to start at the beginning, you may want to read this:

Object Oriented Thought Process (link)

I've read it, and it's a great introduction to OO concepts.

edit: apparently I need more reputation to post images :(

share|improve this answer

I found Timothy Budd's "An Introduction to Object-Oriented Programming" to be a good introduction to OO. In particular, Budd compares several different OO languages, including C++, Delphi, CLOS, Smalltalk, Objective-C, Java.

share|improve this answer

If you want a book that (IMHO) uses on the ideas presented in Object Design: Roles, Responsibilities and Collaborations and applies them to the real world object-orientated development in a modern, cutting edge manner then I highly recommend Growing Object-Oriented Software, Guided by Tests. It's Java but I found it easy to follow (I'm .net too).

share|improve this answer

I find Object-Oriented Programming with Visual Basic .NET, may be help to you. And, Head First Object-Oriented Analysis and Design is based on Java, but helps to get the OOP degign concept.

share|improve this answer
would you mind explaining more on what these resources do and why do you recommend these as answering the question asked? "Link-only answers" are not quite welcome at Stack Exchange –  gnat May 29 '13 at 11:04

Object Thinking by David West has already been mentioned. In addition, I would suggest the Wyrfs-Brock books. (None of these are .NET specific, though)

share|improve this answer
Why the downvote? Have you even read it? –  talonx May 29 '13 at 12:01

Not the answer you're looking for? Browse other questions tagged or ask your own question.