Gast
2008-09-20, 13:27:46
Hallo,
ich beschäftige mich seit ein paar Wochen mit der objekt-orientierten Programmierung. Angefangen hat eigentlich alles bei PHP5 vor längerer Zeit, aber dessen Möglichkeiten der oop werden ja oftmals belächelt, schliesslich bin ich bei C# gelandet.
Eigentlich hatte ich gedacht, es hätte bei mir klick gemacht, was das Verstandnis der oop angeht... scheint leider doch nicht ganz so zu sein. (Bem.: ich rede jetzt von der Philosophie dahinter, nicht vom technischen).
Es ist ja immer die Rede davon, dass das ganze Konzept ein Abbild der Realität ist. In vielen Büchern findet man so z.B. das Objekt Auto - es hat als Eigenschaften Farbe, PS, Gewicht, Sitzanzahl... und Methoden wie Fahren, Hupen und Bremsen. in fortgeschritteneren Beispielen ist es dann die Luftfahrzeugklasse, von welcher Hubschrauber, Propellermaschine usw. erben.
Kurz gesagt eine Einheit eben, welche sich selbst verwaltet, seine eigenen Daten und Methoden besitzt, auf Anstöße von Außen reagieren kann, ohne dabei aber zuviel Einblick in sich selbst zu geben (Datenkapselung).
Soweit, so gut.
Nun dachte ich, eine Klasse "Unternehmen" ließe sich doch sicher auch umsetzen. Diese hat Methoden wie z.B. WarenAnnehmen(), WarenVerpacken(), StaplerFahren(), QualitätSichern(), was ein Unternehmen eben so hat.
Das hätte echt gut in mein derzeitiges Bild der OOP gepasst. Etwas, das sich selbst verwalten kann, seine Daten kapselt, wo man was reintun kann und etwas wieder rauskommt, seine Mitarbeiter hat und von Außen betrachtet einfach eine wasserdichte Einheit ist, die sich, einmal getestet, überall einsetzen lässt.
Im Pseudocode könnte man das so ansehnlich machen:
fima = new unternehmen();
firma.WarenAnnehmen(...);
firma.WarenPrüfen();
firma.StaplerFahren(Lager/Datenbank);
(Natürlich auch als statische Klasse denkbar).
Jetzt wurde mir gesagt, dass das in der OOP so nicht gemacht wird. Jede der obigen Methoden bekommt ihre eigene Klasse, das Unternehmen gibts nichtmehr.
Grund dafür ist die Wiederverwertbarkeit des Codes. Das leuchtet mir ein, jedoch steht das bei mir im Konflikt mit dem bisherigen Denken.
Es gibt jetzt eine Klasse Lagerhaus, eine Klasse Staplerfahrer, eine Klasse Qualitätssicherung, eine Klasse Verpacker...
Die Klassen können unabhänngig voneinander Arbeiten, dem Staplerfahrer ist egal, ob die anderen Teile seiner ehemaligen Fima noch existieren, er arbeitet selbstständig. Wiederverwertbarer Code eben - aber es gibt keine große, autonome Einheit mehr.
Obiger Code müsste so aussehen:
new Warenlager().WarenAnnehmen(new Qualitätssicherung.Prüfe(new Staplerfahrer.Hole(Packet))).
Eine imho unschöne Verschachtelung irgendwie, aber das gehört sich anscheinend so. Es kam mir außerdem erst verschwenderisch vor, für jede kleine Sache gleich eine neue Klasse zu erstellen, aber muss wohl so sein ("Da bekommst du eine Klasse, die genau tut, was du willst"), selbst wenn sie nur ein XML-File (=Packet in meinem Beispiel) holt.
Kann mir vielleicht irgendwer helfen, das ganze nochmal verständlicher zu machen warum und weshalb?
Danke
ich beschäftige mich seit ein paar Wochen mit der objekt-orientierten Programmierung. Angefangen hat eigentlich alles bei PHP5 vor längerer Zeit, aber dessen Möglichkeiten der oop werden ja oftmals belächelt, schliesslich bin ich bei C# gelandet.
Eigentlich hatte ich gedacht, es hätte bei mir klick gemacht, was das Verstandnis der oop angeht... scheint leider doch nicht ganz so zu sein. (Bem.: ich rede jetzt von der Philosophie dahinter, nicht vom technischen).
Es ist ja immer die Rede davon, dass das ganze Konzept ein Abbild der Realität ist. In vielen Büchern findet man so z.B. das Objekt Auto - es hat als Eigenschaften Farbe, PS, Gewicht, Sitzanzahl... und Methoden wie Fahren, Hupen und Bremsen. in fortgeschritteneren Beispielen ist es dann die Luftfahrzeugklasse, von welcher Hubschrauber, Propellermaschine usw. erben.
Kurz gesagt eine Einheit eben, welche sich selbst verwaltet, seine eigenen Daten und Methoden besitzt, auf Anstöße von Außen reagieren kann, ohne dabei aber zuviel Einblick in sich selbst zu geben (Datenkapselung).
Soweit, so gut.
Nun dachte ich, eine Klasse "Unternehmen" ließe sich doch sicher auch umsetzen. Diese hat Methoden wie z.B. WarenAnnehmen(), WarenVerpacken(), StaplerFahren(), QualitätSichern(), was ein Unternehmen eben so hat.
Das hätte echt gut in mein derzeitiges Bild der OOP gepasst. Etwas, das sich selbst verwalten kann, seine Daten kapselt, wo man was reintun kann und etwas wieder rauskommt, seine Mitarbeiter hat und von Außen betrachtet einfach eine wasserdichte Einheit ist, die sich, einmal getestet, überall einsetzen lässt.
Im Pseudocode könnte man das so ansehnlich machen:
fima = new unternehmen();
firma.WarenAnnehmen(...);
firma.WarenPrüfen();
firma.StaplerFahren(Lager/Datenbank);
(Natürlich auch als statische Klasse denkbar).
Jetzt wurde mir gesagt, dass das in der OOP so nicht gemacht wird. Jede der obigen Methoden bekommt ihre eigene Klasse, das Unternehmen gibts nichtmehr.
Grund dafür ist die Wiederverwertbarkeit des Codes. Das leuchtet mir ein, jedoch steht das bei mir im Konflikt mit dem bisherigen Denken.
Es gibt jetzt eine Klasse Lagerhaus, eine Klasse Staplerfahrer, eine Klasse Qualitätssicherung, eine Klasse Verpacker...
Die Klassen können unabhänngig voneinander Arbeiten, dem Staplerfahrer ist egal, ob die anderen Teile seiner ehemaligen Fima noch existieren, er arbeitet selbstständig. Wiederverwertbarer Code eben - aber es gibt keine große, autonome Einheit mehr.
Obiger Code müsste so aussehen:
new Warenlager().WarenAnnehmen(new Qualitätssicherung.Prüfe(new Staplerfahrer.Hole(Packet))).
Eine imho unschöne Verschachtelung irgendwie, aber das gehört sich anscheinend so. Es kam mir außerdem erst verschwenderisch vor, für jede kleine Sache gleich eine neue Klasse zu erstellen, aber muss wohl so sein ("Da bekommst du eine Klasse, die genau tut, was du willst"), selbst wenn sie nur ein XML-File (=Packet in meinem Beispiel) holt.
Kann mir vielleicht irgendwer helfen, das ganze nochmal verständlicher zu machen warum und weshalb?
Danke