I want to learn Object-oriented programming.
When I was in college I had learnt few concepts, but now I don't remember most of the things.
Also, presently my work doesn't demand to learn object-oriented concepts or OOP.
Any suggestions on:
how/where to start?
which book to refer?
A program can be modelled as a set of communicating black-box objects, with their own state.
The idea is to separate concerns, abstracting away implementation behind well-defined interfaces, which can in turn be implemented by other objects to cleanly replace parts of the application.
The rest of OO is pretty much just understanding Design Patterns (a set of names for common interactions between objects, and methods for setting these interactions up), grokking inheritance, and the difference between inheritance and composition, and grasping how to design a good OO system (how thickly to layer your classes, how much abstraction and what sorts, etc.)
The best languages for learning OO are Ruby and Smalltalk.