Make fine grained interfaces that are client specific.
“Clients should not be forced to depend upon interfaces that they do not use.” — Robert Martin, paper “The Interface Segregation Principle”
We can think of abstraction as the heart of object-oriented design. Abstraction allows us to hide the details of our implementation, and to display only the essential information to the client. This makes the client unaware of the implementation details.