CS Department   Mt. Holyoke College
CS 315
Software Design

Course Schedule

The following publications are referred to on the schedule below:

Bloch
Joshua Bloch, Effective Java, Addison-Wesley, 2001. An excellent book of programming tips particularly relevant to Java.
Fowler
Martin Fowler, Refactoring: Improving the Design of Existing Code, Addison-Wesley, 1999.
Freeman
Eric Freeman, Elisabeth Freeman, Kathy Sierra and Bert Bates, Head First Design Patterns, O'Reilly, 2004. Available at http://proquest.safaribooksonline.com/0596007124
Goetz
Brian Goetz, Java Concurrency in Practice, Addison-Wesley, 2006.
Harold
Elliotte Rusty Harold, Java Network Programming, 3rd edition, O'Reilly, 2004. This is available online at http://proquest.safaribooksonline.com/0596007213
Horstmann
Cay Horstmann, Object-Oriented Design and Patterns, John Wiley & Sons, 2004.
Skrien
Dale Skrien, Object-Oriented Design Using Java, McGraw-Hill, 2009.
Sept. 5: Why design matters, Java intro
Readings
Skrien, Chapter 1
Donald Knuth, Computer Programming as an Art
Java Tutorial, sections called Classes, Objects, and More on Classes - you only need to read this if you are new to Java.
Examples
HelloWorld.java
HelloFromVenus.java
Homework 1: First Sip of Java
Sept. 8: Swing, Java Strings
Readings
Java Tutorial on Strings
Java Tutorial on Swing - read the sections called A Visual Index to the Swing Components, Using Top-Level Containers and The JComponent Class
Examples
Hello with GUI
Hello from Venus with GUI
Text editor
Sept. 10: Java Exceptions and Packages
Readings
The Java Tutorial on Packages
The Java Tutorial on Exceptions
Homework 2: Postcard maker
Starter project
Examples
Hello with GUI
  • ColorPanel.java
  • Sept. 15: Fundamentals of object orientation, UML class diagrams
    Readings
    Skrien, Chapter 2, Appendix sections A.0-A.1
    Sept. 17: Preconditions and postconditions
    Readings
    Skrien, 4.6
    Homework 3: Polynomial
    Polynomial.java
    Sept. 22: Class invariants
    Readings
    Skrien, 4.4-4.5
    Sept. 24: Mountain Day!
    Sept. 29: Method design
    Readings
    Skrien, 4.0-4.3
    Homework 4:
    Style Matters!
    Anagram.jar
    Oct. 1: In-class redesign exercise
    Before redesign
    After redesign
    Oct. 6: Inheritance
    Readings
    Skrien, Chapter 3
    Homework 5:
    Subtyping
    Sorter.jar
    Oct. 8: Testing introduction
    Readings
    JUnit Test Infected: Programmers Love Writing Tests
    Oct. 15: Unit testing
    Readings: None
    Homework 6: Unit testing
    Oct. 20-24: Take home midterm
    Sample midterm questions
    Sample midterm answers
    Midterm solution
    PhotoViewer solution
    Oct. 20: .equals, clone, refactoring
    Readings
    Skrien, 4.7-4.11
    Oct. 22: Refactoring
    Readings
    Fowler, Chapters 2-3
    Oct. 27: Effective exception handling
    Readings
    Bloch Chapter 8
    Oct. 29: Identifying classes
    Readings
    Skrien, 5.0-5.5
    Homework 7: Finding the abstraction
    Monopoly rules
    Candidate classes developed in class
    Nov. 3: Immutability, UML Sequence diagrams, Law of Demeter
    Readings
    Skrien, 5.6-5.8, Appendix A.2
    The Paperboy, the Wallet, and the Law of Demeter
    Updated monopoly design including a sequence diagram for Player.playTurn and a partial class hierarchy for board spaces
    Nov. 5: Introduction to design patterns, Strategy pattern
    Readings
    Skrien 7.0
    Freeman, chapter called Welcome to Design Patterns
    Homework 8: Identifying classes
    Updated monopoly design including some new class diagrams
    Nov. 10: Adapter pattern, Singleton pattern
    Readings
    Skrien 7.1-7.2
    Nov. 12: No class
    Nov. 17: Template Method
    Readings
    Freeman, Chapter on Encapsulating Algorithms
    Nov. 19: Iterator, Command and Factory patterns
    Readings
    Skrien, 7.3-7.5
    Homework 9: Designing for reuse
    Nov. 24: Monpooly disucssion: Free parking strategies, limiting number of houses and hotels
    Dec. 1: Observer Pattern and Model-View-Controller
    Readings
    Skrien, 8.0-8.4
    Homework 10: Model-View-Controller
    Dec. 3: Controllers
    Dec. 8: Prototype pattern, UML state diagrams, State pattern
    Readings
    Skrien 8.5-8.6, Appendix A.3
    Dec. 10: Concluding remarks