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

pq
 2012-02-21 18:01
#156264 #156264
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
was willst du mir damit sagen? habe ich irgendwo behauptet, dass geerbte methoden nicht überschrieben werden können?

du unterstützt also die aussage, dass man in der klasse selbst überall direkt auf die attribute zugreifen kann/sollte?

hier die klassen A und B mit dem accessor foo. der accessor foo soll in der erbenden klasse B immer foo um eins inkrementiert anzeigen.

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
29
30
package A;
sub new { 
    my ($class, %args) = @_; 
    bless \%args, $class;
}

sub foo {
    return shift->{foo}
}

sub printFoo {
    my ($self) = @_;

    # hier wirdleider  direkt auf foo zugegriffen statt über den accessor!
    my $foo = $self->{foo};
    say "foo is $foo";
}

package B;
@ISA = qw/ A /;

sub foo {
    my ($self) = @_;
    return $self->foo() + 1
}

package main;

my $B = B->new( foo => 23 );
$B->printFoo;


ich würde also gerne als ausgabe 24 bekommen.
da printFoo aus klasse A sich aber nicht an die accesors hält, bekomme ich die ausgabe 23.
daher sollte auch in der klasse selbst immer der accessor verwendent werden.

hier in diesem fall ist B gezwungen, auch noch die methode printFoo zu überschreiben. unschön!
Last edited: 2012-02-21 18:03:13 +0100 (CET)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem

View full thread OOP, erste Schritte