Leser: 27
1 2 3 4 5 6 7
package X; use base qw/ Class::Accessor /; X->mk_accessors( qw/ foo bar / ); ... package Y; use base 'X'; # nun hat auch Y die Attribute foo und bar
2009-06-29T18:30:15 pqKonstruktoren werden auf jeden Fall vererbt, denn ein Konstruktor ist auch nichts anderes als eine (Klassen-)Methode. Wenn also Y von X erbt, und Y keine eigenen Methoden hat, dann ruft Y->new die new-Methode von X auf.
QuoteWas meinst du mit "Attribute werden nicht vererbt"?
QuoteIm Gegensatz zu
use base qw/ CD::Music /
hat ein
use CD::Music
gar nichts mit Vererbung oder OOP zu tun.
@ISA = qw / CD::Music /
QuoteEin use ist aber in jedem Fall nötig, um das Modul überhaupt zu laden.
QuoteDeine Frage "Wird Vererbung häufig eingesetzt?" kann man so eigentlich nicht beantworten. Was ist häufig?
2009-06-29T19:03:10 leo11Versteh ich nicht. Ist das erste eine alternative Schreibweise für
Code (perl): (dl )@ISA = qw / CD::Music /
use base qw/ CD::Music /;
QuoteQuoteEin use ist aber in jedem Fall nötig, um das Modul überhaupt zu laden.
Auch bei Vererbung?
QuoteBei der Beschreibung der Nebenwirkungen von Arzneimitteln 1 bis 10 von 100. (-;
QuoteIn "Object Oriented Perl" aus dem Jahr 2000 steht dazu folgendes:
"..., it's important to realize that inheritance in Perl is merely a way of specifiying where to look for a method and nothing else. There is no direct inheritance of attribute - unless you arrange for it - nor any hierarchical calling of constructors or destructors - unles you explicitly write those methods that way..."
2009-06-29T21:22:34 sid burnGrundsätzlich gesehen bietet dir Pure Perl etwas wie Attribute nicht an. So wie im Text erwähnt werden Methoden vererbt das war es.
QuoteNaja, vererbbare Attribute kann man IMHO mit Lvalue-Methoden ganz gut simulieren.
QuoteNachtrag: Grundsätzlich
Es gibt IMHO nicht sowas wie DAS Standard-Objektmodell und DIE Standard Terminologie. Heutzutage ist Java hip, nichtsdestotrotz sollte doch bei Vergleichen bitte dazugesagt werden WOMIT man Perl vergleicht.
Blanke Aussagen wie "Perl kennt keine Attribute" sind so sinnig wie "Susis haben keineTittenähm Brüste"
2009-06-30T11:30:18 LanX-... "Javascript": Bei Javascript ist ja klar womit ichs vergleiche ...Perl.
QuoteDie meisten vertreten es gebe gar keine Klassen in JS, ich habs relativiert.
QuoteHier genau das gleiche Problem bei der Kritik wird das Klassenverständnis aus Java entlehnt.
QuoteEs gibt aber sehr wohl Objekte die wg des gleichen Konstruktors einer gemeinsamen Gruppe (oder Klasse) angehören.
Quote... "...nicht an einer Programmiersprache gebundenWas Attribute sind ist klar": Bitte gib mir eine Referenz wo das verlässlich definiert wurde, insbesondere dass "echte Attribute" vererbbar seien.
QuoteFür mein Verständnis sind die Elemente der geblessten Datenstruktur in Perl Attribute, schon alleine im Wortsinne von "Attribut".
QuoteGrundsätzlich: Es macht keinen Sinn über ein Thema zu diskutieren, wenn die Begrifflichkeiten divergieren. Meinetwegen das Javamodell hinzuziehen, aber dann bitte dazusagen.
QuoteUmso lächerlicher ist es ja auch. Du sagst ganz klipp und klar das JavaScript keine echten Klassen kennt. Verglichen mit Perl? Perl kennt technisch ebenfalls keine Klassen.
QuoteNein, hast du nicht. Bisher wurde nichtmal JS erwähnt, Und in einem Satz zu sagen das JS ja eigenltich keine Klassen kennt, daran ist nichts relativitiert.
Quote1) Ich sprach nirgendswo von "echten Attributen".
QuoteGrundsätzlich gesehen bietet dir Pure Perl etwas wie Attribute nicht an.
QuoteNebenbei Damian Conway in seinem OOP Buch sagt ja selber das es in Perl keine Attribute gibt, der text dazu wurde hier ja schon sogar zitiert, aber lass mich raten. Nicht verlässlich?
2009-06-29T22:55:05 sid burnQuoteNaja, vererbbare Attribute kann man IMHO mit Lvalue-Methoden ganz gut simulieren.
Und warum sollte das mehr "vererbbare Attribute" sein als eine normale Get/Setter Methode?
2009-06-29T22:55:05 sid burnDas einzige was du an einer Lvalue Mathode hast ist eine andere Schreibweise, ansonsten bietet es dir das gleiche wie eine normale Get/Setter Methode.
2009-06-30T11:48:29 LanX-Das Handling eines Attributzugriffs wird besser simuliert!
QuoteExtremfall: Realisiere mal $self->a++ mit Getter und Settern ... (klassischerweise wird hier mal schnell aus der Not noch eine Methode inc_a() geboren ... und dec_a() usw.)
QuoteIst natürlich mehr Schreibarbeit und erhöht sie Unlesbarkeit, sobald die Funktion mehrmals aufgerufen wird.
Indem die Subroutine dirname in dein aktuelles Package importiert wird, könnte man es allerdings auch als Methode aufrufen, was aber nicht Sinn der Sache ist. Deswegen sollte man sparsam mit Importen sein.
Alternativ dazu gibt es den Weg, den File::Spec geht
2009-06-29T18:00:37 leo11Mir ist klar, das man Vererbung nutzt um zu sagen: "Das Objekt X ist wie Objekt Y mit ein paar Änderungen. Daher erbe die Dinge von Objekt Y".