objektorientierte mathematica-Programmierung

Ich Frage mich, wie es zu tun im Allgemeinen, was sind die besten Strategien, etc. Ich habe einige Lösungen gesehen, und einige von Ihnen sehen wirklich schwer/mühsam zu bedienen. Die, die ich arbeitete für gebrauchte pur-Funktionen zu implementieren, die Objekt-Funktionen und-Köpfe wie OBJECT[]. Es war sehr schwer zu verwenden, die auf die Klasse Codierung Seite. Ich bekam Schwindel beim definieren von Funktionen und Konstruktoren (vor allem die Vererbung Teil war hart).

Also die emaphsis meine Frage ist auf die elegenace von dem codierenden Teil einer Klasse. Idealerweise bin ich auf der Suche nach etwas, das würde funktionieren wie folgt. Zunächst definieren wir eine Klasse, z.B. PKW wie folgt:

beginClass["vehicle"];
   public startTheEngine;
   private fuel;
   vehicle[args_]:=Block[{},...];
   startTheEngine[thrust_]:=Block[{}...];
endClass

beginClass["car", "vehicle"];
public TurnTheRadioOn;
private frequency;
car[args_] := Block[{...},];
TurnTheRadioOn[]:=
   Block[{},
      use private variable frequency
   ]
endClass;

Bitte beachten Sie, dass es ist sehr wichtig, dass die private - /public-Funktionen definiert sind, fast wie in einer "normalen" mathematica-code. Dies wäre die wichtigste Voraussetzung, so zu sagen.

Klasse verwendet werden, als

car1 = newObject["car", args];
car1.StartTheEngine[];
car1.TurnOnTheRadio[];

Ich bin neugierig, was ist das denn denken? Zu consturct so etwas wie das oben wohl beinhaltet viele Aspekte von Mathematica, z.B. wie würde man die ". " - syntax etc. Wenn Sie vorschlagen, ein vorhandenes Paket-ich wäre Ihnen dankbar, wenn Sie könnten kommentieren, wie es im Prinzip funktioniert.

Meine naive Erwartung ist, dass die Verkapselung Teil könnte behoben werden, indem BeginPackage Konstrukte. Alle Objekte, die gespeichert werden können in namespaces, die speziell für jede Klasse. Ich nehme an, dass die Objekte Aussehen würde

car1 = OBJECT["car"][fuel$1,frequency$1,....];
car2 = OBJECT["car"][fuel$2,frequency$2,....];

Ich nehme an, man hätte zu konstruieren, so etwas wie einen compiler, der zum konvertieren der definition der Klasse, obigen code in die Klasse ein .m-Datei. Auch, zu einem gewissen Grad, das zweite zentrale Thema ist, wie zu konstruieren, die so ein compiler.

Grüße
Zoran

p.s. Der Grund warum ich Frage ist, dass ich hatte wirklich eine Notwendigkeit für so etwas wie dies viele Male.

  • Beachten Sie, dass, wenn man nur auf der Suche nach Struct-wie-Fähigkeiten (d.h. die Fähigkeit, den Zugriff auf Daten, die mit Namen wie dataAboutBob[["weight"]), dann die Association - Struktur Hinzugefügt in Mathematica 10 verwendet werden kann. Mehr hier.
InformationsquelleAutor zorank | 2011-09-09
Schreibe einen Kommentar