Java Reference
In-Depth Information
private: int dieValue
public: void setValue(int)
int getValue()
class interface
class Die
FIGURE 6.1:
Interface of a class.
Good software design practices call for all instance variables to be defined as
private
. This will hide the internal data structure of a class from the rest of the
world. As a consequence, this structure can change without the rest of the world be-
ing affected. A second advantage is that the integrity of the data is better guarded
because only the methods inside the class have access to the
private
data.
Figure 6.1 shows a pictorial representation of the
Die
class. As a general rule, all variables
should be defined as
private
. In other words, the variables should be hidden from the
outside world. The variables can be indirectly manipulated through the
interface
of the
class, that is, the class's public methods.
Note that the variable
dieValue
is the first variable in this topic that is defined without
using the
static
keyword. The reason is that the variable belongs to each object of the
Die
class. In other words, every
Die
instance will have its own variable
dieValue
.Ifwecreate
100 dice, then 100 variables
dieValue
will be created, one for every object.
Instance variables can have a different value for every object. They are defined
without using the
static
keyword. Conversely,
static
variables are associated with
the whole class. A single instance of a
static
variable is created regardless of the
number of objects that are created from the class. Memory for a
static
variable is
created even when there are no instances (i.e., objects) of the class.
The
getValue
and
setValue
methods are called
getter
and
setter
methods, respectively.
Since the variable
dieValue
is private, it can be indirectly accessed through them. Once
Alfred Aho, a major contributor to the programming languages field, said during a lecture
that getter/setter methods should not be used because they circumvent the access control
rules and allow access to private variables. However, when these methods do more than just
return the value and set the value of a variable, respectively, their inclusion is warranted and
convenient. Through this textbook, we will try to avoid the use of getter/setter methods
when possible. An improved implementation of the
Die
class that does not provide direct
access to the private variable follows.
class
Die
{
private int
dieValue ;
public void
rollDie()
{