Object Oriented Programming Concepts
If you have to deal with software development projects (for example from customer side) but still struggle to understand object oriented concepts and why object oriented languages are so widely used, I would recommend reading material about Smalltalk programming language and then understand what object oriented design patterns are. This approach will help you to better understand how many software development companies create designs and implement their applications.
Smalltalk is one of the first object oriented languages and it is very simple to learn. Learning Smalltalk will not take too much time, but good understanding of Smalltalk concepts will greatly speed up learning more complex languages, such as Java or C++. I would suggest an old, but still concise and clear book about Smalltalk, called “Smalltalk, Objects and Design” by Chamond Liu. The book is very well written and clearly explains the following foundations of object oriented paradigm:
1. Objects, classes and inheritance.
2. Aggregation and why it is often more preferable to inheritance.
3. Abstract classes and why they are used.
4. Containers and classic data structures.
5. Foundations of design: Class-Responsibility-Collaborators (CRC) cards and interaction diagrams based on use cases coming from analysis and design activities of software development project cycle.
6. One of the first frameworks: Model-View-Controller (MVC). This framework is still widely used nowadays.
7. Polymorphism and dynamic binding.
8. Two kinds of inheritance: subclassing and subtyping.
9. Reification.
10. And design patterns, such as singleton, factory, visitor, etc.
I find this book very useful and helpful in summarizing key object oriented principles.
Another very important area of object oriented software development is reuse. Classes and objects are low level reuse vehicles and design patterns are higher level reuse vehicles. I would recommend a book from “Head First” series “Head First Design patterns”. Even though another book: “Design Patterns” by Erik Gamma is considered to be classic for design patterns I think that “Head First Design patterns” is better for quicker and easier understanding of the topic. It covers more than 10 design patterns and it also provides working examples written in Java.
I find both of the books to be a great introduction into the world of object oriented programming and design because they are clear, concise and focus on many important aspects of object oriented software development.