Envoyé par
clairetj
donc si je comprend bien (et on suppose que j'ai créé ma classe abstraite, chose qui n'est pas encore gagné pour moi) donc mon main
1 2 3 4 5
| QApplication a(argc, argv);
Automate automate;
MainWindow window(&automate);
automate.setInterface(&window);
window.show(); |
je remplace le window dans la ligne automate.setInterface(&window) par ma classe abstraite ???
Il faut que tu bosses les cours sur la programmation OO. Ici tu dois comprendre qu'on utilise le principe de substituabilité: si tes deux interfaces dérivent de la même classe abstraite, une instance de n'importe laquelle des deux classes d'interface peut être fournie là où on demande une référence ou un pointeur du type de la classe abstraite.
Donc, pour répondre dans le cas présent, non tu ne changes pas la ligne
automate.setInterface(&window)
, qui reste valide. Tu changes la déclaration de setInterface de
void setInterface(MainWindow & window);
en
void setInterface(AbstractInterface & iFace);
Tu fais en sorte que la définition de registerPort dans ta classe abstraite soit suffisamment générale (à mon avis un nom de port à afficher et un code d'identification de port ça suffit) pour permettre à l'interface Qt ou au serveur web de l'implémenter.
A la suite de ça, tu pourras aussi écrire quelque chose du genre:
1 2
| InterfaceWeb ifaceWeb(&automate);
automate.setInterface(&ifaceWeb); |
Par la suite, puisque tu veux les deux interfaces à la fois dans le même exe, soit il est techniquement possible d'avoir deux instances d'automate en même temps (mais à vrai dire je ne ferais pas le pari...) soit tu changes setInterface() en addInterface() et tu fais en sorte que la dernière interface ajoutée ne remplace pas l'autre. Ça suppose de vérifier dans quels cas sont faits les callback de l'automate vers l'interface, et de s'assurer que ces apples peuvent être faits vers n (ici 2) interfaces au lieu d'une.
Partager