CompSci 308
Fall 2018
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.

Date Topic Recitation Readings Due
Game - Introduction and Basic Design Principles
Aug 28
Week 1
Course Introduction
What is GIT?

GITing Started Be a Better Programmer
Code Smells
JavaFX Architecture
Guide to Versioning Systems
Plan, Sat
Sep 4
Week 2
Refactoring and Code Smells
Example: Bins
Refactoring Hangman OO in One Sentence
Refactoring: Extract Class
Complete, Sun
CellSociety - Basic Teamwork and Recognizing Good Design
Sep 11
Week 3
Example: Roulette
NO LAB Open Closed Principle
Replace Conditional with Polymorphism
Commonality Analysis
Team Contract, Thu
Analysis, Fri
Plan, Sun
Sep 18
Week 4
Example: Browser
GIT for Teams
Inheritance Review
GIT ready: Branching and Merging
JavaFX GUI Resources
Enumerated Types
Isolating Locale-Specific Data
Basic, Sun
Sep 25
Week 5
Example: Encapsulation
Code Review Why Java Interfaces Are So Very Cool
Designing with Interfaces
Designing with Exceptions
Why Getters and Setters are Evil
Team Sprint Report, Tue
Complete, Sun
SLogo - Advanced Teamwork and Design Strategies
Oct 2
Week 6
Design Patterns
Designing APIs
Pre-meeting Questions
Team Meeting
Josh Bloch on API Design
Introduction to Design Patterns
Refactoring to Patterns
Model-View-Controller (MVC)
Team Contract, Thu
Analysis, Fri
Oct 9
Week 7
No class (FALL BREAK)
GIT: Undoing Changes
Peer API Review
Team Meeting
Java 9 Modules
Regular Expressions
JavaFX Properties and Bindings
Why Lamba Expressions
Plan, Fri
Oct 16
Week 8
"Advanced" Java
Example: "Advanced"
"Advanced" Refactoring Reflection
Lambda Expressions
Basic, Sun
Oct 23
Week 9
SOLID Design
Code Review From STUPID to SOLID
Foundation Patterns
Big Ball of Mud
Team Report, Tue
Complete, Sun
VOOGASalad - Final Project: Putting it All Together
Oct 30
Week 10
What is a Framework?
What is a Game?
(and as a picture)
Agile Project Management
Pre-meeting Questions
Design a Game
Team Meeting
Designing a Document Editor
Introducing OO Frameworks
The Structure of Games
Scrum Guide
Team Choice, Thu
Team Contract, Thu
Analysis, Fri
Nov 6
Week 11
"Advanced" Design
GIT: Issues and Tags
Team Meeting
Composition vs. Inheritance
Design to Accommodate Change
The Magic of Data Driven Design
Dependency Injection Pattern
Plan, Fri
Nov 13
Week 12
Agile Project Design
Example: Testing
TDD Experiment
Peer API Review
Extreme Programming Practices
Agile Approach to Software Architecture
JUnit Test Infected
Nov 20
Week 13
No class THANKSGIVING   Basic, Tue
Nov 27
Week 14
Example: WordCloud
Mid-Point Demo Build Automation with Maven
Functional Programming in Java
Refactoring Loops to Pipelines
GIT Submodules
Team Sprint Report, Tue
Demo, Thu (in class)
Dec 4
Week 15
Open Source Software
Command Line Principles
Java Security
User Testing
Code Review
Small Pieces, Loosely Coupled
Cathedral and Bazaar
Secure Coding Practices in Java
Do Programmers Need a Code of Conduct
True Programmers Never Stop Learning
Complete, Sun
Dec 12
Wed 7-10pm
Final Project Demo     Final Demo, Wed
Analysis, Sun