CompSci 308
Spring 2021
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 Topics Examples Lab Readings Due
Basic Design Principles
1 - Jan 21 Course Overview
Video
Bounce GITing Started Clean Code
OO in One Sentence
JavaFX
GIT Commit Best Practices
Journal - CompSci Autobiograhpy, Sat
Breakout - Plan, Sun
2 - Jan 26 Refactoring and Code Smells
Tue Video
Thu Video
Bins Decomposition Code Smells
Everything is an Object
Refactoring: Extract Class
Single Responsibility Principle
Journal - Reflection, Thu
Breakout - Complete, Sun
Design Using Abstractions
3 - Feb 2
Abstraction: Inheritance and Polymorphism
Tue Video
Thu Video
Roulette Team Meeting Open Closed Principle
Four Pillars of OOP
Inheritance
Replace Conditional with Polymorphism
Cell Society - Preparation, Wed
Cell Society - Team Contract, Thu
Journal - Project Analysis, Fri
Cell Society - Plan, Sun
4 - Feb 9
Class Variations: Enums, Generics
GUIs
Tue Video
Thu Video
Spike GIT for Teams GIT ready: Branching and Merging
JavaFX GUI Resources
Exceptions and  Enumerated Types
Managing Group Projects
Journal - Reflection, Thu
Cell Society - Basic, Sun
5 - Feb 16 Exceptions
Encapsulation
Tue: Video
Encapsulation Code Review Liskov Substitution Principle
Write Better Code With OOP Concepts
Why Java Interfaces Are So Very Cool
Designing with Exceptions
Journal - Teamwork Analysis, Fri
Cell Society - Complete, Sun
Design Using APIs and Testing
6 - Feb 23
Designing APIs
Tue: Video
Thu: Video
Java Collections
Java Time and Dates
Team Meeting Josh Bloch on API Design
Model-View-Controller (MVC)
Designing with Interfaces
Design by Contract
SLogo - Preparation, Wed
SLogo - Team Contract, Thu
Journal - Project Analysis, Fri
7 - Mar 2
Design Patterns
TDD and Unit Testing
Tue: Video
Thu: Video
Spike Testing Introduction to Design Patterns
Dependency Inversion Principle
JUnit Test Infected
Managing Group Relationships
SLogo - Plan, Tue
Journal - Positive Outcome, Thu
8 - Mar 9
NO CLASS: Wellness Break
Thu: Video
Advanced
Encapsulation (revised)
Advanced Reflection
Why Lamba Expressions
Lambda Expressions
User Interface Testing with TestFX
Journal - Reflection, Thu
SLogo - Basic, Fri
9 - Mar 16 Design Smells
Tue: Video
Thu: Video
  Code Review From STUPID to SOLID
Refactoring to Patterns
Big Ball of Mud
Foundation Patterns
Journal - Teamwork Analysis, Fri
SLogo - Complete, Sun
Putting it All Together
10 - Mar 23
Agile Project Management
Agile Project Design
Tue: Video
Thu: Video
  Team Meeting Designing a Document Editor
Introducing OO Frameworks
Scrum Guide
Extreme Programming Practices
OOGA - Team Contract, Thu
Journal - Project Analysis, Fri
11 - Mar 30
"Advanced" Design
Tue: Video
Thu: Video
  Planning Game
Team Meeting
Progress Presentation
Composition vs. Inheritance
Magic of Data Driven Design
Dependency Injection Pattern
UI Software Architecture
OOGA - Plan, Thu
Journal - Reflection, Fri
12 - Apr 6
Ethics and Professionalism
Google v. Oracle Ruling
Ethics: Guest Video by
Sarah Rispin Sedlak, J.D., Ethical Technology Program
Ethics: My Video
Streams: Video
Advanced (revised) Planning Game
Progress Presentation
ACM Code of Ethics
Towards Ethics By Default
Functional Programming in Java
Refactoring Loops with Pipelines
OOGA - Sprint #1, Thu
Journal - Ethics, Fri
13 - Apr 13
Command Line Principles
Open Source Software
Tue: Video
  Planning Game
Team Meeting
Progress Presentation
Small Pieces, Loosely Coupled
Cathedral and Bazaar
Agile Approach to Architecture
Evolution in Software Delivery
Team Midpoint Report, Tue
OOGA - Sprint #2, Thu
Journal - Improvement, Fri
14 - Apr 20
General Software Design
Tue: Video

    Four Pillars of OOP
Troubleshooting vs Debugging
Java at 25
True Programmers Never Stop Learning
Journal - Teamwork Analysis, Fri
OOGA - Complete, Sun
Week of
Apr 26
Final Project Demos       OOGA - Demo, Thu
Journal - Project Analysis, Fri