There are four participants:
There are some following points:
Good designers do not solve every problem from scratch.They reuse solutions.
This principles enforces developers to develop software in such a way that the code remains open for extension But closed for modification. If we allow adding new modules and classes this will add scalability to our product, But if we allow modification in existing code then we may broke the existing functionality.
When you specify a particular operation, you commit to one way of satisfying a request. By avoiding hard-coded requests, you make it easier to change the way a request gets satisfied both at compile-time and at run-time.
Yes, Its a designing problem. Specifying a class name when you create an object commits you to a particular implementation instead of a particular interface. This commitment can complicate future changes in the class.
They rely on two major OO design principles which are below: