/Software-Design-and-Architecture-Specialization--University-of-Alberta

This repository documents my journey through the Software Design and Architecture specialization offered by the University of Alberta. It includes coursework spanning Object-Oriented Design, Design Patterns, Software Architecture, and Service-Oriented Architecture.

Primary LanguageJava

Software Design and Architecture Specialization

About the Specialization: In the Software Design and Architecture Specialization, I mastered the application of design principles, patterns, and architectures to build reusable and flexible software applications and systems. I learned how to express and document software system designs visually, using Unified Modeling Language (UML).

SDA

Practical Learning: Engaging in practical examples allowed me to apply my knowledge, developing employable skills and expertise relevant to the software industry.

Applied Learning Project

Capstone Project: Java-based Android Application The culmination of this specialization involved a Java-based Android application. Progressing through the four courses, I evolved the app from a single-user local data storage to a multi-user app with remote data storage. Each course provided a Java codebase as a starting point, challenging me to document and implement new features based on course knowledge.

Tutorials were available to help me understand the starter codebase and grasp the basics of Android development.

Prerequisites

Basic Java programming knowledge was expected. The capstone application required the use of Android Studio, an integrated development environment. I explored tutorials for Windows or Mac to familiarize myself with Android Studio.


What I Learned:

  • Object-oriented analysis and design principles.
  • Creating modular, flexible, and reusable software.
  • Expressing designs in Unified Modeling Language (UML).
  • Applying Class Responsibility Collaborator (CRC) technique.
  • Designing an Android application with corresponding UML documentation.

Skills Gained:

  • Object-Oriented Design
  • Object-Oriented Analysis and Design
  • Unified Modeling Language (UML)

Course 2: Design Patterns

What I Learned:

  • Using design patterns for interactive applications.
  • Identifying and addressing user interface design issues.
  • Applying design principles (e.g., open-closed, dependency inversion).
  • Recognizing and refactoring anti-patterns.
  • Implementing the model-view-controller architectural pattern.

What I Learned:

  • Representation of software architectures using UML.
  • Common architectural styles, qualities, and tradeoffs.
  • Properties of layered and n-tier architectures.
  • Creating UML diagrams to express architectural structure.
  • Documenting a multi-application system with layered architecture.

What I Learned:

  • Architectures for web applications.
  • Basics of Service-Oriented Architecture (SOA).
  • Web Services (WS*) and Representational State Transfer (REST) architecture.
  • Microservices and REST design principles.
  • Connecting a Java-based Android application with Elasticsearch using REST.

Skills Gained:

  • Web Service
  • Microservices
  • Representational State Transfer (REST)
  • Service-Oriented Architecture

Embarking on this specialization enhanced my software design and architecture skills, contributing to my proficiency in creating robust and scalable software solutions.