You are not logged in.

wcf.regNote.message

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

1

Monday, May 18th 2009, 10:19am

Welchen wirklichen Vorteil hat objekt orientiertes Programmieren mit Klassen bei PHP5 gegenüber der alten Art?

Die letzte Zeit mach ich wieder recht viel mit PHP und habe mir auch einige neuen Dinge durchgelesen und darunter waren auch die Neuerungen in PHP5 bzw. PHP5.3.X wo von objekt orientiertem Programmieren die Rede ist. Mir ist zwar die Funktionsweise und das alles klar jedoch nicht der Vorteil bzw. warum man auf diese Art programmieren sollte. Früher hat man einfach seine Funktionen erstellt, diese an der benötigten Stelle aufgerufen und fertig war das ganze. Bei Objekten erstelle ich eine Klasse, hänge meine Funktionen dort rein und rufe das ganze ein wenig anders auf aber das Ergebnis ist so gesehen das gleiche. Warum sollte ich also trotzdem mit Klassen und Methoden und Funktionen und ... arbeiten anstatt bei meiner alten Weise zu bleiben die ich seit Jahren kenne?

Bitte nicht einfach nur antworten "Weil das besser ist" oder "Weil das neuer ist" solche Antworten sind qualitativ gleichwertig mit ner Hand voll Sand.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

flo

Unregistered

2

Tuesday, May 19th 2009, 4:30pm

naja das hat schon so einige vorteile...
zum einen ist das halt moderner^^ :P - und dadurch weiter verbreitet. es ist immer leichter mitarbeiter für ein projekt zu finden, wenn alle auf die selbe art programmieren...

zum anderen bringen objekte einfach vorteile mit, die man so sonst nicht hat.. als beispiel nehme ich mal das "auto beispiel"..
du kannst ein objekt "auto" erstellen. Da packst du alle eigenschaften (attribute) und Methoden (Funktionen) rein, die jedes Auto hat. Mal ein Beispiel:
attribute
+ Türen
+ PS
+ Sprittverbrauch

methoden
+! GasGeben
+! Bremsen
+? GibGeschwindigkeit

dieses objekt hast du einmal definiert und kannst es so oft initialisieren wie du möchtest... und darüber hinaus kann man noch neue attribute etc an das neue objekt anbauen. und man kann halt eigenschaften und methoden vererben, in ein anderes objekt... das bringt arbeitsersparnis und macht den code übersichtlicher..
folgendes hab ich noch in einem forum gefunden:

Quoted

Verwendung bereits vorhandener Software:
Klassendefinitionen für oft verwendete Sachverhalte können in Klassenbibliotheken hinterlegt werden. Durch einfaches Übernehmen wird die Softwareentwicklung stark vereinfacht. Man spricht hier von Softwareentwickling durch Reproduktion und Objektbeschreibungen.

als beispiel sei hier mal der begriff framework dahingestellt. frameworks wie zb "Zend Framework" sind im prinzip nur aus objekten zusammengebaut und diese objekte nutzt der softwareentwickler für sein eigenes projekt. das ist meiner meinung nach ein riesen zeit und arbeitsvorteil gegenüber jemanden, der seine anwendungen komplett selbst und mit prozeduralen code schreibt. mit einem framework kannst du ja sowohl die vorgefertigten objekte nutzen als auch neue erstellen oder halt zwischendurch noch prozeduralen code einbauen...
damit überwiegen die vorteile der oop schon gewaltig, vorallem wenn man noch ein framework hinzuzieht.

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

3

Tuesday, May 19th 2009, 8:59pm

Du hast sicherlich recht damit. Und ich denke auch darüber nach künftig nur noch auf diese Art zu entwickeln. Aber nicht aus den genannten Gründen sondern weil es mir besser gefällt.

Du sagst der Vorteil ist man kann Codestandards in eine "Bibliothek" packen und so mehrfach nutzen. Durchaus richtig aber aus meiner Sicht nichts anderes als wenn ich mir eine Datei erstelle (Die Datei ist jetzt mal meine Klasse) und in diese Datei packe ich Standards rein wie die Definition "Auto hat Scheiben, Türen und Räder" oder eben meine funktionen. Diese eine Datei includiere ich in jedem beliebigen Projekt und hab alle Standards wie auch Funktionen voll zur Verfügung. Und wenn man die Funktionen sofort so aufbaut, dass sie übertragbar sind dann ist das auch alles kein Thema.

Die Frage ist eben ob es einen wirklichen Vorteil gibt der im alten Standard nicht zu finden ist. Arbeiten Klassen schneller, sicherer, oder gibt es mehr Möglichkeiten die es wirklich früher nicht gab? Bis jetzt bin ich da noch nicht fündig geworden. Zusätzlich finde ich es extrem schwer bestehende Projekte in oop zu ändern. Mal ein Beispiel.

Ich habe eine Datei in welcher die Funktionen "messageparser", "parse_ascii", "parse_fontstyle" und "parse_smilies" zu finden sind. Aufgerufen wird die Funktion "messageparser" und ich übergebe eine Variable die beliebigen Inhalt hat. Mit div. preg_match und weiteren Dingen filtere ich bestimmte Textpassagen und habe so eine Textbox erhalten in welcher ich ähnlich wie in einem Forum über "bbcodes" irgendwas machen kann. Würde ich daraus nun eine Klasse machen muss ich diese Klasse genau so includieren wie auch meine Funktionsdatei. Ich muss ebenso meine Methoden aufrufen und die Variable übergeben wie auch früher. Ganz im Gegenteil. Bei oop würde ich sogar noch mehr brauchen. Zuerst muss die Klasse initialisiert werden mit $this-> NEW blablub und das ganze Zeug. Es ist also im ersten Moment geringfügig aufwendiger. OK der Code der Klasse ist später auf jeden Fall besser zu lesen sofern man sich an gewisse Standards hält aber dennoch kann man beim reinen Tippen nicht von einer erheblichen Erleicherung sprechen.

Ich müsste mir mal ein fertiges Beispiel nehmen und das gleiche auf herkömmliche Art umprogrammieren. Würde mich echt mal interessieren ob ich beim Arbeiten damit selbst einen Vorteil finde.

Ach ja und was Du meinst das man so leichter mit mehreren an einem Projekt arbeiten kann. Wer eine einfache Funktion in einer Datei nicht lesen kann sollte von einer Klasse oder sogar einer Klassenbibliothek wohl besser die Finger lassen ;)
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

Rumpel78

Beginner

Posts: 27

  • Send private message

4

Wednesday, May 20th 2009, 3:36pm

Ein großer Vorteil ist halt auch das Prinzip der Vererbung.

Wenn du eine Klasse Parser hast, mit der Methode "parse", leitest du dir verschiedenste Parser ab, die die Methode Parse neu definieren.

Angenommen es gibt noch eine Klasse "ParserManager", bei der du alle Parser per ParserManager.AddParser(Parser newParser) anmelden kannst. Dann kann dieser Manager alle Parser ganz einfach in einer Schleife mit Parser.parse() aufrufen, ohne die implementation oder irgendwas kennen zu müssen, es muss nicht mal den Typ der Klasse wissen, es reicht wenn die Klasse von der Grundklasse "Parser" ableitet und diese dem ParserManager bekannt ist.

Gerade bei Programmen die modular aufgebaut sind bietet OOP möglichkeiten der Erweiterung / Austausch von Programmteilen, die mit normalen prozeduralen Techniken nur schwer zu lösen wären.

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

5

Friday, May 22nd 2009, 8:15pm

Das mit dem vererben ist wirklich ne recht gute Sache. Zumal man so verschiedene Standardfunktionen verketten kann und immer nur eine Funktion braucht die das ganze entsprechend der Anforderung behandelt. Auch das mit dem Auto Load ist ne feine Sache. Wobei ich noch relativ am Anfang bin was das Thema Klassen betrifft. Hab aber eines meiner Projekte jetzt schon nahezu komplett auf Klassen umgebaut.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

Similar threads

wcf.user.socialbookmarks.titel