Question

Il existe un principe d'ingénierie orienté objet qui énonce quelque chose du type "une classe ne doit connaître que les contrats des classes qu'elle prend comme arguments, ou tous les contrats internes qu'elle utilise".

Le contre-exemple, en C ++, est:

Foo::bar( Baz* baz)
{
  baz()->blargh()->pants()->soil();  // this is bad, Foo knows about blarghs and pants
}

Ce principe a-t-il un nom? En outre, il serait agréable de voir le principe actuel plutôt que la paraphrase ci-dessus.

Était-ce utile?

La solution

La loi de déméter grâce à Jim Burger dit:

La loi de Demeter (LoD), ou principe de moindre connaissance, est un guide de conception permettant de développer des logiciels, en particulier des programmes orientés objet. La ligne directrice a été inventée à la Northeastern University vers la fin de 1987 et peut être résumée succinctement comme suit: «Ne parlez qu'à vos amis immédiats». La notion fondamentale est qu'un objet donné doit assumer le moins possible la structure ou les propriétés de tout autre objet. (y compris ses sous-composants).

Autres conseils

Cela peut être compilé ou non (en raison des parenthèses après le pointeur baz), mais votre exemple enfreint au moins un principe auquel je peux penser. Cela enfreint la loi de Demeter (aussi appelée loi de parcimonie, je crois). Les principaux principes peuvent être trouvés ici: SOLID Principes

À part cela, je ne sais pas s'il existe un nom spécifique pour ce que vous décrivez. Vous pouvez consulter la loi de Demeter sur wikipedia.

Consultez les Principes SOLID de Robert Martin . En particulier, consultez le Principe de responsabilité unique . La chaîne complexe de dépendances de votre exemple ressemble à une rupture de la SRP.

L’encapsulation - elle-même - n’est pas un principe. Cela fait partie de la réalisation des différents principes. Outre l'héritage, le polymorphisme et d'autres fonctionnalités plus obscures de OO.

Je dirais ici qu'une bonne encapsulation contribue à réduire le couplage - - qui est un bon objectif pour toute encapsulation décente en dehors de l'évidence.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top