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?
Video


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
Video
Refactoring Hangman OO in One Sentence
Decomposition
Refactoring: Extract Class
Complete, Sun
CellSociety - Basic Teamwork and Recognizing Good Design
Sep 11
Week 3
Inheritance
Example: Roulette
Video
NO LAB Open Closed Principle
Inheritance
Replace Conditional with Polymorphism
Commonality Analysis
Team Contract, Thu
Analysis, Fri
Plan, Sun
Sep 18
Week 4
GUIs
Example: Browser
Video
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
Interfaces
Exceptions
Example: Encapsulation
Video
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
Video
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)
Video
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"
Video
"Advanced" Refactoring Reflection
Lambda Expressions
Generics
Annotations
Basic, Sun
Oct 23
Week 9
SOLID Design
Video
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
Video
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
Video
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
Video
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
Maven
Streams
Example: WordCloud
Video
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
Professionalism
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