Le tout est plus grand que la somme de ses parties
-Aristote

Cette citation est attribuée à Aristote. L’idée de base est celle de la synergie. Dans le livre à succès de Stephen Covey, The 7 Habits of Highly Effective People, la sixième habitude est de Synergiser. Ce qui est vrai pour les organisations l’est aussi pour l’informatique. Le corps d’un objet a plus de valeur que son individu. En informatique, on utilise le terme de composition.

Composition

Alors qu’entend-on par composition ? « La composition est l’un des concepts fondamentaux de la programmation orientée objet. Elle décrit une classe qui fait référence à un ou plusieurs objets d’autres classes dans des variables d’instance. Cela permet de modéliser une association has-a entre des objets. » C’est ainsi que Stackify le décrit ici. Pensez-y comme à un orchestre. Un seul interprète, c’est bien, mais lorsque vous avez tout le groupe ensemble, la musique est plus riche et plus profonde.

Avantages

Le principal avantage pour le code créé avec une composition appropriée est la réutilisation. Si vous le concevez correctement, il devrait être facile à réutiliser. Si ce n’est pas le cas, il peut être assez encombrant. Avec cela, il y a une API ou interface de programmation d’application intuitive et propre. En tant que programmeur Java expérimenté, j’ai entendu de nombreuses personnes se plaindre de la conception de l’API de threading de Java. Une bonne conception devrait vous permettre de changer quelque chose en interne et ne pas changer la façon dont les autres interagissent avec elle.

Exemples

Créons un exemple pour que nous puissions voir à quoi ressemble la composition en Java.
Ici, nous avons notre classe Rôle définie.
La classe Rôle est utilisée dans cette classe Employé. Dans la composition, vous diriez que la classe Employee « has-a » Role.

Hiding

Dans notre exemple d’API, les classes HotDogGrinder et HotDogGrill sont package-private et ne sont pas accessibles de l’extérieur.
Voici la face publique de notre API, HotDogMachine. Cette classe a une référence aux deux classes internes que nous cachons avec notre conception d’API.

Composition vs héritage

Composition et héritage peuvent être confondus par les développeurs. Comme Steven Lowe le souligne dans cet article de blog ThoughtWorks, nous devons choisir avec soin lequel utiliser.

Il partage la règle empirique souvent entendue, « favoriser la composition par rapport à l’héritage ». Comme avec toute règle empirique, nous devons comprendre qu’elles ne s’appliquent pas toujours. Donc, mettons quelques choses au clair avant d’aller plus loin.

Définissons l’héritage puisque nous avons déjà longuement parlé de la composition. L’héritage est l’un des fondements de la programmation orientée objet. Par exemple, si nous avons une classe de nourriture, alors la classe de pain hériterait de la classe de nourriture. Alors que la composition traite des éléments qui font partie d’une plus grande unité.

Lowe nous rappelle que lorsque vous pourriez utiliser l’un ou l’autre, nous devons poser deux questions différentes. Premièrement, « La représentation/implémentation des concepts de votre domaine est une dimension. » Essentiellement, si les deux sont dans le même domaine, l’héritage est probablement votre meilleur pari. Deuxièmement, « La sémantique de vos concepts de domaine et leur relation les uns avec les autres est une deuxième dimension ». Les composants que vous créez commencent à transmettre à un autre cela pourrait être un signe que vous pourriez avoir besoin de reconsidérer l’utilisation de l’héritage à la place.

La composition est un grand principe dans le développement de logiciels que beaucoup d’entre nous, les professionnels, gâchent. Je l’ai fait moi-même en créant des solutions ne l’abordant pas correctement. Une discussion rapide sur le tableau blanc avec un collègue ou l’esquisse de quelque chose sur un morceau de papier peut vous aider à comprendre quand il y a une relation « has-a » entre deux objets. Après avoir lu tout ceci, vous devriez également comprendre les avantages et savoir comment l’utiliser dans un exemple. Essayez de construire un exemple et de l’utiliser alors vous devriez savoir si vous êtes sur la bonne voie ou peut-être que l’héritage pourrait être une meilleure voie.

1 Shares

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.