Introduction aux patterns de structuration
Présentation
L’objectif des patterns de structuration est de faciliter l’indépendance de l’interface d’un objet ou d’un ensemble d’objets vis-à-vis de son implantation. Dans le cas d’un ensemble d’objets, il s’agit aussi de rendre cette interface indépendante de la hiérarchie des classes et de la composition des objets.
En fournissant les interfaces, les patterns de structuration encapsulent la composition des objets, augmentant le niveau d’abstraction du système à l’image des patterns de création qui encapsulent la création des objets. Les patterns de structuration mettent en avant les interfaces.
L’encapsulation de la composition est réalisée non pas en structurant l’objet lui-même mais en transférant cette structuration à un second objet. Celui-ci est intimement lié au premier objet. Ce transfert de structuration signifie que le premier objet détient l’interface vis-à-vis des clients et gère la relation avec le second objet qui lui gère la composition et n’a aucune interface avec les clients externes.
Cette réalisation offre une autre propriété qui est la souplesse de la composition qui peut être modifiée dynamiquement. En effet, il est aisé de substituer un objet par un autre pourvu qu’il soit issu...
Composition statique et dynamique
Nous prenons l’exemple des aspects d’implantation d’une classe. Nous nous plaçons dans un cadre où il est possible d’avoir plusieurs implantations possibles. La solution classique consiste à les différencier au niveau des sous-classes. C’est le cas de l’utilisation de l’héritage d’une interface dans plusieurs classes d’implantation comme l’illustre le diagramme des classes de la figure 3-1.1.
Cette solution consiste à réaliser une composition statique. En effet, une fois que le choix de la classe d’implantation d’un objet est effectué, il n’est plus possible d’en changer.
Figure 3-1.1 - Implantation d’un objet par héritage
Comme expliqué dans la précédente section, une autre solution est de séparer l’aspect d’implantation dans un autre objet comme l’illustre la figure 3-1.2. Les parties d’implantation sont gérées par une instance de la classe ImplantationConcrèteA ou par une instance de la classe Implantation-ConcrèteB. Cette instance est référencée par l’attribut implantation. Elle peut être substituée facilement par une autre instance lors de l’exécution. Par conséquent, la composition est dynamique.
Figure 3-1.2 - Implantation d’un objet...