Schizophrénie (programmation orientée objet)

complication résultant de la délégation et des techniques de la programmation orientée objet

La schizophrénie d'objet ou la schizophrénie du self est une complication résultant de la délégation et des techniques de la programmation orientée objet, où self / this peut faire référence à plus d'un objet. En utilisant une métaphore qui fait référence à la confusion publique entre le trouble dissociatif de l'identité et le diagnostic psychiatrique de schizophrénie, où le premier est associé à des "personnalités dédoublées". On peut qualifier cette configuration en programmation orientée objet de schizophrénie d'objet ou de schizophrénie du self[1].

Aperçu modifier

Un objet peut être défini comme un concept informatique combinant données, comportement, et identité. Dans la programmation basée sur les classes, les objets sont construits sur des systèmes de classes, où un objet est une instance d'une classe. Les classes peuvent à leur tour être liées par héritage : une classe mère fournit le comportement par défaut d'un objet, et agit comme un modèle pour la création de celui-ci. Une classe fille (ou classe dérivée) peut être utilisée pour remplacer les comportements d'une classe mère, et peut être utilisée comme modèle pour les objets dont les comportements affinent ceux de la classe mère.

Une alternative aux classes et à l'héritage utilise les prototypes et la délégation[2], qui est utilisé dans la programmation basée sur des prototypes, plus dynamique. Au lieu d'utiliser une classe pour en affiner une autre, la délégation permet à un objet de remplacer le comportement d'un autre. L'objet d'origine a (analogue aux comportements de classe filles) peut déléguer certaines de ses méthodes à un autre objet b (analogue aux comportements de classes mères). Si a délègue sa méthode foo à la méthode bar de b, alors toute invocation de foo sur a entraînera l'exécution de la méthode bar de b . Cependant, bar s'exécute dans le contexte de l'objet a, par exemple, son identifiant self fait référence à a plutôt qu'à b.

Lorsque la délégation est utilisée, la question se pose : quelle est la valeur de self lors de l'évaluation d'une méthode sur l'objet a, qui est déléguée à une méthode sur l'objet b ? L'identité est dédoublée : elle peut faire référence à a ou b . Notez que si les deux objets sont séparés et ont une identité physique distincte, self (qu'il soit utilisé explicitement ou implicitement) est ambigu.

Histoire et discussion modifier

Herrmann [3] rapporte que le terme a été inventé par William Harrison, travaillant chez IBM Research, en mai 1997. Ce terme apparaissait dans un ensemble de pages Web qui traitaient des problèmes rencontrés par certains des modèles de conception courants (ces pages Web ne sont plus accessibles au public). Dans les exemples donnés, le problème a été aggravé par le fait que les solutions typiques utiliseraient une forme de délégation plus faible (parfois appelée transfert ) où la connaissance de l'objet récepteur d'origine est en fait perdue pendant la délégation. Ici, l'utilisation du transfert est due au fait que la plupart des langages de programmation orientés objet courants ne prennent pas en charge la forme de délégation la plus forte. Harrison et al ont proposé une programmation orientée sujet comme solution, qui, par composition statique, évite tout problème de schizophrénie d'objet. À l'autre extrémité du spectre, Herrmann montre qu'un langage comportant des rôles (Programmation Orientée Rôles) contextuels peut être conçu de telle manière que les problèmes potentiels de schizophrénie d'objet sont essentiellement non pertinents malgré l'utilisation de la délégation comme moyen de partager le comportement entre un objet de rôle et son objet de base associé.

Références modifier

  1. Uwe Aßmann, Invasive Software Composition, Springer-Verlag, 2003, p. 39.
  2. Lynn Andrea Stein, Delegation is Inheritance. Conference on Object Oriented Programming Systems Languages and Applications, Orlando, Florida, 1987, United States, pp. 138 - 146
  3. Stephan Herrmann, Demystifying Object Schizophrenia, in Proceedings of MASPEGHI Workshop at ECOOP 2010