2010-12-10 38 views
0

Voyant que je suis vraiment nouveau à la POO, cela aurait pu être évité si j'avais su mieux. J'ai commencé environ un an avec ma bibliothèque de classe et fait une classe Appelons-le Tree et jusqu'à maintenant la classe Tree a fonctionné correctement, elle fait exactement ce dont j'ai besoin.SuperSet aux classes de sous-ensemble sans casser le code ancien

Eh bien, maintenant je l'ai remarqué que j'ai différents types d'arbres de

Je voudrais passer quelques fonctions arbre à son propre espace de noms et de créer de nouveaux pour ces arbres, Comment faire cela sans casser systèmes qui implémente déjà l'arbre actuel?

Est-il possible que je peux « Forward » appels de l'existant à la nouvelle

Répondre

0

Selon les nouveaux types d'arbres, vous pourriez avoir un superarbres qui contient une instance d'arbre pour effectuer certaines de ses fonctions, mais fournit des fonctionnalités supplémentaires uniques au SuperTree. Vous faites l'appel 'forwarding' en écrivant des méthodes wrapper pour les fonctions que vous voulez directement manipulées par l'instance Tree interne.

Dans certains cas, il peut également être logique que SuperTree descende de Tree, mais uniquement si Tree a été conçu avec ce type d'extensibilité en tête et que vous souhaitiez passer un SuperTree à la place d'un Tree.

Pensez comme ceci:

  • Un bâtiment peut contenir un châssis en acier et repose sur, mais ce n'est pas un type de structure en acier.

  • Un hôtel est une sorte de bâtiment et a donc ce que les bâtiments ont, comme les portes et les fenêtres.

Si votre arbre est plus comme un composant d'un système plus large (la charpente d'un bâtiment), puis vous développez sur sa fonctionnalité en composant comme membre privé d'une nouvelle classe. Si c'est une entité riche en soi, avec des points d'extensibilité bien définis, vous pouvez descendre de nouvelles classes à partir de l'arborescence qui développe simplement son comportement existant.

+0

Merci C'est exactement mon plan, mais il y a des structures et des sortes de choses dans cet espace de noms qui ne s'applique plus. Il se peut que je doive simplement copier et coller dans ce nouvel espace de nom et marquer les anciens comme obsolètes. – Gaven

+0

@Gaven, dans ce cas, vous pouvez utiliser l'attribut '[Obsolete]', qui va générer des avertissements pour les compilations qui s'appuient sur les classes obsolètes. –