H. Conrad Cunningham
21 January 2018
Copyright (C) 2018, H. Conrad Cunningham
Professor of Computer and Information Science
University of Mississippi
211 Weir Hall
P.O. Box 1848
University, MS 38677
(662) 915-5358
Acknowledgements: This material is based primarily on Chapter 1 of the textbook Software Architecture: Perspectives on an Emerging Discipline by Mary Shaw and David Garland (Prentice Hall, 1996).
I created these slides for the first offering of my Software Architecture special topics course in Spring 1998. Thanks to Wen Wen Xu for entering my handwritten slides as HTML so that I could prepare these notes more quickly.
I reformated the slides to use Pandoc Markdown in Spring 2018.
NOT COMPLETE!
Advisory: The HTML version of this document may require use of a browser that supports the display of MathML. A good choice as of January 2018 is a recent version of Firefox from Mozilla
Many definitions include a phrase similar to:
creating cost-effective solutions
to practical problems
by applying scientific knowledge
building things
in the service of mankind
routine | <====> | innovative |
---|---|---|
familiar problems | unfamiliar problems | |
reuse prior solutions | novel solutions | |
(handbooks, manuals) |
Problems in reuse:
identifying reusable entities
expressing them in useful form
making them accessible
adapting them to variants of problem
overcoming cultural tradition
educating designers/programmers in reuse
convincing management to invest in reuse
Examine Figure 1.2, Evolution of an Engineering Discipline.
Examine Figure 1.3, Codification Cycle for Science and Engineering.
Examine Figure 1.4, Evolution of Software Engineering.
Computer science has progressed by increasing the level of abstraction—moving to larger conceptual building blocks.
1950’s: machine language, symbolic assemblers, macro processors, simple compilers (e.g., early Fortran)
1960’s: data typing (Algol), modularity, user-defined types
1970’s: theory of abstract data types, early OOP ideas, module interconnection languages (MIL)
1980’s: class libraries
1990’s: OOP, CORBA, application frameworks, patterns
???
programming language abstraction (previous section)
algorithm analysis
automata/models
language theory
syntax
Involves description of:
elements from which systems are constructed
interactions among those elements
patterns that guide their composition
constraints on those patterns
Systems defined in terms of:
collection of components
interactions among those components (connectors)
clients and servers
databases
filters
layers in hierarchical system
etc.
procedure calls
shared variables
piped streams
client-server protocols
database transactions
event multicast
etc.
There are many levels of design, each with own concerns.
Each level consists of:
– involves composing modules to form systems
– involves composing primitive language features to form modules
– involves composing bit patterns to form language features
architectural description languages
codification of architectural expertise
architectural frameworks for specific domains
formal foundations
architecture design/analysis selection methods
support tools
architecture extraction, recovery, and reengineering (for legacy systems)
etc.