The objective of this course includes the definition and concepts of design and continues with the following topics; Fundamental design issues. Design principles (information hiding, cohesion, and coupling). Interactions between design and requirements. Design for quality attributes (e.g., reliability, usability maintainability, performance, testability, security, and fault tolerance). Design trade-offs. Design strategies including: function-oriented, object-oriented, data-structure centered and aspect-oriented design. Architectural design issues: styles, patterns, frameworks and attribute trade-offs will be covered. Hardware and systems engineering issues in software architecture; service-oriented architectures, network, mobile, and embedded system architectures. Detailed design and design patterns. Database design. Design notations (e.g., class and object diagrams, UML, state diagrams, and formal specification). Design attributes (e.g., coupling, cohesion, information hiding).