Chapter 9. Objects with Data
Using the simple syntax introduced in Chapter 8, you have class methods, (multiple) inheritance, overriding, and extending. You’ve been able to factor out common code and provide a way to reuse implementations with variations. This is at the core of what objects provide, but objects also provide instance data, which we haven’t even begun to cover.
A Horse Is a Horse, of Course of Course—or Is It?
Let’s
look at the code used in Chapter 8 for the
Animal classes and Horse
classes:
{ package Animal;
sub speak {
my $class = shift;
print "a $class goes ", $class->sound, "!\n"
}
}
{ package Horse;
@ISA = qw(Animal);
sub sound { "neigh" }
}This lets you invoke Horse->speak to ripple
upward to Animal::speak, calling back to
Horse::sound to get the specific sound, and the
output of:
a Horse goes neigh!
But all Horse objects would have to be absolutely
identical. If you add a subroutine, all horses automatically share
it. That’s great for making horses identical, but
how do you capture the properties of an individual horse? For
example, suppose you want to give your horse a name.
There’s got to be a way to keep its name separate
from those of other horses.
You can do so by establishing an instance. An instance is generally created by a class, much like a car is created by a car factory. An instance will have associated properties, called instance variables (or member variables, if you come from a C++ or Java background). An instance has a unique identity (like the serial ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access