Dynamique changements aux classes ou activation de contexte - comment traiter les objets existants de manière cohérente?
-
16-10-2019 - |
Question
Je cherche des références et des documents sur le sujet suivant.
-
général , certains langages de programmation permettent des changements dynamiques aux classes. À titre d'exemple, on peut ajouter « poids » une nouvelle variable d'instance à la
Edge
de classe (la classe des bords non pondérée des graphiques). Mais ce qui devrait arriver avec des objets de bord existants?Ils peuvent être mis à jour pour inclure la nouvelle variable d'instance avec une valeur par défaut, peut-être
0
de poids, dans l'exemple de bord. Ou les objets existants restent les mêmes. -
orienté contexte de programmation, des situations similaires peuvent survenir, lorsqu'un contexte est dynamiquement activé lors de l'exécution. Cela peut influer sur les changements aux méthodes qui sont en cours d'exécution (bien que je suis préoccupé par la seule exécution de fil au moment).
-
Considérant design patterns , lorsqu'un objet proxy enveloppe un autre objet, les références à l'ancien objet peut attendre certains invariants que l'objet proxy ne respecte pas. Cela peut également conduire à des incohérences lorsqu'un objet est enveloppées / » mis à jour » avec un objet proxy.
Y a-t-il des références qui liste les moyens possibles pour traiter le problème en cas de changement / activation dynamique? Comme les options pour maintenir constante l'état?
je regardais principalement dans les communautés de l'évolution dynamique du logiciel, la programmation orientée contexte et des composants logiciels. Y at-il d'autres communautés importantes que je peux recherche pour trouver des références?
La solution
Un article récent sur ce sujet que je suis tombé sur est- par Erwann Wernli, Mircea Lungu et Oscar Nierstrasz. L'approche adoptée dans le document ne repose pas sur des mises à jour globales. Au contraire, plusieurs versions d'un système exécutent simultanément dans ce qu'on appelle un contexte . Les objets sont peu à peu migré d'un contexte à un autre, auquel moment une mise à jour est effectuée. transformations bidirectionnelles utilisées pour maintenir la cohérence entre les anciens et nouveaux contextes.
En général, je pense que vous devez avoir une paire de fonctions de mise à jour pour toute mise à jour, une pour les classes de mise à jour, l'autre pour la mise à jour des objets. La vraie question est quand / comment vous appliquez les fonctions de mise à jour des objets. Dans tous les cas, vous aurez souvent plusieurs versions de classes autour en même temps. UpgradeJ (par Biermann, Parkinson et Noble) est un langage de programmation qui traite de plusieurs versions d'une classe dans un type de façon sûre.
La bibliographie de ces documents fournit quelques pistes que vous pourriez suivre. Regardez aussi le chercheur de Google pour voir ce que le papier se appuyer sur ces.