"""
Object-oriented design principles

Single Responsibility Principle ( S RP)-a class only does what it needs to do (class design should be highly cohesive)

Open and Close Principle ( O CP)-Software entities should be closed for expansion and modification
Dependency Inversion Principle (DIP)-for abstract programming (weakened in weakly typed languages)

Liskov Substitution Principle ( L SP)-Subclass objects can be replaced by subclass objects at any time

Interface Segregation Principle ( the I SP) - Interface designed to be small and not large and (Python has no notion of interface)
Principle of Synthetic Aggregation and Reuse (CARP)-prefer to use strong association rather than inheritance to reuse code

The principle of least knowledge (Dimit's Law, Lo D ) -Don't send messages to those who are not necessarily connected

Note : The bold letters above are called the object-oriented SOLID principle.
"""