Sie könnten es mit folgendem Ansatz versuchen, den ich aus einem Beitrag in einem Forum, den ich vor einiger Zeit verfasst habe, leicht abgewandelt habe:
Das grundlegende Vokabular für OOP besteht aus einer Klasse, einer Methode und einem Parameter.
Eine Klasse ist eine Gruppe von Funktionen, die zusammenarbeiten, um eine Aufgabe zu erfüllen. Eine Instanz einer Klasse wird als Objekt betrachtet.
Eine Methode bezieht sich einfach auf eine Funktion, die in einer Klasse eingeschlossen ist.
Ein Parameter ist eine Variable, die an eine Funktion übergeben wird, um ihr Anweisungen zu geben, wie sie handeln soll, oder um ihr Informationen zur Verarbeitung zu geben.
Wenn Sie ein wenig recherchieren, werden Sie eine Fülle von Informationen über Entwurfsmuster finden. Einige davon könnten nützlich sein, wenn man sie sich anschaut, obwohl ich vorsichtig sein würde, sich anfangs zu sehr damit zu beschäftigen, weil sie überwältigend sein können. Es gibt zwei hilfreiche (und etwas überstrapazierte) Akronyme, die Sie sich merken sollten, wenn Sie versuchen, sich in eine OOP-Mentalität zu versetzen: DRY und KISS.
DRY steht für Don't Repeat Yourself und bedeutet genau das. Wenn Sie einen Code schreiben, sollten Sie diesen bestimmten Code nie mehr wiederholen müssen. In der Praxis bedeutet das, abstrakter zu denken und von Anfang an besser zu planen. Ich werde gleich ein Beispiel geben.
KISS steht für Keep It Simple, Stupid und bedeutet, dass Sie versuchen sollten, einen Code zu schreiben, der sein Ziel auf möglichst einfache Weise erreicht. Einfacher bedeutet weniger Möglichkeiten für Fehler und leichtere Wartung. Im Zusammenhang mit OOP bedeutet dies normalerweise, dass jede Methode oder Funktion nur eine Aufgabe hat. Wenn Sie feststellen, dass eine Methode mehr als eine Aufgabe hat, bedeutet dies in der Regel, dass sie in mehrere kleinere Methoden umstrukturiert werden kann, von denen jede eine bestimmte Aufgabe hat.
Nun ein einfaches Beispiel (vielleicht fällt jemandem ein besseres ein, aber lassen Sie mich das machen):
Nehmen wir an, Sie müssen zwei verschiedene Formulare programmieren, eines, das Informationen über Autos verarbeitet, und eines, das dasselbe für Lastwagen tut.
Für Autos wollen wir die folgenden Informationen aufzeichnen:
- Farbe
- Motorgröße
- Art der Übertragung
- Anzahl der Türen
Für Lastwagen brauchen wir:
- Farbe
- Motorgröße
- Art der Übertragung
- Kabinengröße
- Anhängelast
In der prozeduralen Programmierung würden Sie zuerst den Code für das Autoformular und dann den Code für das LKW-Formular schreiben.
Bei der objektorientierten Programmierung würden Sie eine Basisklasse namens Fahrzeug schreiben, die die gemeinsamen Merkmale von Lkw und Pkw aufzeichnet. In diesem Fall wird die Fahrzeugklasse aufzeichnen:
- Farbe
- Motorgröße
- Art der Übertragung
Wir werden jedes dieser Merkmale zu einer eigenen Methode machen. Die Methode color könnte zum Beispiel die Farbe des Fahrzeugs als Parameter nehmen und etwas damit machen, z. B. es in einer Datenbank speichern.
Als Nächstes werden wir zwei weitere Klassen erstellen: Truck und Car, die beide alle Methoden der Klasse Vehicle erben und um eigene Methoden erweitern werden.
Die PKW-Klasse hat eine Methode namens numberOfDoors und die LKW-Klasse hat die Methoden cabSize und towingCapacity.
Gehen wir also davon aus, dass wir ein funktionierendes Beispiel für prozedurale und OO-Programmierung haben. Lassen Sie uns nun einige Szenarien durchspielen.
Szenario 1 : Angenommen, wir müssen plötzlich ein Busformular hinzufügen, das die folgenden Informationen aufzeichnet:
- Farbe
- Motorgröße
- Art der Übertragung
- Anzahl der Fahrgäste
Verfahren : Wir müssen das gesamte Formular neu erstellen und dabei den Code für Farbe, Motorgröße und Getriebeart wiederholen.
OOP : Wir erweitern einfach die Fahrzeugklasse um eine Busklasse und fügen die Methode numberOfPassengers hinzu.
Szenario 2 : Anstatt die Farbe in einer Datenbank zu speichern, wie wir es früher getan haben, möchte unser Kunde aus irgendeinem Grund, dass die Farbe per E-Mail an ihn geschickt wird.
Verfahren : Wir ändern drei verschiedene Formulare: Autos, Lastwagen und Busse, um die Farbe per E-Mail an den Kunden zu senden, anstatt sie in der Datenbank zu speichern.
OOP : Wir ändern die Farbmethode in der Klasse vehicle und da die Klassen car, truck und bus alle die Klasse vehicle erweitern (oder von ihr erben, um es anders auszudrücken), werden sie automatisch aktualisiert.
Szenario 3 : Wir wollen von einem generischen Auto zu spezifischen Marken übergehen, zum Beispiel: Nissan und Mazda.
Verfahren : Wir erstellen ein neues Formular für jede Marke, wiederholen den gesamten Code für die allgemeinen Fahrzeuginformationen und fügen den spezifischen Code für jede Marke hinzu.
OOP : Wir erweitern die Klasse car um eine Klasse nissan und eine Klasse mazda und fügen Methoden für jeden Satz eindeutiger Informationen für diese Automarke hinzu.
Szenario 4 : Wir haben einen Fehler im Bereich der Übertragungsart unseres Formulars gefunden und müssen ihn beheben.
Verfahren : Wir öffnen und aktualisieren jedes Formular.
OOP : Wir legen die Methode transmissionType in der Klasse vehicle fest, und die Änderung bleibt in jeder Klasse, die von ihr erbt, erhalten.
Wie Sie aus den obigen Szenarien ersehen können, hat die Verwendung eines OOP-Stils erhebliche Vorteile gegenüber der prozeduralen Programmierung, vor allem, wenn Ihr Umfang zunimmt. Bedenken Sie die Einsparungen, die wir durch OOP in Bezug auf wiederholten Code, Flexibilität und Wartung erzielen würden, wenn wir auch Formulare für Boote, Motorräder, Flugzeuge, Go-Karts, ATVs, Schneemobile usw. hinzufügen müssten.
Objekte und Methoden sind auch viel einfacher zu testen als die prozedurale Programmierung, indem man Unit-Tests zum Testen der Ergebnisse verwendet.
Bedeutet dies, dass man niemals prozedurale Programmierung verwenden sollte? Nicht unbedingt. Wenn Sie ein Mockup oder eine Proof-of-Concept-Anwendung erstellen, haben Sie vielleicht nicht die Zeit, alles objektorientiert zu machen. Daher denke ich, dass es besser wäre, für einen Prototyp prozedurale Programmierung zu verwenden, aber es wäre am besten, das Produktionsprodukt in OO-Manier zu erstellen.
0 Stimmen
Duplizieren: stackoverflow.com/questions/355796/
0 Stimmen
@hasen j - Das hatte ich nicht gesehen, aber hier gibt es einige gute Antworten.
0 Stimmen
Siehe auch: "Jargonfreier Vergleich von OOP vs. Procedural": stackoverflow.com/questions/1530868
0 Stimmen
Diese Frage scheint nicht zum Thema zu gehören, da sie nicht in den Rahmen der Diskussion fällt, wie sie im Hilfe-Center beschrieben ist.