1. Introduction

It’s impossible to delegate responsibility for implementing a method without a specification.

The specification acts as a contract:

Many of the nastiest bugs in programs arise because of misunderstandings about behavior at interfaces.

Until now, we were concerned only with whether a dependence existed. Here, we are investigating the question of what form the dependence should take.

By exposing only the specification of a procedure, its clients are less dependent on it, and therefore less likely to need changing when the procedure changes.