Anzeige:
Ergebnis 1 bis 4 von 4

Thema: Statische Eigenschaften / Methoden & abstrakte Klassen / Methoden.

  1. #1
    Registrierter Benutzer
    Registriert seit
    20.05.2006
    Ort
    Bremen
    Beiträge
    39

    Statische Eigenschaften / Methoden & abstrakte Klassen / Methoden.

    Hallo mrunix User/innen,
    ich bin angehender Anwendungsentwickler und ich hatte vor kurzen das Thema "PHP5" im Bildungszentrum. Leider wurde das Thema "PHP5-OOP" nicht behandel. (OOP kommt erst im C++ und Java Ausbildungsteil.)
    Ich bin also gerade dabei mir den fehlenden Teil autodidaktisch anzueignen.
    Meine Frage: Wozu braucht man statische Eigenschaft und Methoden genauso wie abstrakte Klassen und Methoden?
    Wie es funktioniert hab ich wohl verstanden aber ich verstehe nicht den Sinn der dahinter steckt.
    Hat einer von Euch vielleicht für mich ein Beispiel?
    Oder könnte mir das an einem Beispiel erklären?

    Gruß Olly

  2. #2
    Registrierter Benutzer
    Registriert seit
    15.10.2005
    Ort
    Franken
    Beiträge
    362
    Statische Methoden:
    Du hast eine Klasse "Berechnungen". Da dies aber nur eine Helper-Klasse ist und nicht wirklich ein "reales" Objekt darstellt, brauchst du sie nich zu initalisieren, sonstern kannst z.B. mit Berechnungen.PI die entsprechende statische Variable abrufen. Gleiches gilt für Funktionenn, wie z.B. Berechnungen.quadratwurzel();

    Beispiel für abstrakte Klassen:
    Du hast eine Klasse "Fortbewegungsmittel". Diese ist aber so allgemein gehalten, dass sie alleine keinen Sinn macht.
    Allerdings haben Fortbewegungsmittel durchaus ähnliche eigenschaften wie "Größe", "Geschwindigkeit", "Bremskraft" und Funktionen wie beschleunigen() und bremsen() (hoffe ich jedenfalls , die sich aus der Bremskraft nach einer festen Formel ermittelt.
    Jetzt hast du die verschiedenen Arten von Fortbewegungsmitteln, z.B. Auto, Flugzeug und Schiff. Diese erweittern nun die Klasse "Fortbewegungsmittel", heißt sie teilen sich die vordefinierten Eigenschaften und Methoden und erweitern diese um spezifische Angaben.

    Ganz grob gesehen kannst du abstrakte Klassen also als Gruppierung von Objekten mit ähnlichen Eigenschaften und Funktionen betrachten.
    Der Unterschied zu Interfaces liegt darin, dass du in abstrakten Klassen bereits Methoden ausformulieren kannst.
    Dank der Rekursion kann ich IF-Schleifen bauen.

    In neuem Glanz: www.turbohummel.de

  3. #3
    Registrierter Benutzer
    Registriert seit
    20.05.2006
    Ort
    Bremen
    Beiträge
    39
    Ah ich glaub ich hab es jetzt
    Ich fasse noch einmal zusammen, um zu sehen ob ich es nun wirklich verstanden habe.

    Zu statische Methoden:
    Das heißt dann, dass ich auf Methoden eine Klasse direkt zugreifen kann ohne ein Objekt zu haben bzw. zu erstellen. Mit Klassenname::Methodenname kann ich dann also auf die Methode zugreifen. Okay, das macht ja auch Sinn wenn ich bspw. nur eine Methode aus einer Klasse brauche dann brauch ich nicht ein komplettes Objekt erstellen.

    Zu abstrakte Klassen:
    Also könnte man abstrakte Klassen als "Basis" für abgeleitete Klasse eine "Klassengruppe" sehen. Sprich, wenn die abgeleiteten Klassen die gleiche Basis haben. Dann macht es auch Sinn warum es keine Instanzen von abstrakten Klassen geben kann.

    Gruß Olly

  4. #4
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Zitat Zitat von djaliced Beitrag anzeigen
    ...
    Zu statische Methoden:
    Okay, das macht ja auch Sinn wenn ich bspw. nur eine Methode aus einer Klasse brauche dann brauch ich nicht ein komplettes Objekt erstellen.
    Naja, das ist nicht ganz der Sinn der Sache. Eine "normale" Klasse beinhaltet Eigenschaften und Methoden, um diese Eigenschaften zu modifizieren. Die Instanz (das Objekt) hat dann konkrete Ausprägungen dieser Eigenschaften. Eine statische Methode bietet sich dann an, wenn ich Datenmanipulationen durchführen will, die unabhängig von einer Klasseninstanz und ihren Eigenschaften sind. Oft sind das - wie von Turbohummel schon erwähnt, sogenannte Helper- oder Tools-Klassen (z. B.: convertDecToHex(int wert), um einen Dezimalwert in seine Hexadezimalentsprechung umzuwandeln), dafür lohnt es sich nicht, extra Objekte aufzubauen, die Werte mit setDec() zu setzen und dann mit getHex() wieder abzuholen. Bösartig formuliert kann man sowas als objektorientierte prozedurale Programmierung betrachten

    Zitat Zitat von djaliced Beitrag anzeigen
    ...
    Zu abstrakte Klassen:
    Also könnte man abstrakte Klassen als "Basis" für abgeleitete Klasse eine "Klassengruppe" sehen. Sprich, wenn die abgeleiteten Klassen die gleiche Basis haben.
    Hm, auch nicht ganz getroffen. Abgeleitete Klassen werden meist von "normalen" Klassen abgeleitet, z. B. ein PKW von einem Auto. Das Auto hat Eigenschaften und Methoden, die ich bereits implementieren kann, der PKW erweitert diese Eigenschaften und Methoden (4 Räder, 3 oder 5 Türen, ...). Das Auto muss nicht unbedingt Türen haben, trotzdem kann es sinnvoll sein, mit Instanzen von Auto zu arbeiten - z. B. wenn einen nur die allgemeinen Auto-Eigenschaften interessieren.

    Abstrakte Klassen bieten sich da an, wo ich bestimmte Eigenschaften und Methoden zwar bereits voraussetzen will, aber noch nicht weiß, wie diese implementiert werden sollen. Als Beispiel: Ich definiere einen DataHandler, der einen Datensatz entgegennehmen, aufbereiten und wieder wegschreiben soll. Nun will ich aber das Wegschreiben möglichst flexibel machen (XML, Datenbank, CSV, Prosa), während ich bereits weiß, wie die Daten ankommen (z. B. als POST-Parameter aus einem Webformular) und wie ich sie intern aufbereite (Prüfungen, Formatkonvertierungen, Adressabgleich z. B.). Dann würde ich mir eine abstrakte Klasse bauen, in der ich die Methoden setData() und processData() bereits implementieren kann, die Methode writeData() wird nur deklariert, aber nicht implementiert. Macht hier auch noch keinen Sinn, weil das Schreiben in eine DB nunmal völlig anders abläuft als das in eine XML-Datei. Eine Instanziierung macht keinen Sinn, weil ohne Wegschreiben die Daten im Nirvana landen. Also leite ich davon Klassen wie XMLDataHandler, CSVDataHandler, DBDataHandler ab, in denen ich die fehlende Methode implementiere.

    HTH
    Jan

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •