A mnemonic acronym, representing 5 object-oriented principles.
A class should be responsible for a single part of the functionality.
Open to extension, closed to modification.
Also known as substitutability. You should be able to use a subclass in place of its parent class.
A class should not depend on methods that it does not need to implement.
Your classes and modules should depend on abstractions instead of concrete implementations.