Intensive Handson Principles, Patterns and Practices
of Object-Oriented Programming in Java

Course Outline

Day 1

Coding for Readability and Maintainability

The Problems
The Objectives
Forms of Software Rot
Attributes of a Good Design
Clean Code Qualities
Professional Responsibilities
Automated testing, TDD and Refactoring Practices Review
Refactoring

 

Exercise

 

Single Responsibility Principle

Problem addressed by SRP
Example design violating SRP
Example design conforming to SRP
Patterns built on SRP

 

Exercise

 
Day 2

Dependency Inversion Principle

Problems with Procedural Programming
Object-Oriented Programming
Problem addressed by DIP
The Dependency Inversion Principle
Dependency Inversion Heuristics
When is DIP appropriate/inappropriate
Example design violating DIP
Example designs conforming to DIP

 

Exercise

 

Open/Closed Principle

Problem addressed by OCP
The Open/Closed Principle
When is OCP appropriate/inappropriate
Several Example designs violating OCP
Several example designs conforming to OCP

 

Exercise

 

Liskov Substitution Principle

Problem addressed by LSP
The Liskov Substitution Principle
Example designs violating LSP
Example designs conforming to LSP
Relationship OCP/LSP
When is “instance of is” not an LSP problem

 

Exercise

 
Day 3

Interface Segregation

Problem addressed by ISP
The Interface Segregation Principle
Example designs violating ISP
Example designs conforming to ISP
When is ISP appropriate/inappropriate

 

Exercise

 

Law of Demeter

Problem addressed by LoD
Example design violating LoD
Example designs conforming to LoD
When is LoD appropriate/inappropriate
Pro/Con discussion

 

Exercise

 

Practices That Support the Principles

Simple Design
Automated Testing
Test-Driven Development
Refactoring
Teamwork
Pair Programming
Collective Ownership
Quick Design Sessions
Continuous Integration
Code/Design Reviews

 

Summary

Clean code
Professional Responsibilities
SOLID Principles
Packaging Principles