I always like a good memory refresh on SOLID principles, I picked up this book just for that.

The book starts with an overall description on what does design mean, how is it conducted, what tools are used, it then digs deeper into the real process of design.

I got a little worried when I reached the “sequence diagram” section, I thought this was one of these books about how UML rocks (UML sucks btw), I had to try “sequence diagram” first hand to realise that it really is not that bad, by the time I finished “sequence diagram” part, I knew that it will be a keeper, and I knew that this book will be enjoyable.

The book teaches that object oriented applications are organised by the messages they pass, and not by the classes they have. Every design should start by defining the messages, these messages describe the communication between the future (identified) objects and classes.

It then describes how the design should be lead by message. once you identify a message, seek out who will be its natural receivers, always keeping in mind the SRP.
The identified messages are a proof that you there is an object that has this message in his public interface.

The book states that you don't send messages because you have objects, but you have objects because you need a responder for that message.

The next chapters are on how attach behaviour and data to an object using duck typing, classical inheritance, module inclusion and object composition.

I recommend this book for any software engineer that want to jog his memory on OOD. I suspect that I will be reading this again in the future.