I’ve been reading What Every Programmer Should Know About Object-Oriented Design by Meilir Page-Jones. It’s been on my reading list for some time since I first saw it mentioned in a video of Jim Weirich’s presentation titled “Grand Unified Theory of Software Design” (about 15:30 in the below video).
UPDATE: I’ve heard that there are some audio problems in some parts of this video, so maybe check out a video of this same presentation at a different conference (about 18:40 is when the book is mentioned).
The book is mentioned mainly to introduce the term “connascence”, as a way to talk about coupling within code. I will write a post about connascence later, but right now I just wanted to give a quick overview of this book, as I haven’t finished it yet.
The book is broken into three main parts:
- Part I – Introduction: what does object-oriented mean, and why should it be used? This was a sort of review chapter for me, as it just covers the basics of encapsulation, inheritance, polymorphism, etc. I would recommend skimming this chapter, as it doesn’t really cover anything you haven’t covered in an intro to programming class.
- Part II – Object-Oriented Design Notation: This is a big chunk of the book (5 chapters) which details a visual notation to design and represent objects. This is not a notation that’s in wide use, at least not that I’m aware of, so you might consider completely skipping this part of the book, or at least skimming very fast.
- Part III – The Principles of Object-Oriented Design: This is the real meat of the book, as far as I’m concerned, and the part that I’m currently reading. This part introduces concepts of a well-designed object-oriented program, including encapsulation, connascense, cohesian, encumbrance, domains, polymorphism, and interfaces.