3.6 Encapsulation
The
first pillar of object-oriented programming is encapsulation. The
idea behind encapsulation is that you want to keep each type or class
discreet and self-contained, so you can change the implementation of
one class without affecting any other class.
A class that provides a method that other classes can use is called a
server.
A class that uses that method is called a
client.
Encapsulation allows you to change the details of how a server does
its work without breaking anything in the implementation of the
client.
This is accomplished by drawing a bright and shining line between the
public interface of a
class and its
private
implementation. The public interface is a contract issued
by your class that says, "I promise to be able to do
this work." Specifically, you'll
see that a public interface says, "call this method,
with these parameters, and I'll do this work, and
return this value." A client can rely on a public
interface not to change. If the public interface does change, then
the client must be recompiled and perhaps redesigned.
On the other hand, the private implementation is, as its name
implies, private to the server. The designer of the server class is
free to change how it does the work promised in
the public interface, so long as it continues to fulfill the terms of
its implicit contract: it must take the given parameters, do the
promised work, and return the promised value.
For example, you might have a public method that promises as follows:
"Give me a dollar amount and a number of years, and
I'll return the net present value."
How you compute that amount is your business; if a client supplies a
dollar amount and a number of years, you must return the net present
value. You might implement that initially by keeping a table of
values. You might change that at a later time to compute the value
using the appropriate algebra. That is your business, and it does not
affect the client. As long as you don't change the
public interface (i.e., as long as you don't change
the number or type of parameters expected or change the type of the
return value) your clients will not break while you change the
implementation.
|