CS 201J 
Engineering Software
Schedule - Problem Sets - Exams - Lectures - Links

CS201J - Lectures and Notes

Lecture 1: Engineering Software? (Notes):
Can we Engineer Software?
Why is software different from bridges?
Tools for managing complexity
Lecture 2: Java Semantics, Valiation (Notes)
Java Semantics: Stack and Heap
Object equality and mutability
Validation: Testing and Analysis
Black-box, glass-box testing
Lecture 3: Abstraction by Specification (Notes)
Modularity and Specification
Characteristics of a Good Specification
Formal and Information Specifications
Requires, Modifies, Effects
Lecture 4: Data Abstraction (Notes)
Specifying ADTs
Creators, Producers, Observers and Mutators
Lecture 5: Implementing Data Abstractions (Notes)
Implementing Data Abstractions
Criteria for selecting a good representation
Lecture 6: Reasoning about Data Abstractions (Notes only)

Rep Invariants and Abstraction Functions
Reasoning about program correctness

Lecture 7: Tale of Two Graphs (Notes)

Criteria for selecting a good representation
Rep Invariants and Abstraction Functions
Rep exposure

Lecture 8: Design (Notes)

Why Design Matters
Modular Dependency Diagrams
Evaluating Designs
Lecture 9: Handling Mistakes (Notes)
Weakly Uses Dependencies
Tradeoffs between no checking, static checking and dynamic checking
Lecture 10: Exceptions
Try and Catch
Checked and Unchecked Exceptions
Lecture 11: Subtyping and Inheritance (Notes)

Lecture 12: Subtyping and Inheritance 2

Lecture 13: Behavioral Subtyping (Notes)

Lecture 14: Substitution Principle (Notes)

Substitution Principle
Eiffel's Type Rules
Lecture 15: Concurrency (Section Notes)
Concurrency Race Conditions Deadlocks
Lecture 16: Programming Concurrency (Notes)
Substitution Principle Example
Programming Threads in Java
Wait and notify
Lecture 17: Concurrency without Locks (Notes)
Why were stop and suspend deprecated?
Lecture 18: CAFEBABE (Java Byte Codes) (Notes)

Lecture 19: Java Security (Notes)

Java Security
Byte Code Verifier
Reference Monitors
Lecture 20: Hair Dryer Attacks (Notes)
Array Subtying Rules
Violating Type Safety
Using type violations to violated security policy
Lecture 21: Garbage Collection (Notes)
Stack and Heap Review
Garbage Collection Approaches:
   Mark and Sweep
   Stop and Copy
   Reference Counting
Lecture 22: C (Notes)
C Programming Language
Data Abstraction in C
Garbage Collection
Lecture 23: Everything Else You Should Know

CS201J University of Virginia
Department of Computer Science
CS 201J: Engineering Software
Sponsored by the
National Science Foundation