CompSci 308
Spring 2014
Software Design and Implementation

The exact order and details of these topics is subject to change during the semester based on the pace needed, but we will try to set them at least two weeks in advance. As much as possible, materials discussed in class will be posted here in case you miss class.

Readings should be completed during the week in which they are listed.

Topic Reading Day Assignment
What is Design? OO in One Sentence
Code Smells
Guide to Versioning Systems
Jan 08 Overview
Out: Game
Jan 09  
Jan 10 What is Design?
Classwork: Bins
Due: Game, Plan
Jan 11  
Inheritance Inheritance
Commonality Analysis
Open Closed Principle
Jan 12  
Jan 13 Design Principles
Jan 14  
Jan 15 Inheritance
Jan 16  
Jan 17 Refactoring
Classwork: Roulette
Due: Game, Implementation
Jan 18  
Working in Teams Liskov Substitution Principle
Git: Branching and Merging
Jan 19  
Jan 20 No Class: MLK, Jr. Day
Jan 21  
Jan 22 Inheritance Heuristics
Jan 23 Due: Game, Analysis
Jan 24 GIT Team Workflow
Team Meeting
Out: Springies
Jan 25  
Testing and
Debug It!
JUnit Test Infected
Getters and Setters are Evil
Jan 26  
Jan 27 Design Heuristics
Jan 28 Due: Springies, Part 1
Jan 29 No Class: SNOW!
Jan 30  
Jan 31 Unit Tests in Eclipse
Pair Programming
TDD Exercise
Feb 01  
Design Patterns Introduction to Design Patterns
Feb 02  
Feb 03 Design Patterns
Due: Springies, Part 2
Feb 04  
Feb 05 Design Guidelines
Feb 06  
Feb 07 Code Review
Feb 08  
APIs Exceptions
Josh Bloch on API Design
Designing with Interfaces
Feb 09  
Feb 10 Debugging, Exceptions
Feb 11 Due: Springies, Part 3
Feb 12 No Class: SNOW!
Feb 13  
Feb 14 No Class: SNOW!
Feb 15  
GUIs User Interfaces that Swing
Using Swing Components
Isolating Locale-Specific Data
Feb 16 Due: Springies, Analysis
Out: SLogo
Feb 17 Designing an API
Team Meeting
Feb 18  
Feb 19 GUIs with Swing
Feb 20  
Feb 21 Exercise: Browser
Due: SLogo, Part 1
Feb 22  
Advanced Java Reflection
Enumerated Types
Java I/O
Feb 23  
Feb 24 API Example
Feb 25  
Feb 26 Advanced Java
Feb 27  
Feb 28 Exercise: "Advanced" Roulette
Mar 01 Due: SLogo, Part 2
Working in Teams Extreme Programming Explained Mar 02  
Mar 03 No Class: ICE!
Mar 04  
Mar 05 Team Review
Mar 06  
Mar 07 No Class: Traveling
Mar 08 Spring Break
Due: SLogo, Part 3
Spring Break Poetry of Function Naming
Naming From the Outside In
Naming Influences Design
Reuse Revolution
Technical Debt
Call Option
Good Code Tells the Truth
Law of Leaky Abstractions
Mar 09 Spring Break
Mar 10 Spring Break
Mar 11 Spring Break
Mar 12 Spring Break
Mar 13 Spring Break
Mar 14 Spring Break
Mar 15 Spring Break
Understanding the Domain:
The Structure of Games
Introducing OO Frameworks
Mar 16 Spring Break
Mar 17 Visualization Discussion
Mar 18  
Mar 19 What is a Game?
(and as a picture)
Out: OOGASalad
Mar 20  
Mar 21 Exercise: Design a Game
Mar 22 Due: SLogo, Part 4
Data Driven
Design to Accommodate Change
The Magic of Data Driven Design
Design Patterns in Game Engines
Mar 23 Due: OOGASalad, Part 1
Mar 24 Team Meetings
Mar 25  
Mar 26 Data Driven Design
Mar 27  
Mar 28 API Peer Review
Due: OOGASalad, Part 2
Mar 29  
From Patterns
to Principles
Foundation Patterns
Designing a Document Editor
Mar 30  
Mar 31 Questions and Answers
Apr 01  
Apr 02 Design Patterns Revisited
Apr 03  
Apr 04 Github Workflow,
Pull Requests,
Undoing Changes
Apr 05  
for Reuse
Small Pieces, Loosely Coupled
Stable Abstractions Principle
Reuse and Pluggable Design
Apr 06  
Apr 07

Due: OOGASalad, Part 3

Apr 08  
Apr 09 Java 8:
Lambda and Collections
Apr 10  
Due: OOGASalad, Part 4
Apr 12  
Open Source
Free Software Definition
Cathedral and Bazaar
Homesteading the Noosphere
Apr 13  
Apr 14 IDE Discussion
Apr 15  
Apr 16 Open Source Software
Apr 17  
Apr 18 Exercise: Building Games
Apr 19  
Path to the
ACM Code of Ethics
IEEE Code of Ethics
Ten Commandments of Computer Ethics
Apr 20  
Apr 21 Ethics of Programming
Due: OOGASalad, Part 5
Apr 22  
Apr 23 LDOC
Apr 24 Reading Period
Apr 25 Reading Period
Apr 26 Reading Period
Finals   Apr 27 Reading Period
Apr 28 Due: OOGASalad, Part 6
Apr 29  
Apr 30  
May 01 Final Project Demo, 2pm-5pm