Primary course 
SWE 619 (Software Construction) 

Primary textbook 
Liskov. Program Development in Java: Abstraction, Specification, and Object-oriented Design. Addison-Wesley, 2000. 

Topic Description Readings (Liskov) 
Abstraction Decomposition and Abstraction 1.1 
Parameterization 1.2 
Specification 1.2 
Java Objects Program structures and packages 2.1, 2.2 
Objects and Type Checking 2.3, 2.4 
Dispatching and Types 2.5, 2.6 
Procedural Abstraction Specifications 3.1, 3.2, 3.3 
Implementing 3.4 
Designing 3.5 
Exceptions Exceptions in Java 4.1, 4.2 
Programming with Exceptions 4.3 
Design and Defensive Programming 4.4, 4.5 
Data Abstraction  Specifications and implementation 5.1-5.5 
Reasoning 5.6, 5.7 
Designing 5.8, 5.9 
Iteration Abstraction  Iterators in Java 6.1 
Specifications and implementation 6.2-6.4 
Design 6.5-6.7 
Type Hierarchies  Assignment and dispatching 7.1 
Defining hierarchies 7.2-7.5 
Specifications and implementation 7.6-7.8 
Theoretical properties 7.9, 7.10 
Polymorphic Abstraction  Defining and using 8.1, 8.2 
Equality and robustness 8.3-8.6