"Object-oriented languages, Liskov said, tend to conflate the concrete representation of a type with the interface used to access it."<p>This is why I prefer C to C++.  An opaque data type in C has a clean separation of the interface from the implementation.  C++ classes tend to have both methods and implementation-dependent data specified in a single file.  Granted, one can write good or bad code in any language, but I've found C encourages good behavior in this regard more than C++.