Beim Unterrichten einer ersten Sprache für jemanden ohne Programmierkenntnisse fällt es mir schwer, OOP zu definieren, obwohl ich OOP bevorzuge.
Bringt es auf den Punkt
Beim Unterrichten einer ersten Sprache für jemanden ohne Programmierkenntnisse fällt es mir schwer, OOP zu definieren, obwohl ich OOP bevorzuge.
Eine Objekt ist einfach ein Ding mit einer Reihe von benannten Eigenschaften. Die Werte dieser Eigenschaften definieren die Staat eines Objekts. Die Interaktion zwischen Objekten erfolgt über Nachrichtenübermittlung . Eine Nachricht besteht aus einem Namen und einer Reihe von Parametern. Wenn ein Objekt eine Nachricht empfängt, wird die Nachricht von dem Objekt verarbeitet. Die Verarbeitung einer Nachricht kann dazu führen, dass sich der Zustand des Objekts ändert und Nachrichten an weitere Objekte gesendet werden.
Jede Erklärung von OOP hängt stark von der Interpretation des Konzepts durch den Erklärenden ab. Meine Interpretation des Konzepts sieht in etwa so aus.
Die reale Welt wird weitgehend als eine Menge von Akteuren verstanden. Jeder Akteur hat eine Reihe von Eigenschaften und Verhaltensweisen. In den meisten Fällen werden die Eigenschaften eines Akteurs in Form seines Verhaltens in Bezug auf seine Interaktion mit anderen Akteuren ausgedrückt.
Ein Computerprogramm ist in der Regel eine Simulation eines realen Prozesses. Daher ist es für den Programmierer in der Regel hilfreich, das Programm auf der Grundlage eines Akteur-Verhaltens-Eigenschafts-Modells zu erstellen. Das heißt, jedes Element des gesamten Programms kann in kleinere Programme unterteilt werden, die einzelne Akteure darstellen.
Natürlich kann man das nur bis zu einem gewissen Grad tun. Nicht alles, was wir modellieren wollen, ist ein einzelner Akteur. Zum Beispiel ist die Währung konserviert, aber in vielerlei Hinsicht unendlich unterteilbar.
Außerdem können andere Methoden zur Modellierung der realen Welt strengere Korrektheitsgarantien auf Kosten einer größeren Abstraktion bieten, wie z. B. ein relationales Modell, das sich aus der Mengenlehre ableitet. OOP hat keine solche mathematische Grundlage.
Es ist so einfach wie Kuchen rückwärts buchstabiert. Die 3 Grundprinzipien der Oo sind:
Verkapselung Vererbung Polymorphismus
Zeigen Sie dem Neuling den Code für das Standardbeispiel zum Zeichnen von Formen, das in den meisten OO-Programmierbüchern zu finden ist. Zeigen Sie ihm auch den Nicht-OO-Code, der viele Schalter mit globalen Daten verwendet.
Sie sollten anhand der organisatorischen Unterschiede zwischen den beiden Codesätzen ein Gefühl für oo bekommen.
Es ist seltsam. Sie fragen, wie man OOP Leuten beibringt, die nichts über PROGRAMMIEREN wissen, und jeder antwortet: "Wie bringt man OOP bei?"
Die Antwort lautet: Sie haben keine. Wie lehren Sie funktionale Programmierung für jemanden, der noch nie programmiert hat? Nein, das tun Sie nicht. Man hat Funktionen, die mit Code vollgestopft sind, die wiederverwendet werden, usw. In Java muss Ihr gesamter Code in einer Klasse enthalten sein. Was ist eine Klasse? In erster Linie ist sie ein Ort, an dem Sie Ihren Code ablegen können. Programme beginnen mit der Main-Methode. Später kann man sie instanziieren, und jede Klasse hat ihre eigenen Methoden und Eigenschaften. Und dann spricht man von statischen Methoden und Variablen. Und irgendwann später spricht man dann über Polimorphismus und Vererbung. Und irgendwann fangen sie dann an, ihre eigenen APIs zu entwerfen und Servlets und persistente Klassen zu verwenden oder was auch immer das Neueste ist, das man implementieren kann (Snervlets? IHibernate?)
Aber wenn Sie noch nie etwas mit Programmierung zu tun hatten, brauchen Sie sich nicht hinzusetzen und das große OOP-Gespräch zu führen. Das ist nur notwendig, wenn Sie jemanden vor einer Nicht-OOP-Programmierung bewahren wollen. Bringen Sie einfach Programmieren bei. OOP-Programmierung? Gibt es noch eine andere Art? Ja, aber das unterrichten wir heute nicht, also machen wir uns darüber keine Gedanken.
[In Analogie dazu: Wenn Sie einen Kampfsportkurs besuchen, nehmen sie sich normalerweise nicht viel Zeit für Erklärungen. Zuerst dehnt man sich, dann wird trainiert, und dann werden einem einige Techniken beigebracht. Wenn du herausfinden willst, welche Kampfsportart du studierst, gehst du in die Bibliothek].
Derjenige, dem Sie das erklären, muss wissen, was grundlegende Programmierung ist, bevor er lernen kann, was OOP bedeutet, denn es ist ein Zweig der Programmiersprachen. Er kann niemals verstehen, was OOP so besonders macht, wenn er die Gegenstücke nicht kennt. Ihre Frage besteht also aus zwei Teilen: Wie kann man erklären, was eine Programmiersprache ist und was OOP von anderen Programmiersprachen unterscheidet.
Am einfachsten lässt sich ihm erklären, worum es beim Programmieren im Allgemeinen geht, wenn man es mit mathematischen Operationen vergleicht. Sie können es erklären, indem Sie Programmieren als eine Reihe von mathematischen Ausdrücken definieren, die eine Eingabe annehmen und eine Ausgabe ergeben. Wie weit Sie dabei gehen wollen, bleibt Ihnen überlassen.
Mit dieser Erklärung haben wir die Basisarbeit geleistet, damit er versteht, was OOP bedeutet. Jetzt können wir Objekte als Mengen von mathematischen Funktionen und Daten definieren. Anstatt also die Logik als globale Code-Blöcke zu behandeln, fassen wir diese Code-Blöcke in Objekten zusammen, um relevante Codestücke zu sammeln und eine Möglichkeit zu erhalten, sie zu isolieren. Von diesem Punkt an können Sie weitere Vorteile der Objektabstraktion erläutern (z. B. Polymorphismus, lose Kopplung).
Genauer gesagt handelt es sich um eine Sammlung von Funktionen und Daten. Jede Funktion nimmt das Objekt und die anderen Parameter auf. Andernfalls handelt es sich nicht um eine Funktion, da sich der Zustand ändern kann. Erinnert mich an Python. Leider ist dies nicht sehr nützlich, um zu sagen, wie Objekte verwendet werden sollen.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
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.