6.005 | Fall 2008 | Undergraduate

Elements of Software Construction

Calendar

Abbreviations

JSP = Jackson Structured Programming

DPLL = Davis-Putnam-Logemann-Loveland (algorithm)

SQL = Structured Query Language

SES # TOPICS ASSIGNMENTS PROJECTS
1

Introduction

Basic Java syntax and semantics; overview of objectives and structure of the course

  Do lab 0.1
2

Classes

More Java: exceptions, input/output, classes, access control, static

Exploration 1 out  
3

Subclassing and interfaces

Subclassing, inheritance, overriding, interfaces, packages; distinction between declared type and actual type; downcasting; anonymous classes

  Do lab 0.2
4

Designing state machines

State machine design; graphical and textual notation; state machine semantics; parallel combinations of machines

Exploration 1 due

Problem set 1 out

 
5

Implementing state machines

State machine implementation patterns; concurrency and queues; modularity and interfaces

   
6

State machine invariants

Safety and liveness properties; state properties and invariants; inductive reasoning; computing the product machine of a parallel combination; state explosion; fault tolerance; interlocks and the idea of a trusted base

   
7

Designing stream processors

Stream processing programs; grammars vs. machines; JSP method of program derivation; regular grammars and expressions

 

Project 1 out

Do lab 1

8

Decoupling and interfaces

Modularity, decoupling, information hiding; module dependence diagrams; using interfaces for decoupling

Problem set 1 due  
9

Testing and coverage

Why software testing is hard; input space partitioning, boundary testing, state machine coverage, code coverage; test-first development and regression testing

   
10

Designing a SAT solver, part 1

The SAT problem and SAT solvers; a new paradigm of functions over immutable types; use datatype productions to model structured values; patterns for implementing datatypes (Variant as Class, Interpreter)

Exploration 2 out Project 1 due
11

Designing a SAT solver, part 2

Review of basic datatype patterns; a naive solver with backtracking search; design improvements with Facade, Option types, and a 3-valued logic

   
12

Debugging

Techniques for avoiding debugging: assertions, modular development with unit testing, code reviews; strategies for debugging: reducing test cases, hypothesis-driven debugging, binary search; Heisenbugs

Exploration 2 due

Problem set 2 out

 
13

Designing a SAT solver, part 3

Abstract data types; representation independence; characterizing types by operations; encapsulation; examples of types used by DPLL solver; Factory Method pattern

   
14

Rep invariants, equality, visitors

Advice on implementing types; rep invariants and abstraction functions; equality for immutable types; Iterator and Visitor patterns

 

Project 2 out

Do lab 2

15

Little languages

Representing behavior using data structures; language datatypes, visitors, functional objects, higher-order functions; solving a problem by creating a domain-specific language

Problem set 2 due  
16

Basics of mutable types

Heap semantics (aliasing, assignment, field setting); reachability and conceptual storage leaks; the Object Contract and equality properties; hash maps and their representation invariant; problems caused by mutation of keys

Exploration 3 out Project 2 due
17

Event-based programming

Fundamentals of programming graphical user interfaces; view hierarchy, Composite pattern, Publish-Subscribe pattern, Model-View-Controller (MVC); pitfalls of event-based programming

   
18

Designing a photo organizer

The relational paradigm; conceptual modeling; object model syntax and semantics; Mitchell and Webb on “unity of purpose”

Exploration 3 due

Problem set 3 out

 
19

Implementing a photo organizer

Implementation as object model transformation; key issue of where state resides; standard patterns; navigation, immutability and encapsulation; MVC considerations

   
20

Concurrency

Shared-memory and message-passing paradigms; race conditions and deadlock; using threads and blocking queues in Java; concurrency issues in graphical user interfaces

 

Project 3 out

Do lab 3 and team building lab; Swing lab optional

21

Usability

User interface design principles: learnability, visibility, efficiency, errors, simplicity; iterative design; sketching and paper prototyping; user testing

Problem set 3 due  
22

Relational databases

Using a database to represent an object model; relational algebra and SQL; transactions

   
23

Conclusion

Final words; courses and internships that might follow 6.005; winners of Project 3 awards; 6.005 quiz game

  Project 3 due

Course Info

Learning Resource Types
Problem Sets
Lecture Notes
Projects
Programming Assignments with Examples