1Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
435
435
EMPFEHLEN
-
Hallo zusammen,
ich arbeite mich gerade in die Objektorientierte Programmierung ein und mir fehlt wohl irgendwie noch ein wenig das Verständnis dafür.
Momentan geistern in meinem Kopf die Frage, warum man auf eine abstrakte Klasse bzw. abstrakte Funktion zurückgreift, wenn man doch ohnehin in jeder Unterklasse eine unterschiedliche Funktion programmieren muss.
Sprich wenn ich schon weiß das die Funktionen unterschiedlich sind, z.B. Lohn- und Gehaltsrechnung, warum soll ich dann eine abstrakte Funktion z.B. berechneVerdienst() in einer möglichen Klasse Person erstellen, anstatt nicht gleich jeweils eine Funktion berechneLohn() in der Klasse Arbeiter und die Funktion berechnegehalt() in der Klasse Angestellter?
Ich hoffe das Beispiel ist nachvollziehbar, habe mir das mal kurz ausgedacht.
-
Du kannst ein Array vom Typ Person haben und dann problemlos für jede Person die Berechnungen anstellen, ohne vorher entscheiden zu müssen, ist die Person von Typ A oder vom Typ B oder sogar 2 einzelne Arrays zu haben, obwohl man sich das einsparen könnte.
Gibt natürlich noch viele sinnvollere Anwendungsmöglichkeiten und es erleichtert auch die Bearbeitung. Wenn du z.B. irgendetwas änderst, so muss das nur an wenigen Stellen tun und nicht im Gesamten Code.
Außerdem ist das hilfreich, wenn mehrere Leute zusammenarbeiten, dass der Code auf den gleichen Grundlagen aufbaut
Ich brauche sie nicht wirklich oft. Aber es gibt halt Codestellen, wo es viel Sinn macht und einige Probleme vereinfacht
So sehe ich das jedenfalls
http://larrywayn.pytalhost.eu xD
Friss zeurst, sonst wirst du gefressen.
-
Hallo Bexter,
abstrakte Methoden oder allgemein abstrakte Typen sind dann nützlich, wenn man nicht an der genauen Klasse eines Objektes interessiert ist, sondern nur weiß, dass die Klasse von einer bestimmten abstrakten Klasse erbt. Um bei deinem Beispiel zu bleiben: stell dir vor du willst eine Funktion schreiben, die den Gesamtverdienst der kompletten Belegschaft berechnet. Die Funktion bekommt eine Liste von Personen übergeben und ruft für jede Person die Funktion berechneVerdienst auf. Der Funktion ist es also egal, ob es sich bei der Person jetzt um einen Arbeiter oder um einen Angestellten handelt, für sie ist es nur wichtig, dass es eine Person ist und sie damit die Methode berechneVerdienst bereitstellt. Intern werden natürlich die Überladungen der Methode aus der jeweiligen Unterklasse ausgeführt, aber das braucht die Funktion nicht zu kümmern. Das nennt man auch Polymorphie. Jetzt klarer geworden?
Grüße, Matthias„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
Hallo,
besten Dank für die beiden Antworten, vor allem das zweite konkrete Beispiel von Matthias hat mir die Augen geöffnet. Wenn ich das richtig interpretiere dann vereinfacht eine abstrakte Klasse/Methode bei bestimmten Anforderungen die Programmierung. Mein Problem ist glaube ich, dass ich einfach noch in zu kleinen Maßstäben denke. Gerade bei dem Beispiel mit der Berechnung des Gesamtverdienst hätte ich eben nacheinander die beiden Funktionen berechneLohn() und berechneGehalt() zusammenaddiert, aber klar, mit der abstrakten Methode ist das dann einfacher.
Mit der Polymorphie habe ich mich noch nicht auseinander gesetzt, aber vielleicht wird es mir dann nochmal klarer.
-
Die abstracen Klassen haben noch weitere Vorteille. Zum einen kann man damit einen Schutz realiesieren so das nicht versehentlich die Variablen überschrieben werden.
So kann eine erbende klasse bestimmte Variablen nicht versehentlich löschen bzw überschreiben. Auch eben sehr nützlich beim singlton verfahren.
Mit einem Interface oder auch abstracten klasse ist es möglich eine Schnittstelle zu schaffen die einen Zentralen anlauf punkt zur verfügung stellt. So ist es möglich das Objekte andere Klassen den unter Klassen bekannt sind und man sie weiter verwenden kann. Sowie verhindert werden kann das gleiche Objekte oder variablen überschrieben werden. So wird der Zugriff geregelt fast schon ähnlich wie ein Rechtesystem nur erlaubter zugriff darf dann bestimmte sachen ändern oder löschen.
Somit werden einige logische Fehler größtenteils schon von vorherein ausgeschlossen. Wo man später sonst lang nach dem Fehler suchen müßte so bekommt man gleich eine Fehlermeldung am Bildschirm ausgeben das man was nun falsch Programmiert hat.
Mfg Splasch
Ähnliche Themen
-
(Pointer -> Array ) In Funktion befüllen aber nach Ende der Funktion leer
Von Shadow im Forum C/C++Antworten: 3Letzter Beitrag: 13.03.10, 10:22 -
Einer C Funktion eine C++ Member-Funktion zum Callback übergeben.
Von arothe im Forum C/C++Antworten: 3Letzter Beitrag: 11.02.09, 12:31 -
Javscript funktion als String an eine Javaskript funktion übergeben
Von Mazzok im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 16.12.08, 08:43 -
Variable von Funktion an andere Funktion übergeben
Von BenschM@ster im Forum Javascript & AjaxAntworten: 6Letzter Beitrag: 17.08.07, 15:27 -
Vorteil von Textdateien gegenüber MySQL DB
Von venyl im Forum Coders TalkAntworten: 21Letzter Beitrag: 20.07.06, 19:09





Zitieren

Login





