Object-Oriented Programming and Design

  1. Principles of Object-Oriented Design
    1. SOLID Principles
      1. Single Responsibility Principle
        1. One Reason to Change
        2. Open Closed Principle
          1. Open for Extension Closed for Modification
          2. Liskov Substitution Principle
            1. Substitutability of Subtypes
            2. Interface Segregation Principle
              1. Client-Specific Interfaces
              2. Dependency Inversion Principle
                1. Depend on Abstractions Not Concretions
              3. GRASP Principles
                1. Information Expert
                  1. Assigning Responsibility to Class with Most Information
                  2. Creator
                    1. Assigning Object Creation Responsibility
                    2. Controller
                      1. Handling System Events
                      2. Low Coupling
                        1. Minimizing Dependencies
                        2. High Cohesion
                        3. Polymorphism Principle
                          1. Assigning Responsibility for Behavior with Variations
                          2. Pure Fabrication
                            1. Creating Classes for Design Purposes
                            2. Indirection
                              1. Decoupling Objects
                              2. Protected Variations
                                1. Shielding from Change
                              3. Other Design Principles
                                1. DRY Principle
                                  1. Don't Repeat Yourself
                                    1. Avoiding Code Duplication
                                    2. KISS Principle
                                      1. Keep It Simple Stupid
                                        1. Simplicity in Design
                                        2. YAGNI Principle
                                          1. You Ain't Gonna Need It
                                            1. Avoiding Unnecessary Features
                                            2. Law of Demeter
                                              1. Principle of Least Knowledge
                                                1. Limiting Object Interactions