Software Design
Software design transforms requirements into a blueprint for construction. It defines the architecture, components, interfaces, and data structures of a system.
Design Principles
Good design follows principles: abstraction (hiding complexity), modularity (dividing into independent units), information hiding (encapsulating decisions), separation of concerns, and SOLID principles (Single Responsibility, Open-Closed, Liskov Substitution, Interface Segregation, Dependency Inversion).
Architectural Design
Software architecture defines the high-level structure. Common patterns: layered (presentation, business, data), client-server, microservices, pipe-and-filter, event-driven, and MVC (Model-View-Controller). Architecture choices affect performance, scalability, and maintainability.
Coupling and Cohesion
Coupling measures interdependence between modules — lower is better. Types from best to worst: data, stamp, control, external, common, content. Cohesion measures relatedness within a module — higher is better. Types from best to worst: functional, sequential, communicational, procedural, temporal, logical, coincidental.
Design Patterns
Design patterns are reusable solutions to common problems. Creational: Singleton, Factory, Builder. Structural: Adapter, Decorator, Facade. Behavioural: Observer, Strategy, Command. Patterns improve communication and code quality.
UML Diagrams
UML (Unified Modeling Language) provides standard notation. Structural: class diagrams, component diagrams, deployment diagrams. Behavioural: use case diagrams, sequence diagrams, activity diagrams, state diagrams. UML visualises design decisions.
User Interface Design
UI design follows principles of consistency, feedback, error prevention, and user control. Wireframes sketch layout; mockups add visual detail; prototypes add interaction. Usability testing validates the design with real users.
Summary
Software design bridges requirements and implementation. Mastering architectural patterns, design principles, coupling/cohesion analysis, design patterns, and UML enables building maintainable, scalable systems.