Thread Kritik an OOP
(48 answers)
Opened by hlubenow at 2017-07-12 03:18
Aggregation sieht so aus, dass bereits beim Erstellen der Instanz die Kommunikation berücksichtigt wird, die Kommunikation wird stets über eine Methode der eigenen Instanz (hier eine Instanz der Klasse Auto) abgewickelt:
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 31 32 33 34 35 36 37 # erstelle gleich mal 2 Instanzen # Fahrzeugführer ID wird durchgereicht $pkw = Auto->new(ffid => 1); $suv = Auto->new(ffid => 2); # Wenn der Fahrer gescheckt werden soll, ruft die Auto-Instanz eine eigene Methode $pkw->check; $suv->check; # Anwendungsklasse package Auto; # Argumente für die Konstruktoren nicht verwandter Klassen werden durchgereicht # für Debugzwecke wird die gesamte Konfiguration in der eigenen Instanz mitgeschleift sub new{ my $class = shift; my %cfg = ( ffid => '', # Fahrzeugführer ID # ggf. weitere Defaults @_); my $self = bless{ Fahrer => Fahrer->new( $cfg{ffid} ), Polizist => Polizei->new, CFG => \%cfg, ), $class; } # Delegation in eine eigene Methode # mit eigener Fehlerbehandlung sub check{ my $self = shift; my $fuehrerschein = $self->{Fahrer}->fuehrerschein(); $self->{Polizist}->check( $fuehrerschein) || $self->fehlerbehandlung(); } Wesentlich ist also, dass innerhalb der eigenen Anwendung keine Instanzen nicht verwandter Klassen erstellt werden, weil das bereits im Konstruktor erfolgt. Somit werden auch keine Instanzen übergeben sondern nur die relevanten Daten, im Beispiel die ID des Fahrzeugführers womit das Fahrzeugführerobjekt in der Lage ist, sämtliche Daten des Führerscheins zu liefern. Letzere werden dann an das Polizeiobjekt übergeben. Die gesamte Kommunikation findes also in einer eigenen Methode bzw. in Methoden der eigenen Anwendungsklasse statt. Edit: http://rolfrost.de/aggregation.html Last edited: 2017-07-21 08:26:52 +0200 (CEST) |