CompSci 308
Spring 2024
Advanced Software Design and Implementation

Testing is valuable, but incrementally developing an optimal architecture as a side effect of testing is priceless. — 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.

Date Topics Examples/Videos Lab Readings Due
Basic Design Principles
1 - Jan 11 Course Overview
GIT in Practice
OpenJFX Animation
Example: Conditionals
Example: Bounce
Video: Class Introduction
GITing Started
Bouncing Balls
Clean Code
OO in One Sentence
JavaFX Basics (sections 1-3)
GIT Basics
CompSci Autobiography, Sat 1/13
2 - Jan 16/18 Refactoring and Code Smells
Finding Objects
Importance of Ethics
Example: Bins
Video: Objects
Hangman Single Responsibility Principle
Code Smells
Everything is an Object
Refactoring: Extract Class
Pragmatic Debugging
Breakout - Plan and Basic Start, Tue 1/16
Journal - Thinking about Ethics, Fri 1/19
Design Using Abstractions
3 - Jan 23/25
Abstraction: Inheritance and Polymorphism
Intergrity and Equity
Example: Roulette
Video: Abstractions
Team Meeting Access Control (Encapsulation)
Inheritance and Polymorphism
Refactoring: Replace Conditional
Effective Teamwork
Breakout - Complete, Tue 1/23
Journal - Project Analysis, Sat 1/27
4 - Jan 30/Feb 1
Example: Browser GIT for Teams
Open Closed Principle
Model-View Separation Principle
JavaFX GUIs (sections 4-5)
GIT Branching and Merging
Cell Society - Plan, Mon 1/29
JournalStarting and Learning, Fri 2/2
5 - Feb 6/8 Exceptions
Encapsulation and Interfaces
Example: Browser (continued)
Example: Encapsulation
Video: Exceptions
Video: Encapsulation
Code Review Liskov Substitution Principle
Exceptions: Throwing and Designing
Java Interfaces Are So Very Cool
Better Code With OOP Concepts
Cell Society - Basic, Mon 2/5
Journal - Teamwork Reflection, Fri 2/9
Design Using APIs and Testing
6 - Feb 13/15
Designing APIs Java Time and Dates
Java Collections
Video: APIs
Video: API design
Team Meeting Josh Bloch on API Design
Model-View-Controller (MVC)
Designing with Interfaces
Managing Conflict in Teams
Cell Society - Change, Mon 2/12
Journal - Project Analysis, Fri 2/16
7 - Feb 20/22
Unit Testing and TDD
"Advanced" Java: Reflection
Example: Testing
Example: Reflection
  JUnit Test Infected
User Interface Testing with TestFX
Dependency Inversion Principle
Design by Contract
SLogo - Plan, Mon 2/19
Journal - Ethics in the News, Fri 2/23
SLogo - Test, Sun 2/25
8 - Feb 27/29
Design Patterns
    Introduction to Design Patterns
Interface Separation Principle
Why Lamba Expressions
Refactoring to Patterns
Journal - TBA, Fri 3/1
SLogo - Basic, Sun 3/3
9 - Mar 5/7 Design Smells       SLogo - Change, Fri 3/8
10 - Mar 12/14
Putting it All Together
11 - Mar 19/21
Agile Project Management
  Team Meeting    
12 - Mar 26/28 Agile Project Design
13 - Apr 2/4
14 - Apr 9/11
15 - Apr 16/18
16 - Apr 23
General Software Design   NO LAB    
Wed, May 1 Final Project Demos, in person, 7-10pm