>>>>> "Brad" == Brad Carlson <[EMAIL PROTECTED]> writes:

Brad> Just to clarify, the only reason I don't need a new() method in the
Brad> subclass is because any class-specific logic is contained in the _init()
Brad> method for both parent and subclass.  If there were no _init() method,
Brad> then both classes would have a new(), right?

Yes.  You can either put your per-class initialization into ->new,
and use SUPER::new for parent classes, or have an _init, which your
most-parent-class must remember to call.  The latter is a Smalltalk-ish
standard, where "Object class"[1] has something like:

        new

        ^self basicNew initialize

and initialize[2] looks like

        initialize

        ^self

Then every derived class that wants additional hooks does:

        initialize

        super initialize.
        "my code here."
        ^self

In Perl terms, this would look like:

        sub new {
          my $class = shift;
          my $self = bless [EMAIL PROTECTED], $class;
          return $self->initialize; # and return this
        }

        sub initialize { # base definition
          my $self = shift;
          return $self;
        }

        sub initialize { # derived definition
          my $self = shift;
          $self->SUPER::initialize;
          $self->{extra} = "thing";
          return $self;
        }

By the way, I really really recommend that people who are doing
serious OO get some Smalltalk experience.  Smalltalk got a *lot*
of things right.  Free implementations of Smalltalk for all platforms
are available at <www.squeak.org>, and there's a wealth of both free
and commercial publications about learning Smalltalk.

[1] Actually, it's in "Behavior class".
[2] Defined in ProtoObject, the base class for Object

-- 
Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095
<merlyn@stonehenge.com> <URL:http://www.stonehenge.com/merlyn/>
Perl/Unix/security consulting, Technical writing, Comedy, etc. etc.
See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training!

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to