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
- Viewable on different levels
- Layered
- Decomposable (from top-level down)
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
- Use case view
- Logical view
- Concurrency view
- Component view
- Deployment view
Logical vs. Physical Architecture
A system's logical architecture is concerned with:
- Functionality
- Classes and their relationships
- States
- Object collaboration
- Timing Constraints
A system's physical architecture is concerned with:
- Which software modules / packages / components (physical
containers) are the classes defined in?
- Source code file dependencies
- On which computers / devices do the
components / programs / applications / objects /
processes / threads live?
- How are the computers and hardware devices connected
and how do they communicate?
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.