Looks Simple but is not — Two Basic concepts very hard to achieve and maintain

As developers, we learned the principles of abstraction, encapsulation, polymorphism, and evil inheritance when we met our first Object-oriented programming language.

We were also presented with Coupling and Cohesion as two basic design concepts, “high cohesion and low coupling” as they said. It seemed very simple at the beginning…