You Must Know these Software Design Principles:

You Must Know these Software Design Principles:

/ 1) Open-Closed Principle (OCP): Software entities (classes, modules, functions) should be open for extension but closed for modification.

2) Single Responsibility Principle (SRP): A class should have only one reason to change. It should have only one responsibility.

3) Liskov Substitution Principle (LSP): Subtypes must be substitutable for their base types without altering the correctness of the program.

4) Dependency Inversion Principle (DIP): High-level modules should not depend on low-level modules. Both should depend on abstractions.

5) Composition Over Inheritance: Favor composition (using objects of other classes) over inheritance (extending a base class). It promotes flexibility and reduces tight coupling.

6) Law of Demeter (LoD): A module should not know about the internal workings of the objects it interacts with. It promotes loose coupling.

7) Keep It Simple, Stupid (KISS): Simplicity should be at key goal in design. Keep things as simple as possible but not simpler.

8) Interface Segregation Principle (ISP): Clients should not be forced to depend on interfaces they do not use.

9) YAGNI (You Aren't Gonna Need It): Avoid over-engineering things. Focus on what's essential.

10) Don't Repeat Yourself (DRY): Avoid duplicating code. Reuse code through abstraction, inheritance, or composition.

11) Separation of Concerns (SoC): Divide the software into distinct sections, each addressing a separate concern or aspect of functionality.