Thread OOP, erste Schritte (15 answers)
Opened by hlubenow at 2012-02-21 16:20

rosti
 2012-02-21 18:48
#156265 #156265
User since
2011-03-19
3211 Artikel
BenutzerIn
[Homepage]
user image
Quote
da printFoo aus klasse A sich aber nicht an die accesors hält, bekomme ich die ausgabe 23.


Bei mir funktioniert das mit Accessor einwandfrei, ohne printFoo() überschreiben zu müssen.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package A;
sub new { 
    my ($class, %args) = @_; 
    bless \%args, $class;
}

# access foo
sub _foo {
    return shift->{foo};
}

sub printFoo {
    my $self = shift;
    return $self->_foo;
}

package B;
@B::ISA = qw/ A /;

# access foo OVERLOAD
sub _foo {
    return shift->{foo} + 1;
}

package main;

my $ob = B->new( foo => 23 );
print $ob->printFoo; # A: 23, B: 24


PS: Ja, in der eigenen Klasse darf ich auf interne Attribute zugreifen. Ich habe Klassen in denen sehr, sehr viele Methoden notiert sind, unvorstellbar, für jeden Attributzugriff einen extra Accessor haben zu müssen.

Die Empfehlung aus Eric Foster Johnson "Perl Module" bereits im Konstruktor alle Attribute (auch mit undef) namentlich zu notieren, hat sich auch in meiner Praxis immer wieder bewährt und das habe ich in einer anderen Umgebung oft sehr schmerzlich vermisst.

View full thread OOP, erste Schritte