True to our roots - we are engineers in the trenches.
home | search | contact us  
Agile/XP OO Mentoring Training Embedded
Resources
Customers About Us
articles bookstore websites downloads members fun
Proven strategies for maintaining and enhancing legacy code!

Working Effectively
with
Legacy Code

Learn more

Winner of the 2002 Jolt Award!

Agile Software Development: Principles, Patterns, and Practices.
Click here to learn more.

A pragmatic view of UML!

UML for Java Programmers.
Click here to learn more.

Patterns

  The Humble Dialog Box
Michael Feathers
2002
How do you create a dialog box test first and keep it focused on what it needs to do? This article shows an interesting technique.
  Emergent Optimization in Test Driven Design
Michael Feathers
XP2002, 2001
This paper by Michael Feathers was accepted at the XP2002 conference in Sardinia. It describes how test driven development can lead seamlessly to runtime optimization in some cases and readiness for optimization in others.
  Singleton And Monostate
Robert C. Martin
A chapter from Principles, Patterns, and Practices of Agile Software Development, Robert C. Martin, Prentice Hall., 2002
This article compares and constrasts the Singleton and Monostate Design patterns. It also discusses their relative advantages and disadvantages, and gives advice on when and how to use them.
  Proxy and Stairway to Heaven
Robert C. Martin
A chapter from Principles, Patterns, and Practices of Agile Software Development, Robert C. Martin, Prentice Hall., 2002
This article examines how to use the Proxy, Stairway to Heaven, and Facade patterns to access databases.
  Evolution of an Inside-Outside Test
James W. Grenning
2002
This article shows the evolution of a test. It shows how some tests can get started by having detailed internal knowledge of the implementation, but ends by refactoring the test to only know the interface to the class being tested.
  Working Effectively with Legacy Code
Michael Feathers
objectmentor.com, 2002
Most projects have a large amount of legacy code. Typically, it is awkward to deal with. This article contains concrete advice that you can use to prepare legacy code for refactoring or enhancement
  The Visitor Family of Design Patterns
Robert C. Martin
This is a rough chapter from The Principles, Patterns, and Practices of Agile Software Development, Robert C. Martin, Prentice Hall , 2002
This article describes the Visitor pattern and several related patterns such as Decorator, Acyclic Visitor, and Extension Object. Several case studies are presented to show how these patterns work, and what purposes they serve.
  Inheritance vs. Delegation
Robert C. Martin
This is a rough chapter from The Principles, Patterns, and Practices of Agile Software Development, Robert C. Martin, Prentice Hall , 2002
This article uses two design patterns, Template Method, and Strategy, to describe the tension between inheritance and delegation. It talks about the costs and benefits of both approaches, and tries to give the reader a better understanding of when to use each.
  The ‘Self’-Shunt Unit Testing Pattern
Michael Feathers
objectmentor.com, 2001
 
  Principles and Patterns
Robert C. Martin
objectmentor.com, 2000
"What goes wrong with software?" A brief explanation of the ten Principles of OOD with supporting patterns.
  Walking through a UML Design
Robert C. Martin , James W. Newkirk
1998
This article walks the reader through a fairly complex UML design. Many design principles and patterns are described.
  Plop Plop, Fizz Fizz
Robert C. Martin
PLoP94, 1994
Journal of Object Oriented Programming, late 1994. A Review of PLoP 94
  PLoP94 Submission
Robert C. Martin
PLoP94, 1994
Several Design Patterns, Iterable Container, Member Container, Three Level Finite State Machine, Abstract Client, Write a Loop Once. PLoP-94, Pattern Languages of Program Design I
  The Liskov Substitution Principle
Robert C. Martin
C++ Report, 1996
How do you know if you are using inheritance correctly? This article describes Barbara Liskov's famous Substitution Principles. It shows the principle in action through several demonstrations.
  The Interface Segregation Principle
Robert C. Martin
C++ Report, 1996
Fat class interfaces are all too common. This article describes a principle that helps designers partition fat classes into multiple interfaces.
  Design Patterns for Dealing with Dual Inheritance Hierarchies in C++
Robert C. Martin
C++ Report, 1997
Dual inheritance hierarchies are common in object oriented designs. Yet they can cause nasty downcasting problems. This article describes some design patterns that help.
  The Dependency Inversion Principle
Robert C. Martin
C++ Report, 1996
I first stumbled on this principle when Jim Newkirk and I were arranging the source code directories of a C++ project. We realized that we could make the directories that contained detailed code depend upon the directories that contained abstract classes. This seemed like an inversion to me, so I coined the name "Dependency Inversion".
  Cross Casting: The Capsule Pattern
Robert C. Martin
C++ Report, 1997
In 1996 and 1997 I was very interested in how to use dynamic_cast in C++. The notion of casting a pointer or reference to an object "up" or "down" was well known. But casting "across" the hierarchy was new to me.
  Acyclic Visitor
Robert C. Martin
PLoP, PLoPD, 1996
(Submission to PLoPD-96) A design pattern that makes use of dynamic_cast in order to eliminate dependency cycles in Visitors.
  Private Interface
James W. Newkirk
objectmentor.com, 1997
A design pattern for controlling visibility
  Taskmaster: An Architecture Pattern for GUI Applications
Robert C. Martin , James W. Newkirk , Bhama Rao
C++ Report, 1997
This is a description of an architecture pattern used on a major GUI development in C++.
  Granularity
Robert C. Martin
C++ Report, 1996
(An article about large scale OO structure) Discusses the Reuse/Release Equivalency Principle, The Common Closure Principle, The Common Reuse Principle, and the Acylclic Dependencies Principle.
  Oh what a relief it is.
Robert C. Martin
C++ Report, 1996
A review of PLoP95
  The Open Closed Principle
Robert C. Martin
C++ Report, 1996
Probably the most important of all the OOD principles. This article is an explanation and demonstration of Bertrand Meyer's famous principle.
  Button Button, Whose got the Button?
Robert C. Martin
ROAD, 1995
As an attempt to gain headway in our never ending arguments about OOD on comp.object, it was suggested that we try to design a simple application. We decided to design the software that read the status of a button and used it to turn on a light. The debate raged for months.
  Abstract Classes and Pure Virtual Functions
Robert C. Martin ,
C++ Report, 1992
This is the first article I ever write for a professional journal. Stan Lippman was the editor of the C++ Report at the time. I nicknamed him Stan "The Merciless". His poigniant edits did me more good than could repay.

This article discusses why and when to use abstract classes. There are hints of the design principles to come.
privacy statement | terms of use © Copyright 1994 - 2005 Object Mentor, Inc.