Objektorientiertes JSL – Beispiele?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Im Anschluss an den großartigen Vortrag, den Drew Foglia auf der Entdeckungskonferenz Europa hielt ( Objektorientiertes JSL – Techniken zum Schreiben von wartbarem/erweiterbarem JSL-Code ), versuche ich mein erstes objektorientiertes JSL zu schreiben.
Ich kann ObjectClass.jsl (aus den von Drew bereitgestellten Kernbeispieldateien) verwenden, um Eigenschaften für ein von mir erstelltes Objekt abzurufen und festzulegen.
Meine Frage ist, ob jemand ein paar einfache Beispiele hat, die er teilen könnte, um zu sehen, wie diese Idee umgesetzt werden kann. Wie könnte beispielsweise das folgende Beispiel als Objekte aussehen (wenn man bedenkt, dass ich in der realen Welt wahrscheinlich Details speichern möchte wie Tabellenname, NEIN. Spalten, Spaltennamen, NEIN. Zeilen, Beschriftungsspalten usw. für jede Tabelle)?
NamesDefaultToHere(1);
dt1 = Open("$SAMPLE_DATA/Cars.jmp");
dt2 = Open("$SAMPLE_DATA/Cars 1993.JMP");
//Tabellen verbinden (angenommen, eine Funktion wurde verwendet, um die passenden Spaltennamen zu finden)
dt3 = Datentabelle( dt1 ) << Join(
With( Datentabelle( dt2 ) ),
Spalten mit demselben Namen zusammenführen,
Durch übereinstimmende Spalten( Column(dt1,1) = Column(dt2,1), Column(dt1,2) = Column(dt2,2) ),
Drop-Vielfache( 0, 0 ),
Nichtübereinstimmungen einschließen (0, 0),
Haupttabellenreihenfolge beibehalten( 1 )
);
//Ergebnis anzeigen
win1 = dt3 << Graph Builder(
Größe( 534, 447 ),
Systemsteuerung anzeigen( 0 ),
Variablen( X( :Size ), Y( :Name( "Radstand (Zoll)" ) ) ),
Elemente (Punkte (X, Y, Legende (38)), Boxplot (X, Y, Legende (39)))
);
//Aufräumen
win1 << On Close(dt1 <
Wann würde ich mich entscheiden, eine neue Klasse zu erstellen? Die generische ObjectClass würde für Tabellen gut funktionieren, vorausgesetzt, ich kann mich daran erinnern, welche Eigenschaft ich welchem Schlüssel zugewiesen habe!
Danke,
Stephan
Betreff: Objektorientiertes JSL – Beispiele?gezeichnetfoglia
Zunächst einmal liebe ich die Details, die Sie hier anbringen.Wenn es Ihnen nichts ausmacht, dass ich den Anwalt des Teufels spiele, warum erstellen Sie dann den obersten Namespace, wenn die Funktion einen Namespace zurückgibt?Namespaces sind nicht stapelbar und in allen Beispielen bis auf eines ist die einzige Funktion in diesem Namespace eine Instanziierungsfunktion.Ich denke nur, dass die Klasse anhand ihres Namens instanzierbar sein sollte und alles darin enthalten sein sollte, also anstelle von ObjectClass:newObject().Ich bin nur neugierig auf deinen Denkprozess.
Ich habe mich schon eine Weile über objektorientierte Dinge lustig gemacht, aber Ihr „this=namespace(expr(ns<
Danke,
Vince
Betreff: Objektorientiertes JSL – Beispiele?Stephen.Pearson
Ich weiss gezeichnetfoglia Ich habe Ihre Frage bereits beantwortet, aber ich war gerade dabei, eine Antwort zu verfassen, also werde ich sie einfach so darlegen, wie es wert ist.
Erstens kann meiner Meinung nach die Datentabelle selbst bereits als Objekt betrachtet werden.
dt1 = NewTable() – Erstellt eine neue „Instanz“ von Datatable
ShowProperties(dt1) – Zeigt alle „Eigenschaften“ und „Methoden“ für das Datatable-Objekt dt1 an.
Man kann darüber nachdenken, das vorhandene Datentabellenobjekt um zusätzliche Eigenschaften und Methoden zu „erweitern“, wie in Drews Antwort. Ich dachte darüber nach, zusätzliche Funktionen zu haben, wie zum Beispiel:
1. Rowstate-Handler.
2. Spalte und Zeile, Erkennung hinzufügen/löschen.
3. Änderungsverlauf der Tabellenzelle.
4. Datenbox (Anzeigebox)
So könnte ein möglicher „Konstruktor“ für das DatatableObject aussehen, in dem Mitgliedsvariablen und Funktionen deklariert werden. (Beachten Sie den Expr( New Namespace() ).
Die Idee hinter der Deklaration des Objekts auf diese Weise besteht nicht nur darin, eine replizierbare Entität zu schaffen, sondern auch darin, die Funktionen und Ausdrucksnamen klar zu erkennen, die verwendet werden können, sobald sie vollständig definiert sind.

Meine Version des NewDatatableObject (teilweise Auflistung). Hier werden die Mitgliedsfunktionen tatsächlich definiert:


So erstellen wir beispielsweise zwei separate Instanzen von DatatableObject:

Diese Tabellen verfügen jetzt über integrierte „erweiterte“ Eigenschaften. In diesem Beispiel werden einige Tabellenaktionen verfolgt, z. B. das Erkennen der Zeilenauswahl und das Löschen von Spalten/Zeilen.


Man kann sich auch eine Vielzahl weiterer nützlicher Funktionen vorstellen, die mit dieser Methode implementiert werden könnten.
Betreff: Objektorientiertes JSL – Beispiele?Hallo, Philip
Es ist sehr subtil. Wenn Sie sich Zeile 30 der DataTableClass-Definition ansehen, sehen Sie Folgendes:

super wird als lokale Variable definiert (auf den Lebenszyklus der Funktion beschränkt) und ihr wird die DEFINITION der bereits vorhandenen Funktion deleteChildReferences zugewiesen.
Lesen Sie das noch einmal.
Lassen Sie es mich anders sagen. Es gibt bereits eine Funktion, deleteChildReferences, im Namespace (definiert in der ObjectClass.jsl, die enthalten ist und zugewiesen wird, wenn der ObjectClass:newObject()-Aufruf in Zeile 6 ausgeführt wird). In der DataTableClass ersetzt Zeile 29 diese Zuweisung. Bei der Neuzuweisung erstellen wir jedoch eine lokale Variable „super“, die einen Verweis auf die ursprüngliche Funktionsdefinition enthält – die in ObjectClass deklarierte. Auf diese Weise überschreiben wir das Verhalten dieser Funktion, indem wir in diesem Fall Code zum Schließen der Tabellenreferenz hinzufügen und dann weiterhin die ursprüngliche Funktionsdeklaration mit dem super()-Aufruf aufrufen können.
Betreff: Objektorientiertes JSL – Beispiele?gezeichnetfoglia ,
Das war wirklich hilfreich, danke. In meinem aktuellen Projekt gibt es nichtlineare Interaktionen, daher denke ich, dass dieser Ansatz es mir einfacher machen wird, die Metadaten, die ich von den Benutzern sammle, unter einen Hut zu bringen.
Betreff: Objektorientiertes JSL – Beispiele?gezeichnetfoglia
Verzeihen Sie mir, wenn ich das übersehen habe, aber wo ist „super()“? definiert?
Betreff: Objektorientiertes JSL – Beispiele?Stephen.Pearson ,
Es tut mir leid, dass die Antwort so lange gedauert hat. Ich werde für das von Ihnen bereitgestellte Beispiel ein Beispiel für eine „Klassen“-Definition und deren Verwendung geben. Es ist wichtig zu überlegen, ob Sie dies möchten/brauchen. Wie Sie betont haben: „Wann würden Sie sich entscheiden, einen neuen Kurs zu gründen?“ Wie Sie sich vielleicht aus meiner Präsentation erinnern, habe ich vorgeschlagen, dass die Projektgröße, die gemeinsame Entwicklung, die Langlebigkeit, die Notwendigkeit der Wiederverwendung usw. berücksichtigt werden sollten, bevor festgestellt wird, ob OO-Konstrukte der beste Ansatz sind. Ich werde antworten msharp 's Kommentare mit mehr zu diesem Thema.
Zurück zu deinem Beispiel. Mit der ObjectClass als übergeordneter Klasse könnten wir, obwohl nicht erforderlich, eine DataTableClass erstellen:

Die Verwendung der Felder für DataTableClass-Instanzen würde wie folgt aussehen:

Für ein so einfaches Beispiel gäbe es keinen Grund, die OO-Konstrukte zu verwenden. Wenn Sie jedoch einen Fall in Betracht ziehen, in dem Sie Sammlungen von Tabellen verwalten, Benutzern und externen Systemen ermöglichen möchten, Kommentare und andere Attribute hinzuzufügen, diese Sammlungen weiterzugeben, bestimmte Ereignisse zu verarbeiten und auf sie zu reagieren, zukünftige Erweiterungen und Erweiterungen zu planen, einzurichten ein „Vertrag“, durch den andere diese Tabellen usw. problemlos nutzen können. Dann ist die Verwendung von OO-Konstrukten wie diesen sehr vorteilhaft.
Betreff: Objektorientiertes JSL – Beispiele?Versteh mich nicht falsch.OOP ist eine großartige Methode, die hervorragenden Code produziert, FP ist jedoch dasselbe.Wenn Sie ein erfahrener Programmierer sind, können Sie die erforderliche Codequalität auf FP-Art und Weise erstellen Das Schreiben von Pseudo-OOP ist eher eine Übung darin, ob es getan werden kann, als dass es getan werden sollte.Wenn Sie ein fortgeschrittener Programmierer sind, der sich nur mit OOP auskennt und daher auf vertraute Weise programmieren möchte, empfehle ich Ihnen, FP zu lernen, da es Ihnen dabei hilft, in vielen Sprachen zu wachsen, anders zu denken und besser zu programmieren.Wenn Sie ein fortgeschrittener Programmierer sind, der sich nur mit FP auskennt und OOP lernen möchte, um Ihren Horizont zu erweitern, würde ich empfehlen, zunächst eine andere Sprache zu lernen, in der tatsächlich Klassen und Objekte implementiert sind.Wenn Sie ein unerfahrener Programmierer sind, der wirklich nichts weiß und gerade gehört hat, dass OOP cool ist, dann befolgen Sie meinen Rat und vergessen Sie es für den Moment.Vor allem, wenn Sie hauptsächlich in JSL Skripte erstellen.
Persönlich würde ich warten, bis JMP Klassen und Objekte implementiert, damit echtes OOP realisiert werden kann.Ich bin mir nicht sicher, ob sie es überhaupt auf dem Schirm haben, aber ich bin mir sicher, dass es passieren wird. Ich meine, wir haben jetzt Klassen und Objekte in JavaScript.Man weiß nie, was die Zukunft bringen wird.
Betreff: Objektorientiertes JSL – Beispiele?Stephen.Pearson ,
Ich freue mich sehr, jemanden zu sehen, der sich für dieses Thema interessiert. msharp Ich habe Recht, wenn ich sage, dass JSL KEINE OOP-Sprache ist. Aber in der jüngeren Vergangenheit konnte ich „Pseudo-OOP“-Konstrukte in JSL realisieren. Ich freue mich, meine Arbeit mit Ihnen zu teilen. Ich werde sehen, ob ich eine angemessene Antwort auf die von Ihnen gestellte Frage finden kann ... Stehen zu
Phil
Betreff: Objektorientiertes JSL – Beispiele?Nur meine Anmerkung: Vergessen Sie alles, was Sie in diesem Vortrag gelernt haben.
JSL ist KEINE objektorientierte Sprache.OOP eignet sich hervorragend für Sprachen, die keine integrierten Datenstrukturen haben, ist aber bei weitem nicht die einzige Möglichkeit zum Programmieren.Die meisten Programmierer mit einem Java-, C++- oder C#-Hintergrund können sich jedoch nicht mit dem Programmieren auf Nicht-OOP-Art auskennen.In JMP werden Datenstrukturen am besten den Datentabellen überlassen.Dies bringt Vor- und Nachteile mit sich.Meiner Meinung nach KÖNNEN Sie ein Frankenstein-Objekt aus einer JSL-Datentabelle zusammenfassen, aber dann bleiben Ihnen alle Nachteile und keine Vorteile übrig.
Was für JSL ICH S Gut darin ist funktionale Programmierung.JSL unterstützt Funktionen UND Ausdrücke.Mithilfe funktionaler Programmierung kann es alles, was Sie benötigen, sauber erledigen.In diesem Artikel finden Sie einige Vor- und Nachteile im Vergleich der beiden Programmiermethoden: CodeNewbie