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.
|21.2.2014||Definitions||Architects and Architecture, Principal Decisions, Drift/Erosion, Prescriptive/Descriptive, Hoisting, Presumptive/Reference, Solution/Product, M-Architecture, T-Architecture|
|26-28.2.2014||Architectural Styles||Layered, Component-based, Service-oriented, Plugin, Pipe and Filter, Blackboard, Event-Driven, Publish/Subscribe, Client/Server, Peer to peer, Data-centric, Virtual Machine, Rule Based, Mobile Code, REST, Rails|
|5.3.2014||Software Components||Components, Reusability, Composition, Infrastructure vs. Application-Specific Components, Components and Distributed Deployment, Components vs. Objects, Components vs. Services|
|7.3.2014||Component Interfaces||Required and Provided Interfaces, Information Hiding, API Design Principles and Tradeoffs|
|12.3.2014||Component Interfaces - API Evolution||API Examples, API Evolution, Adapters and Wrappers|
|14.3.2014||Software Connectors||Connector vs. Components, Connector Roles and Cardinality, Connector Examples: RPC, Stream, Database, Disruptor, Message Bus, File Transfer, Linkage, Tuple Space, Web|
|21.3.2014||Software Modeling||Modeling: Abstraction and Problem Solving Tool, Model Quality: Ambiguity, Accuracy, Precision, Model-Driven-Architecture, Canonical Models: Domain, Design (Boundary/Internals) and Code|
|26.3.2014||Software Modeling (Part 2)||Examples of Domain and Design Models, Architectural Views, 4+1: Use Case Scenarios, Logical View, Process View, Development View and Physical View|
|26.3.2014||Architectural Patterns||Layered: State-Logic-Display, Model-View-Controller, Model-Presenter-View; Components: Interoperability, Directory, Dependency Injection; Events: Event Monitor, Observer, Publish/Subscribe, Messaging Bridge, Half-Synch/Half-Asynch; Composition: Scatter/Gather, Canary Call, Master/Slave, Load Balancing, Synchronous/Asynchronous Composition|
Submitted by cp on