Vorteil abstrakter Funktion gegenüber normaler Funktion

Bexter

Grünschnabel
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 :D
 
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
 
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
 

Neue Beiträge

Zurück