In Grady Booch's Object Oriented Design with Applications he is discussing the 4 major elements of the Object Model

  1. Abstraction
  2. Encapsulation
  3. Modularity
  4. Hierarchy


He defines an abstraction as

An abstraction denotes the essential characteristics of an object that distinguish it from all other kinds of objects and thus provide crisply defined conceptual boundaries, relative to the perspective of the viewer.


He then goes on to say about the relationship between abstraction and encapsulation

Abstraction and encapsulation are complementary concepts: abstraction focuses upon the outside view of an object and encapsulation - also known as information hiding - prevents clients from seeing its inside view, where the behavior of the abstraction is implemented.

Finally he quotes Liskov

for abstraction to work, implementation must be encapsulated.

To which he adds

In practice, this means that each class must have two parts: an interface and an implementation. The interface of a class captures only its outside view, encompassing our abstraction of the behavior common to all instances of the class. The implementation of a class comprises the representation of the abstraction as well as the mechanisms that achieve the desired behavior.

My thoughts

This seems like a very C-centric viewpoint. Which other languages besides the C dialects split their files into interface and implementations?

When describing the 4 major elements of the Object Model he says

By major, we mean that a model without any one of these elements is not object oriented.

Does that mean that languages such as javascript, php, and ruby which don't separate interface and implementation aren't capabale of a true object model?

Thanks for reading! Follow me on Twitter and/or G+ for more.

See something wrong or got something to add/change? Fork this git repo and send me a pull request

If you particularly enjoy my work, I appreciate donations given with


01 April 2013