J'ai du mal à concilier le principe de responsabilité unique avec l'encapsulation. Il semble que la répartition des responsabilités entre les classes nécessite l'exposition de nombreuses données. Par exemple, considérons un objet appelé DataPoints
. DataPoints
est rempli de coordonnées x et y, entre autres choses. Je peux créer une classe Générateur qui remplit DataPoints
. Maintenant, disons que je veux tracer ces points de données. Il s'agit clairement d'une responsabilité distincte qui pourrait provenir d'une classe appelée DataPointsPlotter
. Mais pour tracer les données, j'ai besoin de savoir quelles sont les coordonnées x et y internes. Avec une seule classe gérant les deux, ce n'est pas un problème. x et y sont des variables internes, mais les méthodes create() et print() y ont accès. Je peux exposer x et y (peut-être par le biais de getters/setters--ugh) ou je peux passer la variable DataPoints
à la classe Plotter, mais elle doit encore entrer dans la classe pour obtenir x et y. Je peux avoir une instance de Plotter déclarée dans la classe DataPoints
à laquelle j'envoie x et y. Mais c'est toujours une exposition.
Comment puis-je, dans cet exemple, tracer x et y en utilisant le traceur sans violer l'encapsulation ?