ASD-Notes

My notes on Advanced-Software-Development

View the Project on GitHub angus-mackenzie/ASD-Notes

UML & Architecture

Thing Big, Act Small, Fail Fast, Learn Rapidly

- Booch, Rumbaugh and Jacobson, The UML User Guide, 1999

The software architecture of a program or computing system is the structure or structures of the system which comprise software components, the externally visible properties of those components, and the relationships among them. Architecture is concerned with the public of interfaces; private details of elements - details having to do solely with internal implementation - are not architectural.

By externally visible properties, we are referring to those assumptions other components can make of a component, such as its provided services, performance characteristics, fault handling, shared resource usage, and so on. The intent of this definition is that a software architecture must abstract away some information from the system ( otherwise there is no point looking at the architecture, we are simply viewing the entire system) and yet provide enough information to be a basic analysis, decision making and hence - risk reduction.

- Bass, Clements, and Kazman. Software Architecture in Practice, 2003.

Architecture Description

International Standard: ISO/IEC/IEEE 42010:2011 - or as I like to say ISO/IEC/IEEE42010:2011.

Architecture

Core of Architecture Description

Architeecture 2

ISO/IEC/IEEE 42010 Definition: Architecture

The fundamental concepts or properties of a system in its environment embodied in its elements, relationships, and in the principles of its design and evolution.

4+1

Logical View (Module View)

Communication Diagram

Development View (Allocation View)

Development View

Process View (Component-and-Connector View)

Process View

Physical View (Deployment View)

Deployment View

UML Packages

UML Packages

Logical Architecture

package diagram

Layers Shown with UML package diagram

Package Layers

Various UML notations for package nesting

Other Notation

We generally use the first notation

Package Dependencies

Package Dependencies

Ordering Work

Lollipop notation

Where DrawingContext is as follows:

Drawing Context

Interface vs Type

If you want a professional home entertainment system. You get a nice speaker system. If the speaker system breaks, you can simply unplug the broken one and plug in the working one -> because home entertainment systems have a standard interface.

Components

Design Level Perspective

  • A component represents a modular part of a system that encapsulates its contents and whose manifestation is replaceable within its environment
    • Defines its behaviour in terms of provided and required interfaces
    • Servers as a type defined by these provided and required interfaces
    • Can be composed of multiple classes, or components
  • Intent of using components is to emphasize
    • That the interfaces are important, and
    • It is modular, self-contained and replaceable
      • It is a relatively stand-alone module
  • Components does not represent concrete software
    • Can map to concrete artefacts such as a set of files

      UML example

  • At a large-grained level, a SQL database engine can be modelled as a component Any database that understands the same version of SQL and supports the same transaction semantics can be substituted
  • At a finer grained level, any solution that implements the standard Java Message Service API can be used or replaced in a system

DB UML

Architecture Description

Architecture Diagram