This class teaches the students to structure complex software systems using components and to keep track of the rationale behind their design. Architecture is not only necessary as the global blueprint to guide the design and manage the complexity of large software systems, but should also be seen as the focus of the main design decisions influencing the properties (modularity, maintainability, extensibility, portability, interoperability, reuse, performance) of the resulting system.
Introduction and Motivation: Why Software Architecture?; System Decomposition vs. Software Composition; Design Principles: Simplicity, Abstraction, Separation of Concerns, Encapsulation, Information Hiding; Patterns and Anti- Patterns: Avoiding Common Design Mistakes; Component Models and Composition Techniques; Architectural Views: Logical, Physical, Process, Development; Architectural Styles: Monolithic, Layered, Client/Server, REST, Serviceoriented, Peer-to-Peer, Event-driven, Data-centric, Pipes/Filters, Space based, Plugin; Architectural Description Languages; Architectural Decision Modeling; API Design Techniques.
Two lectures per week. Attendance is mandatory.
R. N. Taylor, N. Medvidovic, E. M. Dashofy, Software Architecture: Foundations, Theory, and Practice, Wiley, January 2009.
G. Fairbanks, Just Enough Software Architecture: A Risk-Driven Approach, Marshall & Brainerd, August 2010.
Submitted by pautasso on