Question

Comment le masquage d'informations permet-il de découpler les modules d'un système?

Était-ce utile?

La solution

L'encapsulation (masquage d'informations) vous permet d'exposer uniquement le minimum absolu au monde extérieur. Cela signifie que vous pouvez modifier les bits non exposés en fonction du contenu de votre cœur sans affecter les clients.

Un exemple. Supposons que vous ayez implémenté une structure de données contenant des chaînes dans un tableau. Si vous exposez le tableau, les utilisateurs de votre structure de données peuvent simplement utiliser str [7] pour obtenir la chaîne à la position 7.

Que se passe-t-il si vous décidez de réimplémenter votre structure de données sous forme d'arborescence équilibrée pour accélérer les recherches de chaînes. Pour ce faire, déplacez les chaînes dans un arbre et modifiez votre tableau pour qu'il soit non pas des chaînes, mais des pointeurs sur des emplacements dans l'arbre.

Cela va casser vos clients, car ils attendront des chaînes, pas des pointeurs. Chaque client devra changer pour obtenir les pointeurs du tableau, puis les rechercher dans l’arbre.

Cependant, si vous aviez totalement caché l'implémentation et simplement fourni une fonction:

String getStringAt (int n);

il vous suffirait de changer la structure de données et la fonction pour rester compatible.

Les clients ne ne se séparent pas car votre interface de programmation d'application (API) n'a pas changé.

L’une des règles les plus importantes que je suis avec les classes est de viser une cohérence maximale, un couplage minimal . En d’autres termes, une classe unique doit avoir tout ce dont elle a besoin (rien de plus) et partager le moins possible d’informations avec le monde extérieur.

Cela signifie que tout ce que les clients peuvent faire est d'appeler l'API. Ne pas exposer de méthodes non API ni autoriser un accès illimité à des variables publiques - tout devrait être fait avec des setters et des getters.

Autres conseils

Data Hiding ne dissocie pas tant les modules que cela permet de limiter le couplage entre eux.
En effet, aucun des éléments cachés ne peut être utilisé par un autre module que celui où ils sont définis, ce qui limite les liens possibles / dépendances / appelez-le ce que vous pouvez "couple". les modules ensemble.

En d'autres termes, il limite les échanges inter-modules à ceux qui sont spécifiquement définis dans l'API , ce qui est très utile lorsque la mise en œuvre d'un module donné est modifiée, car comme l'API reste la même, l'interop module fonctionnera. (Inutile d'explorer le code pour savoir si le module A utilisait la variable x du module B (si B cache x, il est le seul à l'utiliser!)

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