bon, je sais que l’héritage multiple n’existe pas, mais j’aimerai savoir si vous connaissez un moyen de faire ce qui suit :
J’ai besoin d’une classe TapisRoulant, qui hérite de la classe Automate, et qui contient en plus (entre autre) les variables cmdMarcheArret, estDemarre, et des fonctions qui s’y rapporte (ca, pas de problème)
J’ai besoin d’une classe Balance, qui hérite de la classe Automate, et qui contient en plus (entre autre) une variable poids… et des fonctions qui s’y rapporte (ca, pas de problème non plus)
J’ai besoin d’une classe TapisRoulantPeseur, qui hérite de la classe Automate, et qui se comporte exactement comme un TapisRoulant ET une Balance (et contient donc les fonctions et variable de TapisRoulant et de Balance); et il peut eventuellement y avoir interaction ou modification de certaines fonctions
Le but est bien evidemment de minimiser les copier coller du contenu des fonctions telles que celle qui commande la mise en marche et l’arret (parcequ’en fait, ca va trifouiller une base SQL, donc ca fini par etre assez gros, et si je fait du copier-coller, ca devient inmaintenable)
c’est la premiere solution que je vais adopter, je pense… le seul “défaut”, est que ca double les propriété d’automate, mais je devrais pour m’en arranger…
Tton problème est un cas d’école (le losange : on crée deux sous-classes et on veut le faire hériter dans une seule). Normalement, comme l’a dit Donjohn, on résout ça avec des interfaces. Ton cas est différent car comme tu dis on en pourrait pas avoir de comportement communs à tous les automates.
Je te propose donc 2 solutions , pas très propres dirons nous, mais ki marchent :
la première, si les classes Balance et TapisRoulant doivent être utilisables à l’extérieur de la classe TapisRoulantPeseur, est de créer deux membres privés :
la seconde, si les classes Balance et TapisRoulant ne doivent pas etre utilisables à l’extérieur de la classe TapisRoulantPeseur, est de créer deux inner classes :
class TapisRoulantPeseur
{
/* … */
class Balance extends Automate
{
/* Implémentation ici... */
}
class Balance extends Automate
{
/* Implémentation ici... */
}