C centric?
Intro
In Grady Booch's Object Oriented Design with Applications he is discussing the 4 major elements of the Object Model
- Abstraction
- Encapsulation
- Modularity
- Hierarchy
Abstraction
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.
Encapsulation
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 Gitcoin.co