Lecture Outlines (DRAFT)
Introduction
-
Course organization
-
Course content: tutorial, engineering experience, research
-
Readings: tutorials, case studies, research papers & diatribes
-
Phases of class project: rev eng, design, implementation, reflection
-
Why design? Productivity, safety, delegation
-
Elements: notations, methods, tools
-
Approaches to design: component vs. cross-cutting
Overview of CTAS
-
Guest lecture, Prof John Hansman
Entity Life Histories
-
Alphabets, events and traces
-
Descriptions: regexps, grammars, machines
-
Roles, parallelism and shared events
-
Premature termination
-
Essential vs. inessential structure
-
State variables
Basic Object Modelling
-
Objects, entities and attributes
-
Abstraction of program structures: containers, methods, etc
-
Components: sets, relations, indexed relations, overloaded relations
-
Subset relationships
-
Multiplicity markings
-
Organization techniques: ternaries, HO relations, lowering
-
Mutability of relations
-
Static and dynamic classification
-
Derived and designated components
-
Omitted features from UML, Catalysis, Syntropy, Fusion, etc
Data Abstraction
-
Representation independence
-
Type-based enforcement
-
Representation exposure
-
Constructors, mutators and observers
-
Abstraction functions and rep invariants
-
Beneficent side effects
-
Subclassing exposures
-
True parametric polymorphism
-
Subclassing and subtyping
Design for Change
-
Lessons learnt from John Chapin's course last fall
Design Patterns
-
Motivation: handbooks, tricks of trade, Alexander
-
Why so popular?
-
Structure of a pattern; notation
-
Observer: event registration protocols, consistency
-
Visitor: subclassing of visitors, subclassing of visited, replacers
-
Bridge: Grappa as case study
-
Factory
Concurrent Design Patterns
Problem Frames
-
Decomposition criteria
-
Polya's frames
-
Phenomena: events, states, facts
-
Domains, shared phenomena and characteristics
-
Elementary frames
-
Composite frames
-
Synchrony hypothesis
Software Architecture
-
Connectors as 'first-class' objects
-
Architectural style
-
Sample styles: event systems (Smalltalk, Gandalf, Field)
-
Dynamic architectures with object models
-
Connector specification and analysis with Wright
Declarative Specification
-
Abstract state machines and invariants
-
Partitioning the transition relation into operations
-
Preconditions and guards
-
Non-determinism
-
Implicit preconditions
-
Implementability, preservation of invariants
-
Clever examples: minimization, etc
-
Views and multiple representations
-
Basic data types: sets, relations, sequences
-
Refinement relations
Design Methods
-
Principles and criteria: from SRS
-
Strong and weak methods
-
Formal methods aren't 'methods'
-
Benevolent difficulty
-
Elements of current OO methods: use cases, OMs, MSCs, etc
-
History: generations of methodologies
-
Structured analysis: DFDs, dictionaries, structure charts
-
Simulation-based methods
-
New methods: Fusion, Catalysis
Advanced Object Modelling
-
Constraints: definitions, invariants, conditions
-
Operations and transitions
-
Redundancy: assertions and counterexamples
-
Scope and automatic analysis
-
Domains and types
-
Funky modelling: global states, histories, problem domains
-
Being really abstract: orders, timestamps
Concurrency Case Studies
-
Guest lecture, Prof. John Chapin
Fads and Fallacies in Software Engineering
-
Top-down design and stepwise refinement
-
Weyuker's critique of metrics
-
Truisms: shall vs. will, what vs. how
-
Process evangelism
-
Code- and test-centric development
-
Hacker's Delusion
-
Unified Modeling Language