CompSci 308
Spring 2026
Advanced Software Design and Implementation

Design, by nature, is a series of trade-offs. Every choice has a good and bad side, and you make your choice in the context of overall criteria defined by necessity. Good and bad are not absolutes, however. A good decision in one context might be bad in another. — Allen Holub

The exact order and details of 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.
Materials discussed in class and lecture recordings will be posted here.


Date Topics Examples/Videos Lab Readings Due
Week 1
Jan 8
Course Overview
GIT in Practice
Example: Conditionals
Example: Bounce
GITing Started
Making Classes
Clean Code
OO in One Sentence
JavaFX Basics (sections 1-3)
GIT Basics
Sun 1/11: Journal - CompSci Autobiography
Week 2
Jan 13/15
Refactoring and Code Smells

Example: Bins Refactoring Single Responsibility Principle
Code Smells
Everything is an Object
Refactoring: Extract Class
Tue 1/13: Breakout - Plan and Basic Start
Fri 1/16: Journal - Habits and Failure
Week 3
Jan 20/22
Abstraction Example: Roulette Team Meeting
Access Control (Encapsulation)
Inheritance and Polymorphism
Refactoring: Replace Conditional
How to Work Well on Teams
Tue 1/20: Breakout - Complete
Sat 1/24: Journal - Project Analysis
Week 4
Jan 27/29
JFX GUIs Video
Separating Model from Views
Unit Testing
Example: Browser GIT for Teams
Testing
Team Planning
Open Closed Principle
Model-View Separation Principle
JUnit Test Infected
JavaFX GUIs (sections 4-5)
Tue 1/27: Cell Society - Plan
Fri 1/30: JournalStarting and Ethics
Week 5
Feb 3/5
APIs and Interfaces
Exceptions
Example: Browser (continued)
Java Time and Dates
Java Iterable and Iterator
Making an API
Team Planning
Josh Bloch on API Design
ThrowingDesigning Exceptions
Java Interfaces Are So Very Cool
Towards Ethics by Default
Tue 2/3: Cell Society - Basic and Test
Fri 2/6: JournalTesting
Week 6
Feb 10/12
Encapsulation
GUI Testing
Example: Encapsulation
Lecture Video
Testing
Team Planning
Liskov Substitution Principle
Why Lamba Expressions
Benefits of Immutable Objects
User Interface Testing with TestFX
Fri 2/13: JournalMidpoint Team Review
Week 7
Feb 17/19
Design Patterns
"Advanced" Java
Example: Reflection
Example: Browser (continued)
Design Patterns Introduction to Design Patterns
Dependency Inversion Principle
Design by Contract
Reflection
Tue 2/17: Cell Society - General and Robust
Fri 2/20: JournalEthics (Professional)
Week 8
Feb 24/26
SOLID Design
       
Week 9
Mar 3/5
Ethics        
10 - Mar 10/12
SPRING BREAK        
Week 11
Mar 17/19
Agile Project Management   Team Meeting
   
Week 12
Mar 24/26
Agile Project Design
       
Week 13
Mar 31/Apr 2
TBD

       
Week 14
Apr 7/9
TBD
       
Week 15
Apr 14/16
TBD
       
Week 16
Apr 21
Wrap-Up   NO Lab Meeting    
Fri, May 1 Final Project Demos, in person
7-10pm