Je vais répondre dans le désordre, ça évitera les redites.
Je ne comprends pas ce que ça veut dire (est-ce que parler de « services » est une façon cachée de parler d'interfaces ?).
Services, interface (au sens Java ou CORBA), fonctions, méthodes, comportements, ça représente à peu de choses près la même chose : les messages auxquels l'objet peut répondre.
Ca veut dire quoi séparer proprement ? Je vais pas m'amuser à dupliquer (proxy) pour le plaisir d'avoir un beau design qui plait aux théoriciens.[...] existantes.
Cela dépend de ce que tu veux au final. P.ex. si tu veux pouvoir réutiliser la partie calcul avec une UI totalement différente ou si tu es à peu près sûr que cela ne te reservira jamais.
Dans tous les cas tu réutilises les classes existantes, mais pas de la même façon, donc pas avec les mêmes avantages/inconvénients.
En gros, tu as trois façons :
1. une seule hiérarchie ou tu mélanges tout,
- avantage : tout au même endroit ;
- inconvénients : tout au même endroit, pas de modularité, ce n'est plus du couplage fort, c'est de la fusion ;
- avis personnel : vilain, caca, pouah, pas glop !
2. une hiérarchie calcul et une hiérarchie UI, avec les classes de l'UI qui utilisent (agrégation) les classes calcul,
- A : couplage faible entre calcul et UI ;
- I : une indirection supplémentaire (pour accéder à une donnée, il faut passer par l'agrégé ) ;
3. une hiérarchie calcul et une hiérarchie UI, avec les classes de l'UI qui héritent des classes de calcul,
- A : couplage plus faible que 1. ;
- I : mais plus fort que 2. ;
- autre A : un peu moins d'indirections ;
- autre I : confusion possible entre utiliser et hériter.
Je pense qu'hériter au lieu d'utiliser est une mauvaise chose car ce sont deux mécanismes conceptuellement différents. Ce que tu proposes c'est d'utiliser l'héritage à la place de l'agrégation pour
- raccourcir le code (mauvaise raison) ;
- simuler un mixin (meilleure raison mais encore faut-il :
1. le savoir ;
2. le noter (commentaires)).
Maintenant, tout ce que je dis ne sert à rien et n'avancera à rien si, comme pourrait sembler le faire penser l'exemple Laguna, tu ne fais pas la différence entre hériter et utiliser.
[^] # Re: Mes deux centimes ...
Posté par Sylvain Sauvage . En réponse au journal Repenser les langages et le développement logiciel. Évalué à 3.
Services, interface (au sens Java ou CORBA), fonctions, méthodes, comportements, ça représente à peu de choses près la même chose : les messages auxquels l'objet peut répondre.
Cela dépend de ce que tu veux au final. P.ex. si tu veux pouvoir réutiliser la partie calcul avec une UI totalement différente ou si tu es à peu près sûr que cela ne te reservira jamais.
Dans tous les cas tu réutilises les classes existantes, mais pas de la même façon, donc pas avec les mêmes avantages/inconvénients.
En gros, tu as trois façons :
1. une seule hiérarchie ou tu mélanges tout,
- avantage : tout au même endroit ;
- inconvénients : tout au même endroit, pas de modularité, ce n'est plus du couplage fort, c'est de la fusion ;
- avis personnel : vilain, caca, pouah, pas glop !
2. une hiérarchie calcul et une hiérarchie UI, avec les classes de l'UI qui utilisent (agrégation) les classes calcul,
- A : couplage faible entre calcul et UI ;
- I : une indirection supplémentaire (pour accéder à une donnée, il faut passer par l'agrégé ) ;
3. une hiérarchie calcul et une hiérarchie UI, avec les classes de l'UI qui héritent des classes de calcul,
- A : couplage plus faible que 1. ;
- I : mais plus fort que 2. ;
- autre A : un peu moins d'indirections ;
- autre I : confusion possible entre utiliser et hériter.
Je pense qu'hériter au lieu d'utiliser est une mauvaise chose car ce sont deux mécanismes conceptuellement différents. Ce que tu proposes c'est d'utiliser l'héritage à la place de l'agrégation pour
- raccourcir le code (mauvaise raison) ;
- simuler un mixin (meilleure raison mais encore faut-il :
1. le savoir ;
2. le noter (commentaires)).
Maintenant, tout ce que je dis ne sert à rien et n'avancera à rien si, comme pourrait sembler le faire penser l'exemple Laguna, tu ne fais pas la différence entre hériter et utiliser.