2017-01-30 4 views
0

Donc, supposons que je travaille dans le monde des mathématiques discrètes et j'ai une certaine fonctionQuels objets possèdent la méthode? Traduit de mathématiques discrètes

f: A x B x C -> D. Avec cette fonction, je peux effectuer des calculs comme f(a,b,c) = d. (Je suis vague ici volontairement).

Supposons maintenant que je souhaite implémenter ce calcul explicitement dans un langage de programmation OO moderne. Donc, j'initialiser une variable appelée a de la classe ClassA et ainsi de suite avec b et c. Alors quoi? Quel objet doit posséder le calcul? Ou pourrait-il être un initialiseur. Serait-ce une fonction statique?

je pouvais avoir:

  • d = a.f_1(b,c),
  • d = b.f_2(a,c),
  • d = c.f_3(a,b),
  • d = new ObjD(a,b,c),
  • d = ZStatic.f_4(a,b,c)

tout aussi plausible options, je ne pouvais pas? Étant donné la situation, est-ce que la symétrie de la demande devrait implémenter toutes ces options? Je préférerais éviter complètement l'approche du constructeur, mais au-delà je ne sais pas ce que l'on pourrait faire d'autre que l'hypothèse d'une information essentiellement arbitraire.

Alors, quel objet devrait posséder la fonction $ f $, le cas échéant?

Répondre

2

Pour donner la meilleure réponse, il est important de connaître le type de variables que vous utilisez.

Une métrique très importante dans oop est d'atteindre haute cohésion. La cohésion est le degré d'appartenance des éléments d'un module. Si vos variables a, b et c appartiennent ensemble dans un contexte spécifique, alors ce devrait être la meilleure solution pour les placer exactement dans une classe. Et si elles sont dans une classe, vous ne devriez pas vous inquiéter, quelle classe devrait posséder le calcul (votre quatrième solution). Votre dernière suggestion, pour utiliser une fonction statique, est également envisageable. Cette approche est souvent utilisée dans les bibliothèques mathématiques dans différents types de langues (par exemple Java: Math class)