Quotesubklassen dürfen attribute anders verwenden als die eltern
QuoteDas ist aber normale OO das subklassen zusätzliche Attribute haben
1 2 3 4 5
# Methode der Subklasse sub init{ my $self = shift; $self->{DBH} = $self->dbh(); }
QuoteSo kannst du auch bestimmte klassen an mehreren Stellen wiederverwenden ohne die Klassenhierarchie zu brechen.
QuoteEin weitere Möglichkeit ist es auch objekte als argumente zu übergeben.
1 2 3 4
my $ro = $class->new( BIN => $routes, # alle Eigenschaften der Response-Seiten im wahlfreien Zugriff URL => $url, # der requestete URL like /index.html CGI => xCGi->new(), # Instanz meiner CGI-Klasse
1 2 3 4 5 6 7 8
sub param{ my $self = shift; return $self->{CGI}->param(@_); } sub xr{ my $self = shift; return XR::xr(@_); }
1 2 3 4 5 6 7 8 9 10 11
use strict; use warnings; use TemplateSplitter; sub template{ my $self = shift; my $name = shift || 'default'; my $t = TemplateSplitter->new( $self->{BODY} ); $self->{BODY} = $t->{$name}; $self->{BODY} .= $t->{$_} for @_; }
QuoteEs braucht eine weile umzudenken weil Klassen bei OO per komposition ganz anders aufgebaut und konzipiert werden. Ich versuch es mal so zu erklären. Jede Klasse und jede API sollte überschaubar sein. Und eventuelle Komplexität wird in Attributen versteckt oder deren Attribute.
QuoteUpdate: Eigenschaften zu vererben ist unsinnig. Weil Eigenschaften Sache der Sub- bzw. Anwenderklasse sind.
2025-06-05T15:56:23 lichtkindis lazy ist der raku syntax, keine ahnung ob es auch das in moose gibt
Quotesubklassen dürfen attribute anders verwenden als die eltern. Das verstöst auf jeden fall gegen Liskov und auch gegen meine selbstaufgestellte Regel für maximal Klarheit im Code.
1 2 3 4 5
sub new{ my $class = shift; my %self = @_; return bless \%self, $class; }
Quotedass ein Programm, das Objekte einer Basisklasse T verwendet, auch mit Objekten der davon abgeleiteten Klasse S korrekt funktionieren muss, ohne dabei das Programm zu verändern.
2025-05-27T08:17:52 rostiAlso, wenn ich in meiner Subklasse eine bestimmte Eigenschaft brauche, dann schaue ich in die Instanz ob es die namentlich bereits gibt
QuoteUnd wie schaut man in ein Objekt?
QuoteAber wie Du schon sagtest: Du hast seit ewigen Zeiten ein Framework am Laufen, und darin wird sich wahrscheinlich wohl auch nichts mehr ändern.
1 2 3 4 5 6 7 8 9
sub control{ my $self = shift; if( $self->param('month') ){ $self->template('month'); } elsif( $self->param('year') ){ $self->template('year'); } }