Comment la loi de Demeter s'applique-t-elle aux systèmes orientés objet avec couplage et cohésion?
Je lisais un livre "Développement de logiciels et pratique professionnelle" et suis tombé sur le chapitre sur LoD, et j'étais curieux de savoir comment ce principe est appliqué dans les systèmes orientés objet.
Réponses:
Selon Emerson Macedo, la loi de Déméter stipule ce qui suit:
Cela correspond directement au principe du faible couplage car les unités (ou objets) sont censées le faire, un peu comme ci-dessus:
L'une des formes de couplage les plus faibles est le passage de messages, c'est-à-dire que les données sont partagées entre les objets via des appels de méthode avec des paramètres.
De plus, d'après ce que je peux voir, la loi de Déméter ne correspond pas directement au principe de haute cohésion car elle stipule seulement que les objets eux-mêmes devraient savoir quelles données ils possèdent eux-mêmes. Un objet à faible cohésion possède des membres de données qu'il n'utilise pas fréquemment dans ses propres méthodes. Il s'agit davantage du contenu d'un objet que de ses relations et des objets collaborateurs.
la source
Accouplement, simplifié
Lorsqu'un objet appelle une méthode, une propriété, etc. d'un autre objet, nous disons que les objets sont couplés. Nous l' appelons couplage parce que maintenant le callee ne peut pas changer quoi que ce soit au sujet de sa propre méthode / prop. sans casser l' appelant .
Ainsi, plus le couplage - méthodes, accessoires. - plus il est difficile de changer le code appelé sans casser tout le code qui l'utilise.
envisager le couplage
La plupart des connaissances provoquent un couplage fou
Ici, nous avons un
Employee
qui a unPerson
qui a une «adresse»Pour obtenir la rue , je dois appeler:
myEmployee.me.home.street
. C'est à 180 degrés à l'opposé du principe de moindre connaissance. Je dois savoir sur le fonctionnement interne, la structure composite, duEmployee
,Person
etAddress
les classes.Cette conception de classe défectueuse me force à connaître toutes ces classes et donc
myEmployee.me.home.street
me couple (l'objet appelant) à pas moins de 3 classes - pour obtenir une seule propriété!La moindre connaissance sauve la mise
Si je parle à la seule
Employee
classe Je demande le principe de moindre connaissance en soi, et en le faisant , nous automatiquement limiterai couplage à seulement cette classe, et en même temps isoler le couplage à celui d' une classe.En ajoutant toutes les propriétés nécessaires dans le
Employee
classe, nous fixons le couplage.Donc
Me permet d'appeler:
myEmployee.street
-Employee
Employee
- peu importe la complexité de sa structure.La moindre connaissance jusqu'en bas
Nous découplé myEmployee de
Person
etAddress
, et , idéalement , nous devrions continuer à appliquer les connaissances moins en ajoutant passe par des propriétés telles queEmployee
parle seulementPerson
etPerson
parle seulementAddress
la source
Une étude ( V. Basili, L. Briand et WL Melo. Une validation des métriques de conception orientée objet en tant qu'indicateurs de qualité ) a montré que les classes avec des ensembles de réponses plus importants ont tendance à créer plus d'erreurs que les classes avec un ensemble de réponses plus petit car plus d'ensemble de réponses signifie la possibilité d'un couplage plus élevé.
La valeur de la loi de Demeter est qu'elle réduit la réponse définie par définition. La méthode d'un objet ne peut appeler qu'une méthode de lui-même, tout paramètre transmis à la méthode, la méthode de tout objet qu'il a créé et la méthode de tout objet détenu directement. Étant donné que l'ensemble de réponses est plus petit, il y a moins de chances de couplage élevé. Étant donné que le module / méthode n'utilise que des références disponibles immédiatement, la cohésion est plus élevée.
la source
C'est assez simple; disons que A dépend de B et B dépend de C. Sans la loi de Déméter, vous pouvez utiliser à la fois B et C dans A mais en adhérant à cette loi, A ne dépend que de B, cela ne peut pas dépendre de C.
Cela permet un faible couplage car il réduit considérablement le nombre de dépendances d'un module; la cohésion, bien que différente dans son concept du couplage, est réalisée de la même manière. En ayant moins de dépendances sur un module, celles-ci deviennent plus spécifiques pour ce module et augmentent ainsi la cohésion. De plus, le nombre total de modules augmentera et ils deviendront plus spécialisés pour faire des choses spécialisées pour le module dépendant (contrairement aux objets divins) qui se traduisent directement en un système plus cohérent.
la source