CompSci 307
Fall 2022
Software Design and Implementation

Simple is better than complex. Complex is better than complicated. — from The Zen of Python by Tim Peters

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.


Topic Resources Date Schedule Due
Introduction and Basic Design Principles through Refactoring
Week 1
Readable Code and
Debugging
Everything is an Object
Debugging
JavaFX (sections 1-3)
Visual Guide to Version Control
Aug 29 Course Overview
Example: Conditionals
Video: Video of Class
 
Aug 30    
Aug 31 Exercise: GITing Started
Example: Animation
Video: Software Install
Video: Accessing Gitlab
Video: Class
 
Sep 01    
Sep 02 Exercise: Debugging
Video: Class
Journal: CompSci Autobiography
Sep 03    
Sep 04   Project: Breakout, Part 1
Week 2
Clean Code and
Refactoring
Clean Code
OO in One Sentence
Code Smells
Refactoring: Extract Class
Sep 05 Example: Bins
Video: Class
 
Sep 06    
Sep 07 Exercise: Hangman
Video: Class
 
Sep 08    
Sep 09 Exercise: Hangman Journal: Ethics and Failure
Sep 10    
Sep 11   Project: Breakout, Part 2
Week 3
Inheritance and
Design Principles
Single Responsibility Principle
Inheritance and Polymorphism
Access Control (Encapsulation)
Refactoring: Replace Conditional
Sep 12 Example: Roulette
Video: Class
 
Sep 13    
Sep 14 Exercise: Inheritance and Debugging
Video: Class
 
Sep 15    
Sep 16 Exercise: GIT Practice Journal: Habits and Teamwork
Sep 17    
Sep 18    
Recognizing Good Design and Basic Teamwork
Week 4
GUIs and
Resources
Model-View Separation
Git Branching
JavaFX GUIs
Effective Teamwork
Sep 19 NO CLASS
Example: Browser
Video: JavaFX GUIs
Project: Breakout, Part 3
Sep 20    
Sep 21 Team Meeting Team Contract
Sep 22    
Sep 23 GIT Workflow
Video: Class
Journal: Starting a Big Project
Sep 24    
Sep 25    
Week 5
Testing
Open-Closed Principle
JUnit Test Infected
User Interface Testing with TestFX
Java: Records
Sep 26 Example: JUnit
Exercise: Unit Testing
Video: Class
Project: OOLALA, App 1
Sep 27    
Sep 28 Example: TestFX
Video: Class
 
Sep 29    
Sep 30 Teamwork: Testing your Code Journal: Ethics in the News
Oct 01    
Oct 02    
Week 6
Exceptions and
Design Principles
Dependency Inversion Principle
ExceptionsThrowing and Designing
Write Better Code With OOP
Java: Enumerated Types
Oct 03 Code Design Habit Checklist
Example: Browser (with Exceptions)
Video: Class
Project: OOLALA, App 2
Oct 04    
Oct 05 Code Review  
Oct 06    
Oct 07 Teamwork: Code Review Project: OOLALA, Refactoring
Oct 08    
Oct 09    
Design Strategies and Advanced Teamwork
Week 7
MVC Design and
Encapsulation
Model-View-Controller (MVC)
Interface Separation Principle
Commonality and Variability
Managing Conflict in Teams
Oct 10 FALL BREAK (no class)  
Oct 11    
Oct 12 Team Meeting Team Contract
Oct 13    
Oct 14 Video: Class
Teamwork: Planning
 
Oct 15   Journal: Project Analysis
Oct 16    
Week 8
Interfaces and
Flexibility
Liskov Substitution Principle
Respecting Levels of Abstraction
Java: Reflection
Java: Lambda Expressions
Oct 17 Example: Reflection
Video: Class
Project: Cell Society, Plan/Test
Oct 18    
Oct 19 Exercise: Reflection  
Oct 20    
Oct 21 Teamwork Journal: Testing Reflection
Oct 22    
Oct 23    
Week 9
Design Smells
Java Interfaces Are So Very Cool
From STUPID to SOLID
Make an Immutable Object in Java
Why Getters and Setters are Evil
Oct 24 Example: Immutability Encapsulation
Video: Class
Project: Cell Society, Basic
Oct 25    
Oct 26 Code and Testing Review  
Oct 27    
Oct 28 Teamwork: Code Review  
Oct 29   Journal: Teamwork Reflection
Oct 30   Project: Cell Society, Change
Final Project: Putting it All Together
Week 10
APIs and
Project Management
API Design
Agile Project Management
Introducing OO Frameworks
Teamwork is an Individual Skill
Oct 31 Video: Class  
Nov 01    
Nov 02 Team Meeting  
Nov 03    
Nov 04 Team exercises with DUI! Journal: Project Analysis
Nov 05    
Nov 06    
Week 11
Design Patterns and
Data Driven Design
Introduction to Design Patterns
Composition vs. Inheritance
The Magic of Data Driven Design
Gitlab: Always Start with an Issue
Nov 07 Java Time and Dates API
Video: Design Patterns
Project: OOGA, Plan
Nov 08    
Nov 09 Teamwork: Agile Planning
Video: Class
 
Nov 10    
Nov 11 Teamwork Journal: Ethics (Professional)
Nov 12    
Nov 13    
Week 12
Logging and
More on Patterns
Dependency Injection Pattern
Java Logging Best Practices
Refactoring to Patterns
Foundation Patterns
Nov 14 Ethics: GitHub CoPilot
Exercise: Design Patterns
Class: Video
Project: OOGA, Test
Nov 15    
Nov 16 Teamwork: Stand Up,
Retrospective,
and Planning
Class: Video
 
Nov 17    
Nov 18 Ethics: Log4j Exploit
Example: Bins (with Logging)
Class: Video
Journal: Ethics (Applied)
Nov 19    
Nov 20    
Week 13
Break!
 
Nov 21 THANKSGIVING (no class) Project: OOGA, Sprint 1
and Presentation Video
Nov 22    
Nov 23 THANKSGIVING (no class)  
Nov 24    
Nov 25 THANKSGIVING (no class)  
Nov 26    
Nov 27    
Week 14
Design for
Programming
Small Pieces, Loosely Coupled
Refactoring Loops with Pipelines
Maven: A Build Automation Tool
Towards Ethics by Default
Nov 28 Unix, Streams, and Maven
Example: WordCloud (with Streams)
Class: Video
 
Nov 29    
Nov 30 Teamwork: Stand Up,
Retrospective,
and Planning
 
Dec 01    
Dec 02 Ethics: Accessibility
API Review
Class: Video
Journal: Improvement Reflection
Dec 03    
Dec 04    
Week 15
Beyond Objects
Four Pillars of OOP
Software Engineering at Google
Future of Java at 25
Do Programmers Need a Code of Conduct
Dec 05 Future of Java
General Software Design
Example: Groovy language
Project: OOGA, Sprint 2
and Presentation Video
Dec 06    
Dec 07 Teamwork: Stand Up,
Retrospective,
and Planning
 
Dec 08    
Dec 09 Ethics: Google v. Oracle Ruling
Demo Advice
 
Dec 10   Journal: Teamwork Reflection
Dec 11    
Week 16
Finals Week
True Programmers Never Stop Learning
Dark Side of Software Development
Defending Democracy from Big Tech
The API-First World
Dec 12   Project: OOGA, Complete
Dec 13    
Dec 14    
Dec 15   Project: OOGA, Demo, by 12pm
Dec 16    
Dec 17    
Dec 18   Journal: Final Analysis