States that every class should have a single responsibility. There should never be more than one reason for a class to change.
States that software entities (Classes) should be open for extension but closed for modification.
States that objects in a program should be replaceable with instances of their subtypes without altering the correctness of the program.
States that many interface client-specific interfaces are better than one general purpose. In other words you should not implement methods that you don't use.