tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Matthias Reitinger
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
435
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Bexter Bexter ist offline Rookie
    Registriert seit
    Oct 2009
    Beiträge
    0
    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.
     

  2. #2
    Larrywayn Larrywayn ist offline Mitglied Silber
    Registriert seit
    May 2009
    Ort
    Berlin
    Beiträge
    60
    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.

  3. #3
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.802
    Blog-Einträge
    5
    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
    Bexter bedankt sich. 
    „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

  4. #4
    Bexter Bexter ist offline Rookie
    Registriert seit
    Oct 2009
    Beiträge
    0
    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.
     

  5. #5
    splasch splasch ist offline Mitglied Brillant
    Registriert seit
    Jul 2004
    Beiträge
    854
    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

  1. Antworten: 3
    Letzter Beitrag: 13.03.10, 10:22
  2. Antworten: 3
    Letzter Beitrag: 11.02.09, 12:31
  3. Antworten: 1
    Letzter Beitrag: 16.12.08, 08:43
  4. Variable von Funktion an andere Funktion übergeben
    Von BenschM@ster im Forum Javascript & Ajax
    Antworten: 6
    Letzter Beitrag: 17.08.07, 15:27
  5. Vorteil von Textdateien gegenüber MySQL DB
    Von venyl im Forum Coders Talk
    Antworten: 21
    Letzter Beitrag: 20.07.06, 19:09

Stichworte