Software Architecture, Definition
 DEF1: The architecture of a software system defines the
  system in terms of components/sub-systems and
  interactions among those components.
 DEF2: The software architecture of a system is the
  structure of the system, which comprise software
  elements, the externally visible properties of those
  elements, and the relationships among them
                                                            2
Software Architecture-Definition
 DEF 3: Architecture is the fundamental organization of a
 system including its components, their relationships to
 each other and to the environment and the principles
 guiding its design and evolution
 [IEEE Standard on the Recommended Practice for
 Architectural Descriptions, 2000]
                                                            3
Components and Connectors
  Components are connected by connectors
  They are the building blocks with which an architecture
   can be described
  No standard notation has emerged yet
                                                             4
The Architecture of a Packing Robot Control System
Software Architecture Patterns / Styles
1: Layered Architecture
 Organises the system into a set of layers each of which provide
  a set of services
 A layer provides services to the layer above it so the lowest-
  level layers represent core services that are likely to be used
  throughout the system.
 Supports the incremental development of sub-systems in
  different layers
 When a layer interface changes, only the adjacent layer is
  affected
                                                                    6
Layered Architecture
THE ARCHITECTURE OF THE LIBSYS SYSTEM
                                        8
LAYERED ARCHITECTURED OF THE HOSPITAL
MANAGEMENT SYSTEM
                                        9
Layered Architecture of Library System
Software Architecture Patterns / Styles
2: Repository Architecture
 Sub-systems must exchange data. This may be done in
  two ways:
   Shared data is held in a central database or
     repository and may be accessed by all sub-systems;
    Each sub-system maintains its own database and
     passes data explicitly to other sub-systems.
 All data in a system is managed in a central repository
  that is accessible to all system components
 Components do not interact directly, only through the
  repository.
                                                        11
THE REPOSITORY STYLE
           •Information System, Programming Environments,
           Graphical Editors, AI Knowledge Bases, Reverse
           Engineering System are the examples of Repository
           Architecture Style.
                                                               12
Repository Architecture
Software Architecture Patterns / Styles
3: Client-Server Architecture
 In a client–server architecture, the functionality of the
  system is organized into services such as printing, data
  management etc, with each service delivered from a
  separate server
 Clients are users of these services and access servers to
  make use of them.
 Network which allows clients to access servers.
                                                          14
Client-Server Architecture For a Film Library
Software Architecture Patterns / Styles
4: Pipe and Filter Architecture
 The processing of the data in a system is organized so that
  each processing component (filter) carries out one type of
  data transformation
 The data flows (as in a pipe) from one component to
  another for processing
 Inputs are processed in separate stages to generate related
  outputs
 Not really suitable for interactive systems
                                                                16
Pipe and Filter Architecture
Model Transformation
 The purpose of object (Class)model transformation is to:
    Simplify or optimize the original model
    Bringing it into closer compliance with all requirements in
     the specification.
 A transformation may add, remove, or rename classes,
  operations, associations, or attributes
 A transformation can also add information to the model or
  remove information from it.
Model Transformation - Example
Refactoring
 A refactoring is a transformation of the source code that
  improves its readability or modifiability without changing
  the behavior of the system
 Refactoring aims at improving the design of a working
  system by focusing on a specific field or method of a class
Refactoring - Example
Forward Engineering
 Forward engineering produces a source code that corresponds
  to a model (e.g. Use Case model, class model, sequence model
  etc)
 Many modeling constructs, such as attribute, can be
  mechanically mapped to source code constructs supported by
  the selected programming language (e.g. Java, C#)
 While the bodies and additional private methods are added by
  developers
                                                                 22
Reverse Engineering
 Reverse engineering produces a model that corresponds to
  source code
 This transformation is used when the design of the system
  has been lost and must be recovered from the source code
Forward and Reverse Engineering
Forward Engineering
 Forward engineering is applied to a set of model elements
  and results in a set of corresponding source code statements,
  i.e. a class declaration, a Java/C# expression etc
 The purpose of forward engineering is to:
   Maintain a strong correspondence between the design models
     and the code
   Reduce the number of errors introduced during implementation
   Decrease implementation effort
                                                                   25
Forward Engineering - Example
Reverse Engineering
 Reverse engineering is applied to a set of source code elements and results in a set
   of model elements
 Purpose of this type of transformation is to recreate the model for an existing
   system, either because
     The model was lost or never created, or
     It became out of sync with the source code
 Reverse engineering is essentially an inverse transformation of forward engineering
 Reverse engineering creates:
     A UML class for each class declaration statement
     Adds an attribute for each field
     Adds an operation for each method