A final gloss on the Megalith
class would be to
add accessor methods
to
allow controlled access to the values stored within each object. That
is, the example code listed above contains code that explicitly
accesses member variables within the object:
print "Megalith Name: $megalith->{name}\n";
This may cause problems if the internal structure of the
Megalith
object alters in some way. Also, if you
write $megalith-
>{nme}
by
mistake, no errors or warnings will be generated. Defining an
accessor method called getName( )
, such as:
### Returns the name of the megalith sub getName { my ( $self ) = @_; return $self->{name}; }
makes the code arguably more readable:
print "Megalith Name: " . $megalith->getName( ) . "\n";
and also ensures the correctness of the application code, since the actual logic is migrated, once again, into the object.