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

  FORUM HardWare.fr
  Programmation

  [JAVA] impement

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JAVA] impement

n°32939
lamatrice
Posté le 18-05-2001 à 13:26:55  profilanswer
 

j'ai un peu de mal à comprendre le concept implement :
 
c'est une importation des squelette methodes uniquement sans paramètre ou quoi ?
 
je suis un peu dans le flou et malgrès des docu différentes : il prennent tous le même exemple que je pige pas vraiement.
 
si qqun peux passer une petite explication ça sera bien pour ma lenterne.

mood
Publicité
Posté le 18-05-2001 à 13:26:55  profilanswer
 

n°32948
BENB
100% Lux.
Posté le 18-05-2001 à 13:47:43  profilanswer
 

Conceptuellement il y a les classes et les interfaces. Une interface est une classe dont les methodes ne sont pas implementee, et qui n'a pas d'attribut.
Lorsque tu definit une nouvelle classe elle derive d'une autre classe, et elle peut implementer plusieurs interfaces, c'est a dire en definir les methodes...
 
Une interface sert a specifier une classe ou une famille de classe independement de la maniere de les implementer.
 
exemple tu peut definir une interface d'objet graphique,  
interface GraphElement
{
public Draw(...);
public Move(...);
}
/* Oui c'est une syntaxe simplifiee */
 
Mais nulle part on dit comment GraphElement se dessine, ce sont les classes qui implementent GraphElement qui definissent cela. A l'utilisation, tu n'a que a connaitre GraphElement, et si tu fais un module qui utilise des objets implementant l'interface GraphElement, ce module pourra utiliser des objets definis ailleurs independement de facon toute naturelle.
 
l'interface est une chose reelement importante en conception objet...

n°32957
n0mad
inscrit au XXe siècle
Posté le 18-05-2001 à 14:03:48  profilanswer
 

Implement est utilisé pour les interfaces. C'est la seule manière de contourner le fait que Java ne fasse pas le multi-héritage vu qu'une sous-classe ne peut dériver que d'un seule classe mais de plusieurs interfaces.
 
Tu définis une interface de la même manière qu'une classe sauf qu'il n'y a aucune implémentation (c'est une classe abstraite en fait,  il n'y a que les prototypes des methodes). Cette implémentation se fera plus tard dans la sous-classe qui implémente l'interface (d'où le 'implement').
 
Pour eviter le copier-coller de code lors d'un multiheritage, on peut fournir des implementations d'interfaces destinées à être agrégées dans les sous-classes qui implémente l'interface (voir les exemples des Swing avec les listeners)


---------------
Pipiru piru piru pipiru pi
n°32981
lamatrice
Posté le 18-05-2001 à 14:49:14  profilanswer
 

.....eeeeeeeeeeeeeeeeeeeeh....hum!..........hum!
 
ça commence à rentrer mais un exemple claire serai mieux (si vous avez le temps)

n°33003
under
(avec u comme under)
Posté le 18-05-2001 à 15:10:19  profilanswer
 

on va faire simple :  
 
 
tu as une classe chat, une classe chien, une classe oiseau
et une interface animaux !
bon tu veux dire que un chat,un chien , un oiseau, sont des animaux. Mais tu ne veux pas definir un animal justre en tant qu'animal...donc tu met animal en interface... et les classe chien,chat,oiseau,  vont implémenter animal.
donc chaque fois que tu vas definir une methode dans l'interface animal, tu devras la definir dans la classe chien,chat,oiseau.
 
exemple :  
 
 
 
public class Chien implements animal
{
  public Chien()
  {
    ....
  }
 
  public void crier()
  {
    System.out.println ("ouaf" );
  }
}
 
public class Chat implements animal
{
  public Chat()
  {
    ....
  }
 
  public void crier()
  {
    System.out.println ("miaou" );
  }
}
 
 
public class Oiseau implements animal
{
  public Oiseau()
  {
    ....
  }
 
  public void crier()
  {
    System.out.println ("meuh" );  // ouiiiiiii un oiseau ca fait meuh !!
  }
}
 
donc pour l'instant ton interface animal va juste devoir definir une methode vide crier() !! et pis voila...donc comme ca tu specifiera le fait qu'un animal doit savoir crier pour etre un animal
 
t'as vu l'exmeple de malade un peu !!!!

n°33021
wpk
Posté le 18-05-2001 à 15:30:21  profilanswer
 

nomad >en fait, une interface NE SERT PAS A FAIRE LA MEME CHOSE QUE L'HERITAGE MULTIPLE c'est deux notions completement differentes.
 
Dans l'heritage multiple, tu herite d'un comportement et d'attributs de la classe mere (a moins bien sur d'heriter toujours de classes abstraites sans attributs auquel cas ta classe c'est une interface)
 
Les interfaces, il faut les voire comme un contrat passe entre le developpeur de l'objet et le developpeur qui va utiliser l'objet. Implementer une interface c'est donc s'engager a respecter ce contrat. L'interface joue donc seulement un role de canevas pour l'objet qui l'implemente.
Pourqoui sinon on aurait change le mot clef extends pour implements?

n°33027
kadreg
profil: Utilisateur
Posté le 18-05-2001 à 15:38:24  profilanswer
 

wpk a écrit a écrit :

nomad >en fait, une interface NE SERT PAS A FAIRE LA MEME CHOSE QUE L'HERITAGE MULTIPLE c'est deux notions completement differentes.




Je rajoute juste que c'est une confusion fréquemment faite car le C++ ne dispose pas du lien de réalization entre classe et interface, ce qui fait qu'on l'émule généralement à grand coups d'héritage multiple.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°33030
under
(avec u comme under)
Posté le 18-05-2001 à 15:42:22  profilanswer
 

en fait une interface est une class abstraite ou toutes les methodes sont abstraites.
 
ps : tu peux aussi t'en servir pour specifier des constantes. c meme bien util pour ca, pour mettre toutes les constantes d'une appli.

n°33032
under
(avec u comme under)
Posté le 18-05-2001 à 15:43:53  profilanswer
 

kadreg a écrit a écrit :

 
Je rajoute juste que c'est une confusion fréquemment faite car le C++ ne dispose pas du lien de réalization entre classe et interface, ce qui fait qu'on l'émule généralement à grand coups d'héritage multiple.




j'ai du mal a comprendre ton propos là...tu peux approfondir ton idée...

n°33033
n0mad
inscrit au XXe siècle
Posté le 18-05-2001 à 15:45:10  profilanswer
 

wpk a écrit a écrit :

nomad >en fait, une interface NE SERT PAS A FAIRE LA MEME CHOSE QUE L'HERITAGE MULTIPLE c'est deux notions completement differentes.
 
Dans l'heritage multiple, tu herite d'un comportement et d'attributs de la classe mere (a moins bien sur d'heriter toujours de classes abstraites sans attributs auquel cas ta classe c'est une interface)
 




 
C'est pas ce que j'ai dit. Encore heureux d'ailleurs car ça serait bien si les interfaces avaient au moins des attributs. J'ai dit que l'interface était ce que Sun avait inventé pour pallier à l'absence d'héritage multiple.
 
Disons que quand on vient du C++, une interface, c'est jamais qu'un cas particulier de classe abstraite sans attributs et la distinction extends/implement est uniquement pour des raisons techniques.
 
En conception objet par exemple, il n'y a pas cette distinction, on parle juste de classe abstraite ou non


---------------
Pipiru piru piru pipiru pi
mood
Publicité
Posté le 18-05-2001 à 15:45:10  profilanswer
 

n°33039
kadreg
profil: Utilisateur
Posté le 18-05-2001 à 15:50:38  profilanswer
 

n0mad a écrit a écrit :

 
En conception objet par exemple, il n'y a pas cette distinction, on parle juste de classe abstraite ou non




 
UML prévoit qu'une classe peut realiser (d'ou le fait que je parlais de realize tout à l'heure, j'ai facilement mon coté UML qui remonte) des interfaces.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°33054
BENB
100% Lux.
Posté le 18-05-2001 à 16:10:22  profilanswer
 

Certains utilisent en C++ ce qu'il appellent des interfaces concretes, c'est a dire dont certaines methodes ont une implementation disont par defaut. Quand on les realise on n'est alors pas oblige d'implementer toute l'interface.
 
Pour ma part je trouve que l'heritage multiple (C++) est plus riche que l'implementation d'interface (Java). Mais il pose aussi beaucoup plus de Problemes quand les classes heritees ne sont pas des classes abstraites sans attributs...

n°33067
under
(avec u comme under)
Posté le 18-05-2001 à 16:19:49  profilanswer
 

BENB a écrit a écrit :

 
Pour ma part je trouve que l'heritage multiple (C++) est plus riche que l'implementation d'interface (Java). Mais il pose aussi beaucoup plus de Problemes quand les classes heritees ne sont pas des classes abstraites sans attributs...




je suis pas torp d'accord sur ce point, c sur que c chiant de ne pas pouvoir faire de l'heritage multiple mais bon ca pose moins de problemes de duplication (grace aussi a la liaison dynamique)  de methodes et ca oblige a bien programmer aussi  :hap:

n°33069
BENB
100% Lux.
Posté le 18-05-2001 à 16:24:37  profilanswer
 

under > Ce qui est chiant avec les implementation d'interface c'est que tu sois obligee de definir toutes les methodes de l'interface. C'est la le vrai avantage de l'heritage multiple, mais je reconnais qu'il ne faut pas en abuser... et en particulier il faudrait jamais avoir besion de l'heritage virtuel, mais la on devie, puisque la question etait sur Java...

n°33072
under
(avec u comme under)
Posté le 18-05-2001 à 16:31:07  profilanswer
 

BENB a écrit a écrit :

under > Ce qui est chiant avec les implementation d'interface c'est que tu sois obligee de definir toutes les methodes de l'interface. C'est la le vrai avantage de l'heritage multiple, mais je reconnais qu'il ne faut pas en abuser... et en particulier il faudrait jamais avoir besion de l'heritage virtuel, mais la on devie, puisque la question etait sur Java...




 
ouais mais avec l'heritage multicple de C++ tu peux te premettre de programmer comme un boeuf....et vas y que je t'etends des classes a gogo...resultats...ben ca chie ;o)...alors la facon de programmer en java t'oblige avoir une certaine rigueur au niveau de ton analyse de probleme... Mais c pas pour ca que java ramera moins :(  ...c d'ailleurs un peu a cause de l'histoire de la facon dont il gere l'heritage..enfin..ca aussi c une autre histoire ;o)....je crois qu'on va pas reparler des raisons pour lesquelles java est lent...mais bon...avec le temps...
 
en tout cas, je le clame haut et fort java >C++  
 (désolé pour les fans de C++)..Mais on est pas encore au langage 100% objet...

n°33088
wpk
Posté le 18-05-2001 à 16:49:43  profilanswer
 

under> le c++ c'est aussi un tres bon language, seulement il n'y a pas les gardes fous de java. La notion d'interface justement eh bien en c++ il faut l'implementer soi-meme et etre suffisament integre :) pour s'interdire toute derive par rapport au modele objet. C'est rarement le cas. Tu trouveras toujours 10milliards de bonnes excuses pour faire des "saloperies contre-nature" ;).  
En resume le java est fait pour les hommes, le C++ pour les dieux :hap: .
Oula je sens que je m'egare un poil ;) ...

n°33094
n0mad
inscrit au XXe siècle
Posté le 18-05-2001 à 16:52:51  profilanswer
 

under> le probleme avec le C++, c'est qu'on peut tout faire, y compris les conneries :) Mais si tu as une bonne conception en amont, tu peux y aller comme un bourrin sur l'héritage virtuel & multiple.
 
Perso j'aime bien le C++ car c'est de l'objet vraiment abouti. C'est un langage où on peut s'affranchir des contraintes matérielles et permet d'avoir une vision réellement algébrique du monde à simuler (je fais beaucoup de programmation sur les simulations / évolution de systèmes).
 
 
J'aime pas Java (même si j'en ai fait pendant 1 an au boulot sous Visual Age) car l'héritage multiple me manque vraiment ou alors ça oblige à faire 1 interface & 1 classe implémenté à chaque fois (comme dans les Swing par exemple quand une classe implemente une interface et agrège l'implémentation de l'interface)
 
En fait, ça me rappelle le débat Heritage/Agrégation et le traité d'Orlando pour ceux qui connaissent :)


---------------
Pipiru piru piru pipiru pi
n°33098
under
(avec u comme under)
Posté le 18-05-2001 à 17:00:43  profilanswer
 

nomad> ouais ca depend des habitudes..moi c le contraire le C++ m'emmerde a cause de son heritage multiple...ce sont deux ecoles...chacun la sienne...mais bon je sui spas d'accord quand tu dis que le C++est de l'objet vraiment abouti c faux !! meme le java n'est pas de l'objet abouti, pour moi de l'objet abouti..ce serait un langage ou TOUT serait objet...et ca ca existe pas encore....Mais pour moi le java est plus proche de l'objet pur, parce que le concept d'interface t'oblige a faire des classes qui soient vraiment bien faites, qui correspondent vraiment à la conception de l'objet de depart defini par l'interface..pour moi c ce qui manque en C++ (bon ca devient polu trop un probleme si le programmeur programme bien dans une vision "objet" mais sinon c vite le fouilli..
Bon tu me diras, en java c possible de faire un fouilli aussi...c sur, mais bon...la c plus un probleme de programmation objet c un probleme d'analyse...
enfin voila mon point de vue  :hello:  
 
et au fait, c koi ce debat Heritage /Agregation? c sur de l'UML?

n°33109
n0mad
inscrit au XXe siècle
Posté le 18-05-2001 à 17:21:33  profilanswer
 

under>
 
Le débat Agrégation/Héritage est un débat (à ce que j'en ai lu) qui remonte aux années 80. Le sujet concernait la manière d'implémenter correctemement le concept de généralisation.  
Une école pronait l'héritage et l'autre l'agregation. En fait de compte, ils ont décidé d'utiliser les 2 selon les besoins :)
 
<Grosse parenthèse hors topic>
 
En fait c'est quasiment 2 philosophies différentes du monde :
 
Exemple simpliste:  
* une Ferrari EST une voiture : Ferrari derive de voiture
* une Ferrari A les fonctionnalités d'une voiture : Ferrari agrège un objet Voiture
 
Comme on le voit, la différence entre agregation et heritage peut être très tenue, surtout qu'au final, tout est codé en agrégation (en mémoire, c'est des structures qui s'emboitent).
 
Je me suis interessé à ça à un moment. Ca m'a permis de comprendre que mon chef de projet etait de l'école agrégation (borné) alors que moi je suis "plutôt heritage non pratiquant" :) et qu'evidemment on était pas souvent d'accord, mais ceci est une autre histoire...


---------------
Pipiru piru piru pipiru pi
n°33159
louisebroo​ks
Posté le 18-05-2001 à 21:27:27  profilanswer
 

je démarre en POO donc le C++ connait pas
 
merci pour l'exemple des animaux
merci aussi pour le débat, même si j'ai pas tout compris, ça m'a servi à voir plus clair dans les implements
 
des fois une confrontation de points de vues est plus éclairante qu'une explication, allez savoi pourquoi !


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

  [JAVA] impement

 

Sujets relatifs
rajouter une iframe sous condition (java ?)JAVA: comment récupérer des infos système? (MAC, RAM,...)
compilateur natif java[Java] Savoir si un fichier existe sur un poste distant...
[JAVA / ALGO ] logiciel de traitement de son[Java, Linux, IE5] raffraichissement problème.
[JAVA]double buffer[java] taille des fichiers .class
java c'est quoi le void[JAVA] besoin d'un expert en Thread !!!
Plus de sujets relatifs à : [JAVA] impement


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