1. Open–Closed Principlehistorical

    Designing stable boundaries so common extensions require less modification to trusted core code.

  2. Liskov Substitution Principlehistorical

    Ensuring subtypes preserve the behavioral contract expected from the base abstraction.

  3. Dependency Inversion Principlehistorical

    Keeping high-level policy independent from volatile low-level implementation details.

  4. Single Responsibility Principlehistorical

    Grouping behavior around a coherent responsibility and a focused reason to change.

  5. Interface Segregation Principlehistorical

    Keeping contracts focused so clients depend only on capabilities they actually use.

  6. Law of Demeterhistorical

    Reducing knowledge of distant object structure and avoiding brittle navigation through internal collaborators.

  7. Composition over Inheritancehistorical

    Reusing behavior through composition/delegation when subtype inheritance would create unnecessary coupling.

  8. Object-Oriented Design Principleshistorical

    A practical view of SOLID and related principles for controlling coupling, responsibilities, and change.