Dynamische änderungen von Klassen-oder Kontext-Aktivierung — wie zur Behandlung von bereits vorhandenen Objekte in einer konsistenten Art und Weise?

cs.stackexchange https://cs.stackexchange.com/questions/3156

Frage

Ich bin auf der Suche nach Referenzen und Papiere, die auf das folgende Thema.

  1. In Allgemeine, einige Programmiersprachen erlauben dynamische änderungen der Klassen.Als ein Beispiel, eine neue Instanz-variable "Gewicht" Hinzugefügt werden können, um die Klasse Edge (die Klasse der ungewichtete Kanten des Graphen).Aber was soll geschehen mit bestehenden edge-Objekte?

    Sie können aktualisiert werden, um die neue Instanz-variable mit einem Standardwert, vielleicht Gewicht 0, in der edge-Beispiel.Oder vorhandene Objekte bleiben die gleichen.

  2. In Kontext-orientierte Programmierung, ähnliche Situationen können auftreten, wenn ein Kontext ist dynamisch aktiviert, die zur Laufzeit.Dies kann Einfluss auf änderungen von Methoden, die aktuell ausgeführt werden (obwohl ich bin besorgt über die single-thread-Ausführung im moment).

  3. Angesichts design patterns, wenn ein proxy-Objekt umschließt ein anderes Objekt, Verweise auf das alte Objekt erwarten können bestimmte Invarianten, die die proxy-Objekt nicht einhalten.Auch dies kann zu Inkonsistenzen führen, wenn ein Objekt gewickelt ist/'updated' mit einem proxy-Objekt.

Gibt es Referenzen, die Liste der möglichen Wege, um zu behandeln das problem in der Fall von dynamischen änderungen/Aktivierung?Wie die Optionen zu halten, das konsistent?

Ich sah vor allem in den Gemeinden von dynamischen software-Entwicklung, Kontext-orientierte Programmierung und software-Komponenten.Gibt es weitere wichtige Gemeinschaften, die ich suchen kann, finden Sie Referenzen?

War es hilfreich?

Lösung

Eine neuere Arbeit zum Thema, die ich gestolpert ist Inkrementelle Dynamische Updates mit Erste-Klasse Kontexten von Erwann Wernli, Mircea Lungu, und Oscar Nierstrasz.Der Ansatz, der in das Papier basiert nicht auf Globale änderungen.Vielmehr mehrere Versionen von einem system gleichzeitig laufen lassen, was als Kontext.Objekte werden schrittweise Migration von einem Kontext in den anderen, zu welchem Zeitpunkt eine Aktualisierung durchgeführt wird.Bidirektionale Transformationen werden verwendet, um die Konsistenz zwischen alte und neue Kontexte.

Im Allgemeinen, ich denke, Sie müssen ein paar update-Funktionen für ein update, eine Aktualisierung Klassen, die andere zum aktualisieren Objekte.Die wirkliche Frage ist, Wann/wie wenden Sie das update-Funktionen, um Objekte.In jedem Fall werden Sie oft auch mehrere Versionen der Klassen etwa zur gleichen Zeit. UpgradeJ (von Biermann, Parkinson und Edle) ist eine Programmiersprache, die sich mit mehreren Versionen einer Klasse in einer Art safe-Mode.

Die Bibliographie der diese Papiere bietet ein paar Hinweise, die Sie Folgen könnten.Schauen Sie auch auf google scholar, um zu sehen, was Papier bauen auf diesen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit cs.stackexchange
scroll top