La question est un peu hypothétique. Disons que j'ai une application qui dessine un arbre. Mon contrôleur de structure implémente l'interface ITree qui décrit un arbre normal avec des méthodes comme: getChildren(), getParent() ... Certaines parties de l'application ont seulement besoin de savoir que la structure implémente ITree, donc elle peut chercher ses enfants ou ses parents . Ainsi, getParent() est suffisamment élevé pour renvoyer un objet typé ITree. Ainsi, getChildren() peut renvoyer une collection d'objets ITree.Devrions-nous utiliser des méthodes d'interface si nous le pouvons?
Mais :)
si dans la classe TreeNode hypothétique que je veux faire quelque chose de spécifique avec les enfants d'un nœud. Si j'utilise la fonction getChildren() de ITree, je dois leur attribuer à TreeNode pour pouvoir appeler les fonctions d'instance appropriées (qui ne sont pas définies par ITree). Ou je peux utiliser mon propre itérateur pour parcourir les nœuds enfants et faire ce que je peux (parce que de cette façon, ce sont vraiment des TreeNodes). La question est donc: est-il suggéré d'utiliser des fonctions d'interface chaque fois que c'est possible, ou des actions spécifiques à un objet ont parfois un sens?
Mise à jour: [illustration ajouté] (. Sa syntaxe AS3, mais le point est la structure)
Voici donc iTree:
public interface ITree {
function getParent():ITree;
}
Et voici ma classe TreeNode:
public class TreeNode implements ITree {
private var parent:TreeNode
public function getParent():ITree {
return parent;
}
function foo():void {}
function bar():void {
// Version 1 - using the interface
(getParent() as TreeNode).foo();
// Version 2 - using custom object accessor
parent.foo();
}
}
Lequel est le meilleur: version 1 ou 2?
Merci
Il est difficile de visualiser ce dont vous parlez. Pouvez-vous poster du code/pseudo-code illustrant de quoi vous parlez? – Oded