Learning Perl Objects, References amp;amp; Modules [Electronic resources] نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

Learning Perl Objects, References amp;amp; Modules [Electronic resources] - نسخه متنی

Randal L. Schwartz

| نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
لیست موضوعات
توضیحات
افزودن یادداشت جدید














9.1 A Horse Is a Horse, of Course of Courseor 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
number of a registered horse), shared properties (the color and
talents of the horse), and common behavior (i.e., pulling the reins
back tells the horse to
stop).

In Perl, an instance must be a reference
to one of the built-in types. Start with the simplest reference that
can hold a horse's name: a scalar
reference:[1]

[1] The simplest, but rarely used in real code
for reasons you'll see shortly


my $name = "Mr. Ed";
my $tv_horse = \$name;

Now $tv_horse is a reference to what will be the
instance-specific data (the name). The final step in turning this
into a real instance involves a special operator called
bless:

bless $tv_horse, "Horse";

The bless
operator follows the reference to find what variable it points
toin this case the scalar $name. Then it
"blesses" that variable, turning
$tv_horse into an object a
Horse object, in fact. (Imagine that a little
sticky-note that says Horse is now attached to
$name.)

At this point,
$tv_horse is an instance of
Horse.[2] That is,
it's a specific horse. The reference is otherwise
unchanged and can still be used with traditional dereferencing
operators.[3]

[2] Actually,
$tv_horse points to the object, but in common
terms, you nearly always deal with objects by references to those
objects. Hence, it's simpler to say that
$tv_horse is the horse, not "the
thing that $tv_horse is
referencing."


[3] Although doing so outside the class is a
bad idea, as you'll see later.




/ 199