What is wanted here is something like the following substitution property:

If for each object of type there is an object of type such that for all programs defined in terms of , the behavior of is unchanged when is substituted for then is a subtype of

The problem is highlighted in the figure below.

User1 will depend on op2 and op3, even though it doesn’t call them.

The fix is to segregate the interface into smaller, focused interfaces so each client only depends on what it actually uses.

See also