Access
control in C++ is not an object-oriented feature, but it gives valuable control
to the creator of a class. The users of the class can clearly see exactly what
they can use and what to ignore. More important, though, is the ability to
ensure that no user becomes dependent on any part of the underlying
implementation of a class. If you know this as the creator of the class, you
can change the underlying implementation with the knowledge that no client
programmer will be affected by the changes because they can’t access that
part of the class.
When
you have the ability to change the underlying implementation, you can not only
improve your design at
some later time, but you also have the freedom to make mistakes.
No matter how carefully you plan and design, you’ll make mistakes.
Knowing that it’s relatively safe to make these mistakes means
you’ll be more experimental, you’ll learn faster, and you’ll
finish your project sooner.
The
public interface to a class is what the user
does
see, so that is the most important part of the class to get “right”
during analysis and design. But even that allows you some leeway for change. If
you don’t get the interface right the first time, you can
add
more functions,
as long as you don’t remove any that client programmers have already used
in their code.