Course Description
This course provides an introduction to the fundamental principles and techniques of software development that have greatest impact on practice. Topics include capturing the essence of a problem by recognizing and inventing suitable abstractions; key paradigms, including state machines, functional programming, and object-oriented programming; use of design patterns to bridge gap between models and code; the role of interfaces and specification in achieving modularity and decoupling; reasoning about code using invariants; testing, test-case generation and coverage; and essentials of programming with objects, functions, and abstract types. The course includes exercises in modeling, design, implementation and reasoning.
Lecture Notes
This section contains documents that are inaccessible to screen reader software. A "#" symbol is used to denote such documents.
Review Handouts
State machine syntax and semantics (PDF)
Graphical object model notation (PDF)
Topics by Session
Notes for lecture 21 are not available.
Abbreviations
JSP = Jackson Structured Programming
DPLL = Davis-Putnam-Logemann-Loveland (algorithm)
SQL = Structured Query Language
lec # | TOPICS | LECTURE NOTES |
1 | IntroductionBasic Java syntax and semantics; overview of objectives and structure of the course | (PDF) |
2 | ClassesMore Java: exceptions, input/output, classes, access control, static | (PDF) |
3 | Subclassing and interfacesSubclassing, inheritance, overriding, interfaces, packages; distinction between declared type and actual type; downcasting; anonymous classes | (PDF) |
4 | Designing state machinesState machine design; graphical and textual notation; state machine semantics; parallel combinations of machines | (PDF) |
5 | Implementing state machinesState machine implementation patterns; concurrency and queues; modularity and interfaces | (PDF) |
6 | State machine invariantsSafety 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 | (PDF) |
7 | Designing stream processorsStream processing programs; grammars vs. machines; JSP method of program derivation; regular grammars and expressions | (PDF) |
8 | Decoupling and interfacesModularity, decoupling, information hiding; module dependence diagrams; using interfaces for decoupling | (PDF) |
9 | Testing and coverageWhy software testing is hard; input space partitioning, boundary testing, state machine coverage, code coverage; test-first development and regression testing | (PDF)# |
10 | Designing a SAT solver, part 1The 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) | (PDF) |
11 | Designing a SAT solver, part 2Review of basic datatype patterns; a naive solver with backtracking search; design improvements with Facade, Option types, and a 3-valued logic | (PDF) |
12 | DebuggingTechniques for avoiding debugging: assertions, modular development with unit testing, code reviews; strategies for debugging: reducing test cases, hypothesis-driven debugging, binary search; Heisenbugs | (PDF)# |
13 | Designing a SAT solver, part 3Abstract data types; representation independence; characterizing types by operations; encapsulation; examples of types used by DPLL solver; Factory Method pattern | (PDF) |
14 | Rep invariants, equality, visitorsAdvice on implementing types; rep invariants and abstraction functions; equality for immutable types; Iterator and Visitor patterns | (PDF) |
15 | Little languagesRepresenting behavior using data structures; language datatypes, visitors, functional objects, higher-order functions; solving a problem by creating a domain-specific language | (PDF) |
16 | Basics of mutable typesHeap 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 | (PDF) |
17 | Event-based programmingFundamentals of programming graphical user interfaces; view hierarchy, Composite pattern, Publish-Subscribe pattern, Model-View-Controller (MVC); pitfalls of event-based programming | (PDF) |
18 | Designing a photo organizerThe relational paradigm; conceptual modeling; object model syntax and semantics; Mitchell and Webb on "unity of purpose" | (PDF) |
19 | Implementing a photo organizerImplementation as object model transformation; key issue of where state resides; standard patterns; navigation, immutability and encapsulation; MVC considerations | (PDF) |
20 | ConcurrencyShared-memory and message-passing paradigms; race conditions and deadlock; using threads and blocking queues in Java; concurrency issues in graphical user interfaces | (PDF)# |
21 | UsabilityUser interface design principles: learnability, visibility, efficiency, errors, simplicity; iterative design; sketching and paper prototyping; user testing | |
22 | Relational databasesUsing a database to represent an object model; relational algebra and SQL; transactions | (PDF)# |
23 | ConclusionFinal words; courses and internships that might follow 6.005; winners of Project 3 awards; 6.005 quiz game | (PDF) |
No comments:
Post a Comment