|
Dernière réponse | |
---|---|
Sujet : [ JAVA ] Les interface ??? ca sert a quoi ? | |
Bandenabos | Oui oui, on va dire ça comme ça :o( !!
Je pense que ton compilo a du bien rire lorsque tu a ecris : Enumeration l_MonEnum = new Enumeration(); :hap: |
Aperçu |
---|
Vue Rapide de la discussion |
---|
Bandenabos | Oui oui, on va dire ça comme ça :o( !!
Je pense que ton compilo a du bien rire lorsque tu a ecris : Enumeration l_MonEnum = new Enumeration(); :hap: |
Gonzoide |
|
El_gringo | moi, y a un truc que je comprend pas, c: pourquoi on peut instancier Enumeration alors que c une interface !? |
Bandenabos | L'interface est l'outil permettant d'avoir des classes le plus générique possible. Cette généricité permet une réutilisabilité optimum. Si tu as bien compris le role de l'objet cette notion d'interface est évidente ... un objet implémenté avec des données de type interfaces pourra travailler avec n'importe quel objet respectant celle-ci.
Ton objet pourra alors être utilisé dans plusieurs cas de figures avec des contraintes minimum. L'exemple d'un objet travaillant avec des Enumeration est bon. Ton objet sera alors capable de travailler avec tout objet implémentant l'interface Enumeration ou permettant de retourner une énumération (Hashtable, Vector ...). :bounce: |
banzai |
|
Clarkent |
ok mais ptain de merde faut bien qu ilk y est des classes qui l implemente non :D ?
|
banzai |
|
Clarkent |
ok j ai parfaitement pijer la :jap:.
|
banzai |
|
Clarkent |
c est de la genericite, comme en delphi ?
|
banzai |
|
Clarkent | ok je vois unpeut tout ca.
l exemple du vehicule me parait pas mal, mais dans le code lui meme je vois pas comment le creer. et ence qui concerne l interrface comme moyen de comm, ca rejoint l idee du conducteur et des vehicules, sauf que la j ail impression qu on pourrait faire ca sur papier, on definit le classes avant la coneption et hop pas besoin dunterface et on crait la classe comme on le desirait, on dit a lindustriel je veux ca ca et ca et qu il me fasse ca et ca, comment je m en fou mais faut qu il le fasse. en fait pour moi l interface on peut largement s enpasser :D. mais si on passer a ENUMERATION qui est une interface, on peut s en servir dansla classe vector et dans hashtable, et quand on s ensert de enumerationon sait parfaitement que c est un vecteur ou une hashtable et c est un peu pour le conducteur du vehicule, dans ce cas la le conducteur sait parfaitement si c est un camionou une voiture. merci encore et encore merci ci vous continuez a essaye de me faire comprendre :D. et oui je connais l heritage :p. heritage multiple moins, je comprends sans avoir utilise. |
LeGreg | Il faut plutot voir ca comme un moyen de communication (d'ou ce nom d'interface, qui sert a la communication entre deux milieux).
Exemple tres frequent en programmation: tu veux faire un callback. C'est a dire que tu vas dire a une librairie externe que tu veux qu'elle te rappelle(callback) pour certaines taches precises: typiquement la gestion d'evenements a la Windows ou a la Java. Seul probleme le redacteur de la librairie n'a aucune idee de ce que vont faire tes bouts de programme, sous quelle forme d'objets ils seront implantes etc.. Par contre, il va definir une interface qui va dire: "ok si tu veux que je te rappelle, je veux que tu fournisses les services suivants: oninit, ondraw, onresize, onclose etc.. et que tu me repondes de telle facon pour savoir si l'operation s'est bien deroulee pour toi." Et un objet (le serveur) peut rendre plusieurs services couverts par plusieurs interfaces. Voila principalement comment sont utilisees les interfaces dans la librairie java. LEGREG [edtdd]--Message édité par legreg--[/edtdd] |
n0mad | Plusieurs explications valent mieux qu'une en matière d'héritage.
Exemple mega connu : La classe Véhicule est une interface (le volant et les pédales). Les classes Camion et Voiture dérivent toutes les 2 de la classe Vehicule. La classe Conducteur a juste besoin de connaitre la classe Vehicule pour conduire. Si on lui file un pointeur de type Vehicule, le conducteur n'a que faire de savoir s'il s'agit d'une Voiture ou d'un Camion qui a été instancié. C'est le but de l'approche objet : la généralisation Le java ne permet pas le multi heritage. Pour contourner cette lacune, les interfaces sont des classes abstraites totalement vides et il est possible d'en ajouter autant qu'on veut. En fait c'est juste java qui impose cette distinction entre classe vide et classe réelle uniquement pour des raisons techniques. |
gizmo | Bon, alors l'héritage multiple, c'est assez simple comme concept, puisse qu'il par du principe qu'un objet complexe est issu d'obje plus primitifs.
Ex: un homme et une femme disposent de caractéristique commune (yeux, coeur, poumons,...) et de caractéristiques différentes (sexe, seins, capacité a faire chier,...). On créer donc des objets oeil, coeur, poumons,... dont chacun des deux objets, homme et femme, héritent. Et on leur ajoute les caractérisitque supplémentaires par la suite. Ainsi, tu n'a créer qu'une fois le coeur et les poumons, ce qui entraine une optimisation en terme de place, de rapidité, de compatibilité et d'évolution. Malheureusement, il est possible de faire des héritages multiples imbriqués, ex: mamifère->ane->baudet et mamifère-> cheval-> baudet. Ici, baudet hérite 2x de mamifère, et lors d'appel a une caractéristique du mamifère, il ne sait pas a laquelle il doit faire appel (elle sont identique, mais il ne le sait pas!). Pour éviter ce problème, Java a supprimé l'héritage multiple, mais comme c'était quand même bien pratique, il l'on substitué par les interface, qui ne sontplus que les DECLARATIONS des primitives, sans définir leur manière d'agir, ni les variables qu'elles affectent. Du coup, tu es obligé de retaper le code a la main chaque fois que tu veux l'utiliser. |
El_gringo | bon, j'espère que tu connais les héritages (sinon, apprends ce que c'est, et reviens, g peur que tu comprennes pas sinon ! :D)
en fait, en prog objet, tu peux avoir des méthode dites abstraites, qui sont uniquement la déclaration de la méthode (sans l'impémentation). en java, on les signal avec le mot clé "abstract" je crois. si une classe contient au moins une méthode abstraite, la classe est elle même abstraite. c à dire qu'on ne peut pas l'instancier. ça peut servir, par exemple, si t'as une classe abstraite "Figure", avec une méthode abstraite "CalcSurface". alors pour qu'une classe héritant de cette classe puisse être instanciée (autrement dit, ne soit pas une classe abstraite), il faut que la classe héritante implémente la (ou toutes les) méthode abstraite. Dans l'exemple d'avant, si la classe "Cercle" hérite de "Figure", tu devras implémenter, dans "Cercle", la méthode CalcSurface, pour que ta classe "Cercle" soit instanciable... Une interface, c une classe abstraite dont aucune méthode n'est implémentée : toute ses méthode sont abstraites ! ouah ! bon, g écrit ça d'un trait... si tout ne t'apparait pas clairement maintenant, je t'en voudrai pas. Je suis pas toujours hyper doué pour me faire comprendre ! :D j'aurai au moins essayé; t'en tireras ce que tu peux ! |
Clarkent | je comprends pas trop la. |
gizmo | En fait, ca sert a palier le GROS manque qu'est l'absence d'héritage multiple en Java. Si tu ne connais pas cette notion, dis le qu'on t'explique un peu plus les bases. |
BENB | Une methode peut prendre en argument une interface, c'est a dire toutes les implementations de cette interface... |
Clarkent | ca sert a quoi a part forcer certaine classe a avoir des methodes communes ? ca sert a ce quil parait ane pas se soucier de la nature de l objet qu on manipule, mais on connait cforcement la nature del objet non ?
y aurais pas un petit exemple explicite de son interet ? car sinon je sais un peu comment ca amrche mais sansplus, merci. |