CompSci 308
Spring 2019
Advanced 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 Lab Readings Due
Game - Introduction and Basic Design Principles
Jan 10
Week 1
Course Introduction
What is GIT?
Video
GITing Started Clean Code
OO in One Sentence

OpenJFX/JavaFX Tutorial
Guide to Versioning Systems
Plan, Sun
Jan 15
Week 2
Refactoring and Code Smells
Example: Bins
Video
Finding Classes Code Smells
Decomposition
Refactoring: Extract Class
Your Manual to Markdown
Complete, Sun
Simulation - Basic Teamwork and Recognizing Good Design
Jan 22
Week 3
Inheritance
Example: Roulette
Video
RPS
Team Meeting
Open Closed Principle
Inheritance
Replace Conditional with Polymorphism
Commonality Analysis
Pre-Meeting Questions, Wed
Team Contract, Thu
Analysis, Fri
Plan, Sun
Jan 29
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

Feb 5
Week 5
Exceptions
Interfaces
Example: Encapsulation
Video
Code Review Why Java Interfaces Are So Very Cool
Designing with Interfaces
Designing with Exceptions
Write Better Code With OOP Concepts
Basic, Mon
Team Sprint Report, Tue
Parser - Advanced Teamwork and Design Strategies
Feb 12
Week 6
Design Patterns
Designing APIs
Team Meeting Josh Bloch on API Design
Introduction to Design Patterns
Refactoring to Patterns
Model-View-Controller (MVC)
Complete, Mon
Pre-Meeting Questions, Wed
Team Contract, Thu
Analysis, Fri
Feb 19
Week 7
Modules
Example: Browser Revisited
Video

GIT: Undoing Changes
Longest Method Review
Peer API Review
Java 9 Modules
Regular Expressions
JavaFX Properties and Bindings
Why Lamba Expressions
Plan, Mon
Feb 26
Week 8
"Advanced" Java
Example: "Advanced"
Video
"Advanced" Refactoring Reflection
Lambda Expressions
Generics
Annotations
Basic, Wed
Team Report, Thu
Mar 5
Week 9
SOLID Design
Video
Code Review From STUPID to SOLID
Foundation Patterns
Big Ball of Mud
Complete, Fri
Mar 12 SPRING BREAK NO Lab    
Final - Putting it All Together
Mar 19
Week 11
What is a Framework?
What is a Game? (and as a picture)
Agile Project Management
Video
Team Meeting Designing a Document Editor
Introducing OO Frameworks
The Structure of Games
Scrum Guide
Pre-Meeting Questions, Wed
Team Choice
, Thu
Team Contract, Thu
Analysis, Fri
Mar 26
Week 12
"Advanced" Design
No Video
Team Meeting Composition vs. Inheritance
Design to Accommodate Change
The Magic of Data Driven Design
Dependency Injection Pattern
Plan, Thu
Apr 2
Week 13
Agile Project Design
Example: Testing
Video
GIT: Issues and Tags
TDD Experiment
Extreme Programming Practices
Agile Approach to Software Architecture
JUnit Test Infected
 
Apr 9
Week 14
Maven
Streams
Example: WordCloud
Video
Midpoint Demo Build Automation with Maven
Functional Programming in Java
Refactoring Loops to Pipelines
Basic, Tue
Team Sprint Report, Wed
Demo, Thu (in class)
Apr 16
Week 15
Open Source Software
Command Line Principles
Cloud Software
Video
Docker and AWS
Code Review
Small Pieces, Loosely Coupled
Cathedral and Bazaar
Evolution in Software Delivery
 
Apr 23
Week 16
Security
Professionalism

NO Lab Secure Coding Practices in Java
Do Programmers Need a Code of Conduct
True Programmers Never Stop Learning
Complete, Sun
Friday
May 3
2-5pm
Final Project Demo     Final Demo, Wed (in class)
Analysis, Sun