Before we begin, the words we lean on repeatedly:
- ISP — Interface Segregation Principle: no client should be forced to depend on methods it does not use.
- Client — any code that depends on an interface. This includes the caller AND the implementer. Both are dragged into whatever the interface declares.
- Role interface — a small interface defined by what one kind of client needs, grouping only methods that are used together.
- Fat interface — one interface bundling capabilities that different clients use separately.
Several traps below refer to a small counting formula. We define it carefully here so no symbol appears unexplained.