Refactoring Object Oriented Designs

Duration: 4 days

Level: Intermediate to Advanced

Target Audience: Object Oriented Software Developers, Programmers, Programmer Analysts

Goals: Learn object oriented principles and techniques to improve your object oriented designs.

Prerequisites: Knowledge of C#, Java or Smalltalk

Outcomes: Attendees will be able to develop software with improved quality and maintainability.

Cost: $1995 CDN

Register:
May 23 - May 26, 2006
Jun 19 - Jun 22, 2006
Jul 31 - Aug 3, 2006
Aug 28 - Aug 31, 2006

Description: The whole point of object oriented programming is to create software that is easy to modify and extend. In order to achieve this, we first have to look at why code tends to rot. We have to be able to recognize the code smells that indicate that code rot is occuring. Once we've detected the code rot, we have to apply object oriented principles to refactor the code and eliminate the problem. This course teaches you how, when, and why to refactor.

You'll learn the design principles that lead to good object oriented designs, how to recognize poor designs, how to explain why these designs are poor, and how to refactor them to improve the design.

This course focuses on test driven design to improve software designs. We'll show you how to use a unit testing framework (JUnit, NUnit or SUnit) and how to develop applications test first.

Since the best way to learn these techniques is by using them, the course is organized as 50% lecture and 50% hands-on exercises.  These exercises are non-trivial. They have the students develop a real application test first and refactor the application as they go. Students can use Java, Smalltalk, or C# for the exercises.

Topics:
  • Signs of code rot
  • Code smells
  • Test Driven Design
  • Automated Unit Testing
  • Coupling and Cohesion
  • Refactoring to improve design
  • Delegation of Responsibity
  • Open Closed Principle
  • Local Change/Local Effect Principle
  • Law of Demeter
  • Layered Design
  • Dependency Inversion Principle
  • Inversion of Control
  • Types and Objects
  • Liskov Substitution Principle
  • Covariance and Contravariance
  • The Fragile Base Class Problem