CS 201J 
Engineering Software
cs201j-staff@cs.virginia.edu
Schedule - Problem Sets - Exams - Lectures - Links

CS201J - Lectures and Notes

Lecture 1: Engineering Software? (Notes):
Can we Engineer Software?
Why is engineering software different from engineering 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)
Semantics Recap
Modularity and Specification
Characteristics of a Good Specification
Formal and Information Specifications
Requires, Modifies, Effects
Lecture 4: Data Abstraction (Notes)
Abstract Data Types
Specifying ADTs
Creators, Producers, Observers and Mutators
Representations
Rep Invariants, Abstraction Functions
Lecture 5: Code Red, Ariane 5 and Gambling (Notes)
No checking, run-time checking, static checking
Array bounds errors
Specifying data abstractions: Graph example
PS2 Comments
Lecture 6: Implementing Data Abstractions (Notes only)

Lecture 7: Tale of Two Graphs (Notes)

Implementing Data Abstractions
Criteria for selecting a good representation
Practice with Rep Invariants and Abstraction Functions Rep exposure

Lecture 8: Design (Notes)

Why Design Matters
Documenting Designs: Modular Dependency Diagrams
Evaluating Designs
Lecture 9: Exceptions
Exceptions
Try and Catch
Exception Hierarchy
Defensive Programming
Lecture 10: Design (no slides or notes)

Lecture 11: Subtyping and Inheritance (Notes)

Subtyping
Inheritance
Object-Oriented Programming
Lecture 12: Subtyping Rules (Notes)
Substitution Principle
Eiffel's Type Rules
Lecture 13: Concurrency (Notes)
Substitution Principle
Overloading and Overriding
Concurrency
Race Conditions and Deadlocks
Lecture 14: Dining Philosophers (Notes Only)
Bags and Sets
Dining Philosophers
Lecture 15: Using Low-Level Languages (Notes)
Array Subtyping
Survey
C Programming Language
Data Abstraction in C
Lecture 16: Pointers and Memory Management (Notes)
Null Dereferences
Explicit Memory Management
Annotations for Memory Management
Lecture 17: Garbage Collection (Notes)
Stack and Heap Review
Garbage Collection Approaches:
   Mark and Sweep
   Stop and Copy
   Reference Counting
Lecture 18: Deep C Garbage Collection (Notes)
Pointers in C
Type Checking in C
Lecture 19: 0xCAFEBABE (Notes)
Computer Architecture
Java Virtual Machine
Java Byte Codes
Lecture 20: Java (In?)Security (Notes)
Low-level Code Safety
Enforcing Security Policies
Lecture 21: Snakes (Notes)
Abstraction
What is Computer Science?
Game Playing
Networking
Lecture 22: C#: "Sharp", "Pound" or "Hash"? (Notes)
Db and C#
CLU
What is the "J" for?
Lecture 23: Snakes Tournament (Notes)
Change the World!

CS201J University of Virginia
Department of Computer Science
CS 201J: Engineering Software
Sponsored by the
National Science Foundation
cs201j-staff@cs.virginia.edu