Ich habe viele Freunde, die aus dem Bereich Elektrotechnik / Physik / Maschinenbau stammen und neugierig sind, worum es bei "OOP" geht. Sie alle kennen Matlab sehr gut, haben also grundlegende Programmierkenntnisse. Es fällt ihnen jedoch sehr schwer, ein komplexes Typsystem zu erfassen, das von den von OOP eingeführten Konzepten profitieren kann.
Kann jemand einen Weg vorschlagen, wie ich versuchen kann, es ihnen zu erklären? Ich bin mit Matlab selbst einfach nicht vertraut, daher habe ich Probleme, Parallelen zu finden. Ich denke, einfache Beispiele wie Formen oder Tiere zu verwenden, ist für diese Ingenieure etwas zu abstrakt. Bisher habe ich versucht, eine Matrix-Schnittstelle im Vergleich zu Array-basierten / sparse / was auch immer-Implementierungen zu verwenden, aber das hat nicht so gut funktioniert, wahrscheinlich weil verschiedene Matrixtypen in Matlab bereits gut unterstützt werden.
quelle
Antworten:
Seit 2008 unterstützt Matlab die objektorientierte Programmierung. Wenn sie sich also auf vertraute Weise über OOP informieren möchten, sollten sie sich die Matlab-Dokumentation zu OOP ansehen , insbesondere die Beispiele .
Vor einiger Zeit stellte ich einige meiner Matlab-Kollegen OOP vor. Hier sind einige Beispiele, die ich verwendet habe.
Wichtig ist, dass Sie alles, was Sie mit OOP tun, auch anders machen können. Mit OOP können Sie (1) fantastischere Strukturen erstellen, (2) Code bündeln und (3) Code einfach modularisieren und schneller programmieren.
Strukturen mit Feldern, die sich automatisch aktualisieren. Beispielsweise speichern Sie eine Koordinate in Pixel (weil Sie sie an einem Bild messen), aber für Entfernungsberechnungen möchten Sie sie in Mikrometern haben. Das Speichern von beiden in einer Struktur ist problematisch, denn wenn Sie eine ändern, dürfen Sie nicht vergessen, die andere zu ändern (und Sie werden es tun). Daher speichern Sie alle Koordinaten in Mikrometern. Dies bedeutet, dass Sie jedes Mal, wenn Sie sie in Pixel benötigen, konvertieren müssen, was ärgerlich und möglicherweise fehleranfällig ist.
Mit einem Objekt machen Sie "Koordinate in Pixel" zu einer abhängigen Eigenschaft, die Konvertierung wird automatisch und Sie müssen sich nicht darum kümmern, zwei Koordinaten gleichzeitig zu aktualisieren. Natürlich können Sie noch viel mehr tun. Zum Beispiel könnte Ihre Struktur eine 'edit'-Methode haben, die eine GUI öffnet, so dass Sie Werte leicht bearbeiten können. Oder es kann eine Speichermethode geben, die aufgerufen wird, wenn sich ein Wert in der Struktur ändert.
Sie können Funktionen mit Ihrer Datenstruktur bündeln. Beispielsweise können Sie eine angepasste Plotfunktion für Ihre von Ihnen aufgerufenen Daten verwenden
plot(myDataStructure)
. Ebenso können Sie benutzerdefiniertedisp
Methoden verwenden oder sogar Ihre Datenverarbeitungsmethoden an Ihre Daten anhängen lassen.quelle
struct
mit Methoden ist viel ansprechender als die in Matlab.struct
C grundlegende OOP-Funktionen hat, die Matlab-Klassen fehlen?Versuchen Sie nicht, ein Brückenbeispiel zu finden. OOP eignet sich in ganz anderen Bereichen als der Code im Matlab-Stil (und umgekehrt). Ich würde mich für die gleiche Erklärung entscheiden, die ich jemandem geben würde, der etwas über prozedurale Programmierung weiß, aber noch nie mit Strukturen oder ähnlichen Datenstrukturen gearbeitet hat.
quelle
Vektorisierter MATLAB-Code hat ein stark funktionales, deklaratives Gefühl, bei dem Matrizen häufig als Beispiele in einem bestimmten Raum betrachtet werden und Operationen an diesen Matrizen als Transformationen dieses Raums. Wenn ein Phänomen, ein Prozess oder eine Entität unter Verwendung von (vektorisiertem) MATLAB modelliert wird, existiert häufig eine explizite numerische Darstellung, die als Vermittler zwischen der Programmlogik und den konzeptuellen Elementen der zu modellierenden Entität fungiert. Infolgedessen spiegeln sich Komplexitäten in der Problemdomäne eher als numerische Komplexität als als Komplexität der Programmlogik oder des Steuerungsflusses wider.
Das objektorientierte Paradigma hat ein ganz anderes Gefühl: Es wird häufig in Verbindung mit einem viel direkteren Ansatz zur Modellierung struktureller Beziehungen in der Welt verwendet. In vielen Fällen ist das OO-Programm ein direktes Modell einer Entität, bei dem die Programmlogik direkt oder indirekt die Attribute und Eigenschaften des zu modellierenden Systems spiegelt. Infolgedessen weist die OO-Programmlogik tendenziell eine größere strukturelle "Tiefe" (und möglicherweise Komplexität) auf, da sie die Feinheiten des zu testenden Systems direkter widerspiegelt.
Allerdings gibt es viele Situationen, in denen das Paradigma der Objektmodellierung sehr gut auf die Art und Weise abgestimmt ist, wie ein bestimmtes Problem verstanden und beschrieben wird. Dies ist insbesondere dann der Fall, wenn versucht wird, diskrete Entitäten mit einem breiteren Spektrum von Attributen und Verhaltensweisen zu modellieren, sodass die Betrachtung jeder Entität einzeln und isoliert informativer ist als die Betrachtung jeder Eigenschaft einzeln und der Entitäten zusammen als Grundgesamtheit.
Mit OOP verbringen Sie Zeit damit, über einzelne Entitäten und ihre Eigenschaften nachzudenken. Kollektives Verhalten ist schwerer zu visualisieren und zu beobachten. Strukturen und Beziehungen werden in der Regel explizit im Code ausgedrückt.
Mit vektorisiertem MATLAB verbringen Sie Zeit damit, über Populationen von Entitäten nachzudenken. Kollektives Verhalten ist leichter zu beobachten. Strukturen und Beziehungen werden in der Regel implizit im Code ausgedrückt.
quelle
Die meisten Programmierer kennen einen Hauptaspekt der objektorientierten Programmierung, die Struktur. Ich würde erklären, dass ein Objekt wie eine Struktur ist, aber eigene Funktionsaufrufe hat, um mit den Daten innerhalb der Struktur umzugehen. Fügen Sie dann langsam weitere Details hinzu, z. B. Vererbung, Weitergabe von Funktionen usw.
quelle
Dann ist es ganz einfach: Lassen Sie sie Simulink versuchen. Simulink-Modelle sind im OOP-Geist. Wenn sie verstehen, wie ein Simulink-Modell erstellt wird, und wenn sie wissen, wie Simulink funktioniert, wissen sie bereits, worum es bei OO geht.
quelle
Matlab ist nur eine Sprache. OOP ist das Konzept.
Versuchen Sie, die Konzepte anhand einer weniger beispielhaften Erklärung zu erklären. Ingenieure verstehen sicherlich verschiedene Bereiche und Einheiten (z. B. das Hinzufügen von Temperatur zur Entfernung wäre ungerade), daher sollten sie die Kapselung und den Polymorphismus intuitiv verstehen, ohne konkrete Beispiele in Matlab zu benötigen. Sie sollten in der Lage sein, die Abstraktion leicht genug zu erklären. Vererbung und Zusammensetzung wären ohne Beispiele schwerer zu erklären, aber erklären Sie das Konzept klar und sie sollten verstehen.
Generika versus Typspezifität sollten durch Beispiele aus ihrem mathematischen Hintergrund motiviert werden. Funktionale Programmierung, Übergabe von Funktionen und Lambdas sind an sich keine OOP, und das ist schwieriger zu erklären, ohne einen abstrakteren mathematischen Hintergrund, der normalerweise Ingenieuren präsentiert wird (nachdem ich sowohl Ingenieurwesen als auch Software und Mathematik studiert habe, habe ich einen Einblick in ihre verschiedenen Spezialisierungen).
Möglicherweise können Sie Beispiele nicht direkt mit Matlab bereitstellen, aber Sie können Abstraktion und Kapselung anhand von Beispielen einschließlich Strukturen erläutern. Selbst in Sprachen, in denen Sie Ihre Funktionen (Methoden) nicht mit Ihren Daten kapseln können, können Sie dennoch erklären, wie bestimmte Funktionen nur für bestimmte Domänen definiert sind.
In Anbetracht der Tatsache, dass viele Entwickler die Komposition gegenüber der Vererbung schätzen, können Sie die Vererbung, die Zusammensetzung und die relativen Vorzüge der beiden erklären.
Sie können Polymorphismus auf natürliche Weise motivieren, indem Sie den Unterschied zwischen ganzen Zahlen, Rationalen, Realen und komplexen Zahlen überprüfen und dann erklären, wie die "normalen" arithmetischen Operatoren Funktionen (Methoden) sind, obwohl der Operator (ex '+') sieht gleich aus, es ist eine andere Funktion, wenn es mit verschiedenen Domänen verwendet wird.
Viel Glück!
quelle
Ich bin Elektrotechniker, habe aber mehr mit CS-Programmierern gemeinsam als mit EE-Programmierern. Insbesondere habe ich erfolglos versucht, meine Kommilitonen davon zu überzeugen, mindestens halbwegs strukturierten und modularen Code zu schreiben, geschweige denn objektorientierten Code.
Als ich versuchte, die OO-Funktionen von MATLAB zu verwenden, stieß ich schnell auf sehr ärgerliche Probleme. Eine Methode in einer Klasse MUSS ein Objekt dieser Klasse als erstes Argument verwenden und das Objekt zurückgeben, wenn es das Objekt ändert. Das macht Code wie
und Verwendung wie
Ich habe fast aufgegeben. Ich schlage vor, Sie lassen sie in Ruhe, bis MATLAB eine anständige OO-Unterstützung bietet. Bitten Sie sie stattdessen, MATLAB aufzugeben und versuchen Sie, Python oder ähnliches zu verwenden. Ich versuche (und scheitere) das zu tun.
Zumindest ist MATLAB OO in keiner Weise ein gutes Tor, um OO zu lernen. Sie könnten sie einfach für immer aufschieben.
quelle