Complex software systems require abstraction and analysis at an architectural level of abstraction. In this course we study, typical software system structures (architectural styles), techniques for designing and implementing these structures, models for characterizing and reasoning about architectures, and tools architectural modelling. Role of architecture in Software engineering; Enterprise Architectures, Zachman's Framework; Architectural Styles, Design Patterns; Architecture Description Languages; Product-line architectures; Component based development