Readings for CS 3500
1 Required readings
One way to translate an algebraic specification into Java.
New reading assigned on October 26, 2012:
Read The Story of Mel, a Real Programmer, by Ed Nather.
Read Liskov and Guttag chapter 5 (skipping discussion of the clone method): focuses on data abstraction
Next week we will talk about red-black trees. Read Chris Okasaki. Red-black trees in a functional setting.
Essential concepts in Java
Sestoft chapter 1: compilation, loading, and execution
Sestoft chapter 3: Java naming conventions
Sestoft chapter 4: comments and program layout
Sestoft chapter 6: variables, parameters, fields, and scope
Sestoft chapter 9: classes
Sestoft chapter 10: classes and objects in the computer
Sestoft chapter 11: expressions (may omit sections 11.1 through 11.4 and 11.6)
Sestoft chapter 5: types
Sestoft chapter 21: generic types and methods
The following sections of Liskov and Guttag book are relevant for the topics for the midterm:
Liskov and Guttag chapter 1: introduction
Liskov and Guttag sections 2.0 through 2.5, 2.6.1, 2.7: Java
Liskov and Guttag sections 5.0 through 5.4 (skipping discussion of the clone method): data abstraction
Liskov and Guttag sections 6.0 through 6.4, and sections 6.7 and 6.8: iterators
Liskov and Guttag section 7.6: abstract classes
Additional readings in Sestoft’s book:
Sestoft chapter 13: interfaces
Sestoft chapter 22: generic collections and maps
2 Supplemental readings
The Java Tutorial contains a succinct discussion of static members and the relationship between classes and objects.
Mark Grand’s summary of the Abstract Factory Pattern.
3 Reading in the Liskov text
Liskov’s book gives you motivation and explanation of why and how one designs the abstractions we will be covering in this course. The book takes a more informal approach, but comes with a very nice explanation and examples. Reading it will help you understand the course material and see iit from a different perspective.
We will update weekly which chapters are relevannnt to each week’s topics.
For the first week, review what you have learned about Java, and make notes if you see something that is new to you. Ask questions about this in the next class.
To see a discussion of why specification is important and see another way of defining specification read Chapter 5 of Liskov, especially section 5.5.
Week 1: 9/7
Read these chapters to review Java programming language
Review of Java; Introduction (Ch. 1 Liskov)
Understanding Objects in Java (Ch. 2 Liskov)
Week 2: 9/11, 14
These chapters give you another view of Procedual Abstraction
Procedural Abstraction (Ch. 3 Liskov)
Exceptions (Ch. 4 Liskov)
Week 3: 9/18, 21
Data Abstractions (Specification and Implementation) (Ch. 5 Liskov)
Data Abstractions (Abstraction Function, Representation Invariant, Side Effects) (Ch. 5 Liskov)
Week 4: 9/25, 28
Data Abstractions (Reasoning, Design Issues, Locality and Modifiability) (Ch. 5 Liskov)
Testing: unit tests, black box testing
Week 5: 10/2, 5
Iteration Abstraction (Ch. 6 Liskov)
Functional Iterators; Java for-each loop; Java 8 proposal
Week 6: 10/9, 12
Visitors
Type Hierarchy: overview, abstract classes, interfaces (Ch. 7 Liskov)
Week 7: 10/16, 19
Type Hierarchy: multiple implementations, subtyes, equality, substitution principle (Ch. 7 Liskov)
Polymorphic Abstractions (Ch. 8 Liskov)
Week 8: 10/23, 16
Parametric Polymorphism - Java generics
Parametric procedures: covariance, contravariance
Week 9: 10/30, 11/2
Specifications (Ch. 9 Liskov)
Testing and Debugging (Black-Box, Glass-Box) (Ch. 10 Liskov)
Week 10: 11/6, 9
Testing and Debugging - Tools for Testing; Debugging (Ch. 10 Liskov)
Design Patterns (Ch. 15 Liskov)
Week 11: 11/13, 16
Design Patterns - additional
Algorithms 1
Week 12: 11/20
User Algorithms 2
User Algorithms 3
Week 13: 11/27, 30
User Algorithms 4
User Algorithms 5
Week 14: 12/4
Summary