Software Architecture

Everyone uses the term software architecture but there does not seem to be any widespread agreement as to what this term means. Let's see what it's about.

Brief Definition

Software architecture refers to the organizational structure of a system.

Architecture Requirements

A software architecture should be

Good architectures allow for changes and additions to only affect one small, isolated part of the system. They have clear separation of concerns, clean interfaces, and support reuse. They are plug-in based, or component based, making them easily extensible.

Architectural Views

The five views

Logical vs. Physical Architecture

A system's logical architecture is concerned with:

A system's physical architecture is concerned with:

Hardware

Hardware elements participating in a system-level architecture include:

Processor
Can be a computer like a PC, workstation, supercomputer
Device
Can be a printer, router, card reader, scanner, appliance
Connection
What is between processors and a devices; consists of both a physical medium (such as optical cable, 10-base-T) and a protocol (such as TCP/IP)

Software

Software elements participating in a system-level architecture include:

Component
A reusable part that provides the physical packaging of classes and objects and other entities
Process
An instance of a running program. A process owns its own memory space protected from other processes, and O.S. resources such as files.
Thread
Flow of control; lightweight; a process contains one or more threads.
Passive Object
An object that does not have its own flow of control; it "runs" when sent a message (that is, one of its methods runs on some thread). Allocated to a process, thread or component.