Thread Kritik an OOP
(48 answers)
Opened by hlubenow at 2017-07-12 03:18 2017-07-12T06:14:10 rosti Tut mir leid, da muß ich widersprechen. Man kann Objekte als "Maschinen" verstehen, mit denen ein Benutzer etwas machen kann. Insbesondere natürlich, wenn eine Klasse eine reale Maschine wie z.B. ein Auto oder einen Getränkeautomaten abbildet. Wenn man also z.B. ein Getränkeautomatenobjekt hat, kann man sagen: Code (perl): (dl
)
$getraenkeautomat->gibMirEineCola(); Das ist ein Methodenaufruf. Und wenn Objekte miteinander kommunizieren, dann tun sie das dadurch, daß sie die - öffentlichen - Methoden des anderen Objekts aufrufen. Natürlich kann ein Objekt also eine Methode einer anderen Klasse aufrufen. Ich glaube, an der Stelle mußt Du noch etwas dazulernen. Warum auch nicht? Das Problem dabei ist, daß die eine Klasse die andere Klasse kennen muß, um ihre Methode aufrufen zu können. Und dann kommt noch der Kontrollfluß dazu. Der ja aus der einfachen imperativen Programmierung stammt, und nicht auf gleichzeitiges Kommunizieren von Objekten ausgelegt ist. Am Ende treten genau die Probleme auf, daß man seine Objekte in einer Hierarchie strukturiert hat (nach allerhand Rumdrucksen wurde ich in einem Forum etwas verschämt auf MVC hingewiesen, jetzt weiß ich, daß man deshalb verschämt war, weil das letztlich auch nicht funktioniert), und man aber eine Kommunikation eines untergeordneten Objekts mit einem anderen untergeordneten Objekt irgendwo braucht, und man das am liebsten direkt machen möchte. So entsteht dieser "Schweizer Käse", den er beschreibt. Lohnenswertes Video in jedem Fall: Wenn er recht hat, ist das doch eine bemerkenswerte Aussage. Und wenn er widerlegt werden kann, würde man auch eine Menge daraus lernen. Zeitverschwendung ist das in keinem Fall, wenn man sich überhaupt mit diesen Dingen beschäftigt. --- Übrigens: Wenn man genau hinhört, dann stellt er die Regel Quote als theoretische Verhaltensregel für OOP-Programmierung auf, und nicht als technische Unmöglichkeit. Er sagt dann ja auch: Quote Er meint also, es gibt in der OOP-Theorie bestimmte Verhaltensregeln, an die sich aber niemand hält, weil es so eben nicht funktioniert. Er meint also: "Messages pass object references all the time, although, in theory, it's not allowed." Beispiel: $user kommuniziert mit $getraenkeautomat: 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 38 39 40 41 42 43 44 45 46 47 #!/usr/bin/perl use warnings; use strict; package Getraenkeautomat; sub new { my $classname = shift; my $self = {bottles_of_cola => 10}; return bless($self, $classname); } sub gibMirEineCola { my $self = shift; if ($self->{bottles_of_cola} > 0) { print "Bitteschoen!\n"; $self->{bottles_of_cola}--; print "Noch $self->{bottles_of_cola} Flaschen Cola uebrig.\n"; } } package Man; sub new { my $classname = shift; my $self = {thirst => 0}; return bless($self, $classname); } sub sweat { my $self = shift; my $getraenkeautomat = shift; print "Ganz schoene Hitze, ich werde durstiger.\n"; $self->{thirst}++; if ($self->{thirst} > 1) { print "Ich brauche eine Cola!\n"; $getraenkeautomat->gibMirEineCola(); } } package main; my $getraenkeautomat = Getraenkeautomat->new(); my $user = Man->new(); $user->sweat($getraenkeautomat); $user->sweat($getraenkeautomat); Last edited: 2017-07-12 16:35:16 +0200 (CEST) |