In an effort to create extensible and easily maintainable computer programs the SOLID guidelines where introduced By Robert C Martin. This is the acronym of the following principles:
Single resposibility A class should have one responsibility
Open/closedEntities should be open for extension but close for modification
Liskov substitutionAn object should be replaceable with instances of their subtypes
Interface SegregationMany specific interfaces are better than a general one
Depedency InversionClasses and details should depend on abstractions