Docsity
Docsity

Prepare for your exams
Prepare for your exams

Study with the several resources on Docsity


Earn points to download
Earn points to download

Earn points by helping other students or get them with a premium plan


Guidelines and tips
Guidelines and tips

Programming in the Large vs. Programming in the Small, Lecture notes of Computer Architecture and Organization

The challenges of programming in large systems and the benefits of software architecture. It covers topics such as software architecture, architectural styles, and design patterns. The document also provides examples of different styles such as Pipe and Filter Style, Layered Style, Object-Oriented/ADT Style, Repository Style, and Implicit Invocation Style. related to university topics such as software engineering, computer science, and programming. The University of Washington is the most likely university to have courses related to these topics.

Typology: Lecture notes

2021/2022

Uploaded on 05/11/2023

anala
anala 🇺🇸

4.3

(15)

259 documents

1 / 3

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
1
CSE 503: Software Engineering
Software Architecture
Jonathan Aldrich
University of Washington
Department of Computer Science and Engineering
Winter 2002
Programming in the Large vs.
Programming in the Small
Large systems bring different challenges
What problems have you experienced?
Where/how do I extend the system?
What invariants hold of a large data structure?
What are a module’s clients/what does it use?
Tight coupling
Large interfaces
Programming in the Large vs.
Programming in the Small
Large systems bring different challenges
How do you deal with them?
Imitate examples
Have someone explain/draw a picture
Trace through code
Grep or other tools
Read documentation
Software Architecture
The highest level of design
The gross organization of a software system
Issues: decomposition, control flow,
communication, concurrency, distribution
A set of components, connections between
the components, and constraints on how
they interact
parser codegen scanner
Compiler
Benefits of Architecture
Specification of high-level system design
Program understanding
Analysis
Language and tool support
Taxonomy of system design
Advantages/disadvantages
Capturing design experience
Relationship between systems
parser codegen scanner
Compiler Architectural Styles
System-level design patterns
Client-server or 3-tier
Layered system
Pipeline architecture
Represent design knowledge
Vocabulary of concepts
Constraints on implementation
Benefits/drawbacks of alternatives
pf3

Partial preview of the text

Download Programming in the Large vs. Programming in the Small and more Lecture notes Computer Architecture and Organization in PDF only on Docsity!

CSE 503: Software Engineering

Software Architecture

Jonathan Aldrich University of Washington Department of Computer Science and Engineering Winter 2002

Programming in the Large vs.

Programming in the Small

  • Large systems bring different challenges
  • What problems have you experienced?
    • Where/how do I extend the system?
    • What invariants hold of a large data structure?
    • What are a module’s clients/what does it use?
    • Tight coupling
    • Large interfaces

Programming in the Large vs.

Programming in the Small

  • Large systems bring different challenges
  • How do you deal with them?
    • Imitate examples
    • Have someone explain/draw a picture
    • Trace through code
    • Grep or other tools
    • Read documentation

Software Architecture

  • The highest level of design
    • The gross organization of a software system
    • Issues: decomposition, control flow, communication, concurrency, distribution
  • A set of components , connections between

the components, and constraints on how

they interact

scanner parser codegen

Compiler

Benefits of Architecture

  • Specification of high-level system design
    • Program understanding
    • Analysis
    • Language and tool support
  • Taxonomy of system design
    • Advantages/disadvantages
    • Capturing design experience
    • Relationship between systems

scanner parser codegen

Compiler

Architectural Styles

  • System-level design patterns
    • Client-server or 3-tier
    • Layered system
    • Pipeline architecture
  • Represent design knowledge
    • Vocabulary of concepts
    • Constraints on implementation
    • Benefits/drawbacks of alternatives

Pipe and Filter Style

  • Filters process data, streams connect filters
    • No shared state
    • No knowledge of other filters
  • Design choices
    • Linear (pipeline) vs. connection graph
    • Incremental vs. batch processing
  • Canonical examples: compilers, unix tools
    • Others?

Pipe and Filter Style

  • Advantages
    • Easy to change: add/remove/replace filters
    • Filters need only agree on data (e.g., XML)
    • Inherent scalability and concurrency
    • Analysis for throughput, deadlock
  • Drawbacks?

Layered Style

  • As discussed before!
  • Invariant
    • Each layer uses only the layer (or layers) below
  • Advantages
    • Easy to add new functionality in a new layer
    • Limited dependencies ease change
    • Can swap in different layer implementations
  • Drawbacks?

Object-Oriented/ADT Style

  • A set of communicating objects
    • Each is responsible for its (hidden) representation
  • What do you think of this style?

Implicit Invocation Style

  • As discussed before!
  • Invariant
    • Announcers don’t know about listeners
  • Advantages
    • Easy to add/remove/replace components
  • Drawbacks
    • Hard to reason about system

Repository Style

  • Data stored in a central repository
    • Independent components operate on the store
      • Pure form: may not communicate in any other way
    • Components may be triggered by data
  • Advantages?
  • Drawbacks?