Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1048 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Utilité des interfaces

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Utilité des interfaces

n°741686
Celina Kyl​e
Posté le 27-05-2004 à 15:05:33  profilanswer
 

Allez, je me décide à poster !
 
En cours, on est en train d'apprendre la programmation objet en C++.
L'intervenant nous a parlé des classes abstraites et des interfaces, mais il a été assez succint à ce sujet. Et j'avoue que j'ai du mal à cerner la différence entre les deux, vu que ni l'un ni l'autre ne contient de code, ce sont juste des déclarations.
 
Et leur utilité ? L'intervenant nous a expliqué que les interfaces étaient surtout utilisées en Java, mais j'avoue que je vois mal à quoi elles peuvent servir, vu qu'elles ne contiennent aucun code !
 
Pouvez vous m'éclairer ?
Merci

mood
Publicité
Posté le 27-05-2004 à 15:05:33  profilanswer
 

n°741691
Taz
bisounours-codeur
Posté le 27-05-2004 à 15:06:51  profilanswer
 

y a pas d'interface en C++. les interfaces sont la solution de Java pour essayer de pallier à son incapacité à gérer l'héritage multiple


Message édité par Taz le 27-05-2004 à 15:07:02
n°741704
Celina Kyl​e
Posté le 27-05-2004 à 15:11:13  profilanswer
 

D'accord, mais dans l'absolu, ça sert à quoi ? Car même s'il n'y a pas d'interface en C++, il existe les classes abstraites, qui sont, d'après ce que j'ai compris, la même chose.
Quelle est l'utilité de classes qui ne contiennent aucun code, que ce soit en Java ou en C++ ?

n°741712
Taz
bisounours-codeur
Posté le 27-05-2004 à 15:13:26  profilanswer
 

à définir un contrat que doit satisfaire la classe que tu implémente : elle doit fournir les services spécifiés par l'interface.  
 
par rapport à l'héritage, une interface/classe abstraite représente une classe insuffisament définie pour être instanciée

n°741715
seabee
Posté le 27-05-2004 à 15:14:11  profilanswer
 

Celina Kyle a écrit :

D'accord, mais dans l'absolu, ça sert à quoi ? Car même s'il n'y a pas d'interface en C++, il existe les classes abstraites, qui sont, d'après ce que j'ai compris, la même chose.
Quelle est l'utilité de classes qui ne contiennent aucun code, que ce soit en Java ou en C++ ?

Définir un contrat. La classe doit pouvoir faire telle ou telle chose [:spamafote]
Un véhicule, que ce soit un camion ou une charette, faut pouvoir accélérer, freiner, tourner.
Si tu fais une interface, (sans code, donc), ben t'as pas besoin de savoir dans quel type de véhicule tu es pour le conduire [:spamafote]
 
edit : toasté.


Message édité par seabee le 27-05-2004 à 15:14:59
n°741801
HelloWorld
Salut tout le monde!
Posté le 27-05-2004 à 15:51:47  profilanswer
 

Une classe abstraite peut implémenter plusieurs interfaces...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°742123
Celina Kyl​e
Posté le 27-05-2004 à 18:55:12  profilanswer
 

seabee a écrit :

Définir un contrat. La classe doit pouvoir faire telle ou telle chose [:spamafote]
Un véhicule, que ce soit un camion ou une charette, faut pouvoir accélérer, freiner, tourner.
Si tu fais une interface, (sans code, donc), ben t'as pas besoin de savoir dans quel type de véhicule tu es pour le conduire [:spamafote]
 
edit : toasté.


Ok, je commence a voir le principe.
Si j'ai une classe MonObjet, qui implémente l'interface IMonObjet, je pourrais écrire :
 
IMonObjet obj = new MonObjet();
 
Ainsi, si jamais la classe MonObjet change, à partir du moment où elle implémente l'interface, je n'ai pas à me soucier de son fonctionnement interne à partir du moment où j'appelle les fonctions qui sont déclarées dans l'interface, c'est ça ?
 
Je vois le principe... Effectivement, ça permet d'éviter de réécrire du code.
 
Merci à vous

n°742125
seabee
Posté le 27-05-2004 à 18:56:53  profilanswer
 

:love: Elle a tout compris


Message édité par seabee le 27-05-2004 à 18:57:55
n°742143
kadreg
profil: Utilisateur
Posté le 27-05-2004 à 19:14:14  profilanswer
 

Taz a écrit :

Les interfaces sont la solution de Java pour essayer de pallier à son incapacité à gérer l'héritage multiple


 
L'héritage multiple est la solution du C++ pour pallier son incapacité à gerer des interfaces.


Message édité par kadreg le 27-05-2004 à 19:14:29

---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°742173
seabee
Posté le 27-05-2004 à 19:50:26  profilanswer
 

kadreg a écrit :

L'héritage multiple est la solution du C++ pour pallier son incapacité à gerer des interfaces.

J'avais pas osé :love:

mood
Publicité
Posté le 27-05-2004 à 19:50:26  profilanswer
 

n°742174
Joel F
Real men use unique_ptr
Posté le 27-05-2004 à 19:50:52  profilanswer
 

Seabee a écrit :

J'avais pas osé :love:


 
y a des jours vaut mieux etre sourd  :sarcastic:

n°742204
jesus_chri​st
votre nouveau dieu
Posté le 27-05-2004 à 20:23:03  profilanswer
 

Celina Kyle a écrit :


IMonObjet obj = new MonObjet();
 


IMonObjet* obj = new MonObjet();
 
Tu ne peux instancier un IMonObjet si c'est une classe abstraite, mais tu le peux avec un pointeur ou une référence.

n°742208
antp
Super Administrateur
Champion des excuses bidons
Posté le 27-05-2004 à 20:24:48  profilanswer
 

Taz a écrit :

y a pas d'interface en C++. les interfaces sont la solution de Java pour essayer de pallier à son incapacité à gérer l'héritage multiple


 
Pas que de Java... de Delphi aussi :D
(puis les interfaces c'est pratique, en Delphi elles sont garbagecollectorées, contrairement aux objets issus de classes)


Message édité par antp le 27-05-2004 à 20:25:21

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°742238
kadreg
profil: Utilisateur
Posté le 27-05-2004 à 20:45:45  profilanswer
 

antp a écrit :

en Delphi elles sont garbagecollectorées


 
 :heink:


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°742251
antp
Super Administrateur
Champion des excuses bidons
Posté le 27-05-2004 à 20:48:41  profilanswer
 


 
Ouais enfin c'est pas vraiment un garbage collector en fait :D
C'est juste un compteur de références, comme pour les AnsiString/WideString.
On ne doit pas se soucier de la désallocation quoi [:spamafote]


Message édité par antp le 27-05-2004 à 20:49:03

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°742363
kadreg
profil: Utilisateur
Posté le 27-05-2004 à 22:43:30  profilanswer
 

antp a écrit :


On ne doit pas se soucier de la désallocation quoi [:spamafote]


 
Dans le même temps, se soucier de la désalocation de trucs qui ne s'alloue pas  
 
[:neowen]


Message édité par kadreg le 27-05-2004 à 22:43:41

---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°742397
antp
Super Administrateur
Champion des excuses bidons
Posté le 27-05-2004 à 23:09:34  profilanswer
 

En Delphi pour utiliser les interfaces, tu les associes à une classe (héritage multiple vu que tu peux en associer plusieurs à une classe), et tu ne dois pas t'occuper de la désallocation des objets issus de cette classe :o
 
Enfin... il me semble :D


Message édité par antp le 27-05-2004 à 23:10:13

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°742399
kadreg
profil: Utilisateur
Posté le 27-05-2004 à 23:11:14  profilanswer
 

antp a écrit :

En Delphi pour utiliser les interfaces, tu les associes à une classe


 
En françait, on appelle cela un lien d'implémentation ou de réalisation.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°742402
Ace17
Posté le 27-05-2004 à 23:13:01  profilanswer
 

kadreg a écrit :

En françait


Fallait oser :jap:

n°742405
antp
Super Administrateur
Champion des excuses bidons
Posté le 27-05-2004 à 23:19:57  profilanswer
 

kadreg a écrit :

En françait, on appelle cela un lien d'implémentation ou de réalisation.


 
Benh ça reste des interfaces :p


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°750516
Celina Kyl​e
Posté le 03-06-2004 à 12:28:06  profilanswer
 

Il y a quand même quelque chose qui me tracasse.
Je reprends l'exemple du véhicule. Mettons que j'ai une interface IVoiture, qui déclare 2 fonctions : accelerer() et freiner().
Je créé une classe GolfGTI qui implémente IVoiture. Cette classe implémente donc accelerer() et freiner(), mais aussi brancheLaClim(), qui n'est pas déclarée dans IVoiture.
Si je fais ça :

Code :
  1. IVoiture maVoiture = new GolfGTI();


je ne peux pas utiliser la fonction brancheLaClim(), vu que c'est un onjet IVoiture ?

n°750559
xiluoc
un pc pour les unirs ....
Posté le 03-06-2004 à 12:50:22  profilanswer
 

ben non tu pourras pas.

n°750608
yawen
Posté le 03-06-2004 à 13:15:44  profilanswer
 

tu peux mettre un virtual brancheLaClim() {}; dans ta classe IVoiture, histoire de pouvoir utiliser la fonction, sans pour autant qu'elle soit obligatoire dans tous les véhicules dérivés de IVoiture : ceux qui ne redéfinissent pas la fonction, ben ça fera rien quand tu appellera brancheLaClim(). et sinon, quand tu met "IVoiture maVoiture = new GolfGTI();", c'est du C++ ou du java ? parce que si c'est du C++, maVoiture doit être un pointeur... (en java, je connait pas grand chose)

n°750623
seabee
Posté le 03-06-2004 à 13:23:40  profilanswer
 

Yawen a écrit :

tu peux mettre un virtual brancheLaClim() {}; dans ta classe IVoiture, histoire de pouvoir utiliser la fonction, sans pour autant qu'elle soit obligatoire dans tous les véhicules dérivés de IVoiture : ceux qui ne redéfinissent pas la fonction, ben ça fera rien quand tu appellera brancheLaClim(). et sinon, quand tu met "IVoiture maVoiture = new GolfGTI();", c'est du C++ ou du java ? parce que si c'est du C++, maVoiture doit être un pointeur... (en java, je connait pas grand chose)

En JAVA, si une fonction est virtuele, il faut l'implémenter dans toutes les sous-classes, même si c'est bidon.
 

n°750651
Ace17
Posté le 03-06-2004 à 13:41:18  profilanswer
 

Oui, ca semble plus propre que d'insérer du code vide dans l'interface.

n°750656
seabee
Posté le 03-06-2004 à 13:46:16  profilanswer
 

Ace17 a écrit :

Oui, ca semble plus propre que d'insérer du code vide dans l'interface.

:??: Interface même combat : si tu veux implémenter une interface, il faut implémenter toutes les fonctions.


Message édité par seabee le 03-06-2004 à 13:46:35
n°750724
Celina Kyl​e
Posté le 03-06-2004 à 14:20:44  profilanswer
 

Yawen a écrit :

tu peux mettre un virtual brancheLaClim() {}; dans ta classe IVoiture, histoire de pouvoir utiliser la fonction, sans pour autant qu'elle soit obligatoire dans tous les véhicules dérivés de IVoiture : ceux qui ne redéfinissent pas la fonction, ben ça fera rien quand tu appellera brancheLaClim(). et sinon, quand tu met "IVoiture maVoiture = new GolfGTI();", c'est du C++ ou du java ? parce que si c'est du C++, maVoiture doit être un pointeur... (en java, je connait pas grand chose)


Oui effectivement c'est du C++, désolée pour le pointeur.
Merci pour ta réponse, je vais creuser les fonctions virtuelles.

n°750744
HelloWorld
Salut tout le monde!
Posté le 03-06-2004 à 14:27:01  profilanswer
 

Yawen a écrit :

tu peux mettre un virtual brancheLaClim() {}; dans ta classe IVoiture, histoire de pouvoir utiliser la fonction, sans pour autant qu'elle soit obligatoire dans tous les véhicules dérivés de IVoiture : ceux qui ne redéfinissent pas la fonction, ben ça fera rien quand tu appellera brancheLaClim().


Moi ça me pose un sérieux problème de conception.
Je mettrais plutot ça dans une 2° interface. A priori, le code qui gère l'accélération et freinage n'a pas à gérer la clim.
Un excellent article sur les interfaces :
http://www.dotnetguru.org/articles [...] eClass.htm
Y'a un peu le même probleme, avec une bidouille qui équivaudrait ici à lancer une exception "Not supported" dans brancheLaClim() des voitures qui n'en n'ont pas.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°751416
Malkav
Posté le 03-06-2004 à 20:13:29  profilanswer
 

Pareil de HelloWorld, tu devrais séparer selon les besoins a la rigueur.
 
Par exemple (je fais grace des paramètres  des méthodes ;))

Code :
  1. class IVehicule
  2. {
  3. public:
  4. virtual void démarrer() = 0;
  5. virtual void tourner() = 0;
  6. virtual void accelerer() = 0;
  7. virtual void freiner() = 0;
  8. virtual void stop() = 0;
  9. };
  10. class IClimatisation
  11. {
  12. public:
  13. virtual void allumerClim() = 0;
  14. virtual void couperClim() = 0;
  15. virtual void reglerClim() = 0;
  16. };
  17. class CVoiture : public IVehicule
  18. {
  19. public:
  20. virtual void démarrer() {}
  21. virtual void tourner() {}
  22. virtual void accelerer() {}
  23. virtual void freiner() {}
  24. virtual void stop() {}
  25. };
  26. class CVoitureClimatisee : public CVoiture,public IClimatisation
  27. {
  28. public:
  29. virtual void allumerClim();
  30. virtual void couperClim();
  31. virtual void reglerClim();
  32. };


 
Après tu pourras instancier des voitures ou des voitures avec la clim, voir meme si t'as une classe batiment, un batiment avec la clim ;)
(c l'interet)
 
si jamais tu as seulement des IVehicule* , et que tu veux savoir si c un véhicule avec clim tu dois utiliser un dynamic_cast

n°751425
Taz
bisounours-codeur
Posté le 03-06-2004 à 20:15:54  profilanswer
 

t'es bien marrant, c'est pas des interfaces ça. et tu ferais bien de mettre des destructeur virtuel et de faire de l'héritage virtuel également

n°751667
Ace17
Posté le 03-06-2004 à 23:31:38  profilanswer
 

C'est quoi ces especes d'interfaces qui contiennent du code???

n°751991
blackgodde​ss
vive le troll !
Posté le 04-06-2004 à 09:34:10  profilanswer
 

je crois que ses interfaces sont IVehicule et IClimatisation, les autres sont des implémentations

n°752556
Taz
bisounours-codeur
Posté le 04-06-2004 à 14:38:26  profilanswer
 

sans déconner ?

n°752589
suly
Posté le 04-06-2004 à 14:53:08  profilanswer
 

je voudrai savoir sil ya compillateur qui envoi le code source d un programe mersi d avance

n°752591
Taz
bisounours-codeur
Posté le 04-06-2004 à 14:53:46  profilanswer
 

aucun

n°752617
antp
Super Administrateur
Champion des excuses bidons
Posté le 04-06-2004 à 15:02:18  profilanswer
 


 
T'as compris ce qu'il voulait ? je pige pas sa question :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°752628
Taz
bisounours-codeur
Posté le 04-06-2004 à 15:07:20  profilanswer
 

un décompilateur

n°752886
Ace17
Posté le 04-06-2004 à 17:13:11  profilanswer
 

suly a écrit :

je voudrai savoir sil ya compillateur qui envoi le code source d un programe mersi d avance


 
Ca n'existe pas..... la compilation est loin d'etre une opération bijective...

n°752940
antp
Super Administrateur
Champion des excuses bidons
Posté le 04-06-2004 à 18:01:38  profilanswer
 

Ça dépend, la compilation de HTML en CHM peut facilement se décompiler  
[:neowen]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°753058
cricri_
Posté le 04-06-2004 à 21:16:33  profilanswer
 

vi, mais ça n'a de compilation que le nom ...

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Utilité des interfaces

 

Sujets relatifs
pour debutant, les interfaces c'est mieux avec mfc ou win32?quelle est l'utilité du bouton hidden
de l'utilité d'une methode release dans un tag jsp.utilité de cacher son email
utilité de pragma once avec Visual C++ [BIDE] Question con : utilité des call en VBScript
NetworkInterface : il ne trouve pas toutes mes interfaces rezoDe l'utilité des "Set truc=Nothing"
les interfaces graphiques en javaPour les pros de la POO: L'utilité de l'Interface ?
Plus de sujets relatifs à : Utilité des interfaces


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR