How to make software more manageable?
Separation of concerns / divide and conquer:
- Divide system into smaller units to reduce complexity and improve independence
Abstraction:
- Hide and generalise details to reduce complexity
- Level of abstraction / hiding differs during the design
Encapsulation, modularity, and information hiding:
- Place information into a unit and hiding it to prevent unwanted access
- Design units/modules with all relevant data and only expose it via an interface
Coupling and cohesion
Information Hiding
Problems with divide and conquer