Interface segregation principle
- There are several users of the OPS class
- User1 only uses op1
- User2 only uses op2
- User3 only uses op3
With java the users depend on the whole class even if they only use part of it. As a result, changing the source code of op2 will result in User1 needing to be recompiled and deployed.
We can fix this by segregating the operations into interfaces. We can keep all the operations in OPS (maybe they share code, rely on each other, or otherwise belong together), and add a layer of indirection in front of each user, so they don't depend on OPS directly.
ISP and language
Statically typed languages force imports to be declared, and compiled. In dynamically typed languages imports happen at runtime - don't require recompilation and redeployment. You could see ISP as a language issue, rather than architectural.
ISP and architecture
It's harmful in general to depend on more than you need, obvious when it requires recompilation - but also true at an architectural level.
e.g. A developer creates a system using a framework which depends on a particular database. Changes to the database could require a redeployment of the framework which could require a redeployment of the system. Failures could cascade transitively the same way.