About this course: Welcome to our course on Software Architecture, provided in partnership by the University of Alberta, and Coursera! This is the third course in a specialization called Software Design & Architecture. If you were with us for the first two courses, you’ve put in a lot of hard work to get here. We are so happy to have you back!. If you are just joining us, welcome! We have two courses before this one, called “Object-Oriented Design” and “Design Patterns”. These are foundational to Software Architecture, but you can take this course as a stand-alone one if it suits you and your goals! In this course we will talk about software architecture. Architecture is the high-level form of the software design, so we are no longer talking about objects and classes, but components. Components are software units - subroutines, classes, functions, etc. - that are grouped on the basis of separation of concerns. The way that these components are arranged, and the interactions between them, are called the architecture. We will discuss the ways these architectures are represented, both in UML and other visual tools, and introduce the most common architectures, their qualities, and tradeoffs. In the last module, we will talk about how architectures are evaluated; what makes a good architecture? how can it be made better? We'll also talk about how the architecture touches on the process of software development. All the while you'll be practicing these architectures yourself and gaining hands-on experience. We have estimated that you will need about 4 hours per week to get the most out of this course, so it is hard work, but worth the effort. Good luck! Upon completion of this course, a learner will be able to… • Compare and contrast the components, connections, protocols, topologies, constraints, tradeoffs, and variations of different types of architectural styles used in the design of applications and systems (e.g., main program and subroutine, object-oriented, interpreters, pipes and filters, database centric, event-based). • Describe the properties of layered and n-tier architectures. • Create UML ipackage, component, and deployment diagrams to express the architectural structure of a system. • Explain the behaviour of a system using UML activity diagrams. • Document a multi-application system with a layered architecture.