Introduction to OOP: Chapter 2: Responsibility Driven Design:
These ideas were captured by computer scientist David Parnas in a pair of
rules, which are known as Parnas' Principles:
The developer of a software component must provide the intended user with
all the information needed to make effective use of the services provided
by the component, and should provide no other information.
The implementor of a software component must be provided with all the
information necessary to carry out the given responsibilities assigned to
the component, and should be provided with no other information.
Intro OOP, Chapter 2, Slide 28