\PassOptionsToPackage{unicode=true}{hyperref} % options for packages loaded elsewhere
\PassOptionsToPackage{hyphens}{url}
%
\documentclass[]{article}
\usepackage{lmodern}
\usepackage{amssymb,amsmath}
\usepackage{ifxetex,ifluatex}
\usepackage{fixltx2e} % provides \textsubscript
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
  \usepackage[T1]{fontenc}
  \usepackage[utf8]{inputenc}
  \usepackage{textcomp} % provides euro and other symbols
\else % if luatex or xelatex
  \usepackage{unicode-math}
  \defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase}
\fi
% use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
% use microtype if available
\IfFileExists{microtype.sty}{%
\usepackage[]{microtype}
\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
}{}
\IfFileExists{parskip.sty}{%
\usepackage{parskip}
}{% else
\setlength{\parindent}{0pt}
\setlength{\parskip}{6pt plus 2pt minus 1pt}
}
\usepackage{hyperref}
\hypersetup{
            pdftitle={CSci 658-01: Software Language Engineering ~ Introduction to Sofware Architecture},
            pdfauthor={H. Conrad Cunningham},
            pdfborder={0 0 0},
            breaklinks=true}
\urlstyle{same}  % don't use monospace font for urls
\usepackage{longtable,booktabs}
% Fix footnotes in tables (requires footnote package)
\IfFileExists{footnote.sty}{\usepackage{footnote}\makesavenoteenv{longtable}}{}
\setlength{\emergencystretch}{3em}  % prevent overfull lines
\providecommand{\tightlist}{%
  \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
\setcounter{secnumdepth}{0}
% Redefines (sub)paragraphs to behave more like sections
\ifx\paragraph\undefined\else
\let\oldparagraph\paragraph
\renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}}
\fi
\ifx\subparagraph\undefined\else
\let\oldsubparagraph\subparagraph
\renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}}
\fi

% set default figure placement to htbp
\makeatletter
\def\fps@figure{htbp}
\makeatother

\usepackage{caption}
\DeclareCaptionLabelFormat{nolabel}{}
\captionsetup{labelformat=nolabel}

\title{CSci 658-01: Software Language Engineering\\
\hspace*{0.333em} Introduction to Sofware Architecture}
\author{\textbf{H. Conrad Cunningham}}
\date{\textbf{12 January 2018}}

\begin{document}
\maketitle

{
\setcounter{tocdepth}{4}
\tableofcontents
}
Copyright (C) 2018, \href{http://www.cs.olemiss.edu}{H. Conrad
Cunningham}

Professor of \href{https://www.cs.olemiss.edu/}{Computer and Information
Science}\\
\href{http://olemiss.edu/audience/students.html}{University of
Mississippi}\\
211 Weir Hall\\
P.O. Box 1848\\
University, MS 38677\\
(662) 915-5358

\textbf{Acknowledgements}: This material is based primarily on Chapter 1
of the textbook \emph{Software Architecture: Perspectives on an Emerging
Discipline} by Mary Shaw and David Garland (Prentice Hall, 1996).

I created these slides for the firstoffering 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.

\textbf{Advisory}: The HTML version of this document may require use of
a browser that supports the display of MathML. A good choice as of
November 2017 is a recent version of Firefox from Mozilla

\hypertarget{what-is-engineering}{%
\subsection{What is Engineering?}\label{what-is-engineering}}

Many definitions include a phrase similar to:

\begin{itemize}
\item
  creating cost-effective solutions
\item
  to practical problems
\item
  by applying scientific knowledge
\item
  building things
\item
  in the service of mankind
\end{itemize}

\begin{description}
\tightlist
\item[Key approach:]
codify scientific knowledge about a problem domain in a form directly
useful to practitioners (and hence extend the capability of the ordinary
design talent)
\item[Question:]
Is software development an engineering discipline?
\end{description}

\hypertarget{engineering-design}{%
\subsection{Engineering Design}\label{engineering-design}}

\begin{longtable}[]{@{}lll@{}}
\toprule
routine & \textless{}====\textgreater{} & innovative\tabularnewline
\midrule
\endhead
familiar problems & & unfamiliar problems\tabularnewline
reuse prior solutions & & novel solutions\tabularnewline
(handbooks, manuals) & &\tabularnewline
\bottomrule
\end{longtable}

\begin{description}
\tightlist
\item[Question:]
What is the situation with software design?
\end{description}

\hypertarget{software-reuse}{%
\subsection{Software Reuse}\label{software-reuse}}

\begin{longtable}[]{@{}ccc@{}}
\caption{\textbf{Reuse of software}}\tabularnewline
\toprule
\endhead
code & \textless{}===\textgreater{} & design\tabularnewline
\bottomrule
\end{longtable}

Problems in reuse:

\begin{itemize}
\tightlist
\item
  identifying reusable entities
\item
  expressing them in useful form
\item
  making them accessible
\item
  adapting them to variants of the problem
\item
  overcoming cultural tradition
\item
  educating designers/programmers in reuse
\item
  convincing management to invest in reuse
\end{itemize}

\hypertarget{figures-from-shaw-garlan-textbook}{%
\subsection{Figures from Shaw-Garlan
Textbook}\label{figures-from-shaw-garlan-textbook}}

Examine Figure 1.2, \emph{Evolution of an Engineering Discipline}.

Examine Figure 1.3, \emph{Codification Cycle for Science and
Engineering}.

Examine Figure 1.4, \emph{Evolution of Software Engineering}.

\hypertarget{codification-through-abstraction}{%
\subsection{Codification through
Abstraction}\label{codification-through-abstraction}}

\begin{description}
\tightlist
\item[Abstraction:]
emphasizing the essentials, ignoring the details
\end{description}

Computer science has progressed by increasing the level of
abstraction-\/-\/-moving to larger conceptual building blocks.

(The following dates are approximate.)

\begin{longtable}[]{@{}llll@{}}
\toprule
\endhead
& \textbf{1950's} & machine language\textbackslash{} &\tabularnewline
& & symbolic assemblers\textbackslash{} &\tabularnewline
& & macro processors\textbackslash{} &\tabularnewline
& & simple compilers (e.g., early Fortran)\textbackslash{}
&\tabularnewline
\bottomrule
\end{longtable}

\begin{longtable}[]{@{}llll@{}}
\toprule
\endhead
& \textbf{1960's} & data typing (Algol)\textbackslash{} &\tabularnewline
& & modularity\textbackslash{} &\tabularnewline
& & user-defined types\textbackslash{} &\tabularnewline
\bottomrule
\end{longtable}

\begin{longtable}[]{@{}llll@{}}
\toprule
\endhead
& \textbf{1970's} & theory of abstract data types\textbackslash{}
&\tabularnewline
& & early OOP ideas\textbackslash{} &\tabularnewline
& & module interconnection languages (MIL)\textbackslash{}
&\tabularnewline
\bottomrule
\end{longtable}

\begin{longtable}[]{@{}llll@{}}
\toprule
\endhead
& \textbf{1980's} & \textbf{. . .}\textbackslash{} &\tabularnewline
& & class libraries\textbackslash{} &\tabularnewline
\bottomrule
\end{longtable}

\begin{longtable}[]{@{}llll@{}}
\toprule
\endhead
& **1990\textbackslash{} & CORBA\textbackslash{} &\tabularnewline
& ** & application framework\textbackslash{} &\tabularnewline
& & patterns\textbackslash{} &\tabularnewline
& & \textbf{. . .}\textbackslash{} &\tabularnewline
\bottomrule
\end{longtable}

\hypertarget{aspects-of-the-emerging-science}{%
\subsection{Aspects of the Emerging
Science}\label{aspects-of-the-emerging-science}}

\begin{itemize}
\item
  programming language abstraction (previous section)
\item
  algorithm analysis
\item
  automata/models
\item
  language theory
\item
  syntax
\end{itemize}

\hypertarget{what-is-software-architecture}{%
\subsection{What is Software
Architecture?}\label{what-is-software-architecture}}

It involves description of:

\begin{itemize}
\tightlist
\item
  elements from which systems are constructed
\item
  interactions among those elements
\item
  patterns that guide their composition
\item
  constraints on those patterns
\end{itemize}

Systems are defined in terms of:

\begin{itemize}
\tightlist
\item
  collection of components
\item
  interactions among those components (connectors)
\end{itemize}

Example components:

\begin{itemize}
\tightlist
\item
  clients and servers
\item
  databases
\item
  filters
\item
  layers in hierarchical system
\item
  etc.
\end{itemize}

Example interactions:

\begin{itemize}
\tightlist
\item
  procedure calls
\item
  shared variables
\item
  piped streams
\item
  client-server protocols
\item
  database transactions
\item
  event multicast
\item
  etc.
\end{itemize}

\begin{center}\rule{0.5\linewidth}{\linethickness}\end{center}

\hypertarget{system-design}{%
\subsubsection{System Design}\label{system-design}}

There are many levels of design, each with own concerns.

Each level consists of:

\begin{itemize}
\tightlist
\item
  components (vocabulary)
\item
  rules of composition (syntax)
\item
  rules of behavior (semantics)
\end{itemize}

\begin{center}\rule{0.5\linewidth}{\linethickness}\end{center}

\hypertarget{software-design}{%
\subsubsection{Software Design}\label{software-design}}

\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\item
  \begin{description}
  \tightlist
  \item[Architecture:]
  high-level system capability
  \end{description}

  -\/- involves composing modules to form systems
\item
  \begin{description}
  \tightlist
  \item[Code:]
  algorithms and data structures
  \end{description}

  -\/- involves composing primitive language features to form modules
\item
  \begin{description}
  \tightlist
  \item[Executable:]
  allocation of code and data to machine
  \end{description}

  -\/- involves composing bit patterns to form language features
\end{enumerate}

\begin{center}\rule{0.5\linewidth}{\linethickness}\end{center}

\hypertarget{research-areas-in-software-architecture}{%
\subsection{Research Areas in Software
Architecture}\label{research-areas-in-software-architecture}}

\begin{itemize}
\item
  architectural description languages
\item
  codification of architectural expertise
\item
  architectural frameworks for specific domains
\item
  formal foundations
\item
  architecture design/analysis selection methods
\item
  support tools
\item
  architecture extraction, recovery, and reengineering (for legacy
  systems)
\item
  etc.
\end{itemize}

\end{document}
