2010-07-26 10 views
1

Je suis sur le point d'ajouter une classe X qui sera utilisée par mes trois classes précédemment conçues (A, B et C).Devrais-je utiliser une API/ABC lors de la conception d'une classe utilisée par plusieurs en C++?

La nouvelle classe X contiendra des données et des fonctions pour les nouvelles fonctionnalités et fournira des services aux classes qui l'utilisent pour masquer les couches inférieures. Le problème est que A, B et C utiliseront la classe X de manière très différente, c'est-à-dire utiliseront des fonctions différentes.

Ma question est de savoir si je devrais fournir une API (ou une classe de base abstraite en C++) pour la nouvelle classe X ou non. Si je devais, devrait cette API soit par classe X ou par classe A, B et C? J'ai lu quelque part qu'une API est parfois plus étroitement liée à cet appelant que la classe qui l'implémente. Si je fournis une API pour chaque appelant, l'API ne contiendra que les fonctions dont l'appelant a besoin. Ou devrais-je simplement créer une classe C++ normale et laisser les appelants utiliser un sous-ensemble des fonctions publiques de X dans A, B et C, bien qu'ils puissent "techniquement" les utiliser tous? Les fonctions de la classe X sont peu susceptibles de changer et le besoin de créer une classe similaire à X.

Si je ne suis pas complètement perdu dans la programmation orientée objet, une des raisons de fournir une interface/API pour une classe est ce code qui utilise l'interface/API n'a pas besoin de changer si vous ajoutez une autre sous-classe puisque l'appelant travaille sur le nom de l'interface et utilise la liaison dynamique pour résoudre le type de sous-classe correcte. Cordialement et s'il vous plaît faites le moi savoir si quelque chose n'est pas clair et je vais essayer de répondre le plus rapidement possible.

Merci,

Tomas

Répondre

0

Si les choses ne sont pas susceptibles de changer, cela ne vaut probablement pas le coup.

Si vous décidez, cependant, la question est de savoir si les nouvelles classes implémenteraient tout ou seulement une partie de la fonctionnalité. Par exemple, partagent-ils le stockage backend, donc tout doit être mis à jour en même temps (auquel cas il n'y a aucun intérêt à diviser), ou se rapportent-ils à des préoccupations totalement distinctes dans lesquelles le partage (comme suggéré par @GarethOwen) est probablement le chemin à parcourir.