the main topics that one should learn are:
* some tidbit of history on why oop
* fundamental object oriented concepts: inheritance, encapsulation, and interfaces
* network of objects and their restricted interactions
* modeling a domain using objects
* documenting objects and their interactions
* how are objects represented in memory
* SOLID principles
* solutions (design patterns) to common problems
* concurrent design and thread safety in oop designs
* tools in oop design (CRC cards, UML, etc.)
* actually making projects and laying out the code in an implementation language.
Here are some books I seem to like so far.
Holger Gast - How to Use Objects: Code and Concepts (https://www.amazon.com/gp/product/0321995546)
This book seems to be what I was looking for. It has an integrated practical approach using the Eclipse source code as examples for various object oriented concepts. I have cross-checked various sources and it seems like this book covers all relevant concepts including SOLID principles.
Bertrand Meyer - Object-Oriented Software Construction
This seems to be a great reference. However, I haven't looked too thoroughly into it. I found a nice quote though.
"Today, no one will call security if one of the cocktail guests
declares object-oriented tastes. This is the buzzword effect, which
has been dubbed mOOzak: the omnipresence, in the computer press, of
O-O this and O-O that, causing a general dilution of the concepts.
The words flow so continuously from the loudspeakers — object,
class, polymorphism... — as to seem familiar, but are the concepts
widely understood? Often not." (29.1)