[JAVA]Question de compréhension

Question de compréhension [JAVA] - Java - Programmation

Marsh Posté le 06-02-2003 à 19:34:39    

hello, demain j'ai un exa et je ne comprends pas bien deux choses.
 
Premièrement l'utilité des interfaces. Je vois pas l'utilité si de toute façon il faut redéfinir toutes les méthodes...
 
Deuxièmement pareil mais avec les classes et méthodes abstraites.. quelle utilité ??
 
exemple:
 
abstract class shape
 
{
double sumArea(Shape other)
{return this.area() + other.area();}
abstract double area();
}
Ca fait quoi ca ???
 
Merci d'avance.

Reply

Marsh Posté le 06-02-2003 à 19:34:39   

Reply

Marsh Posté le 06-02-2003 à 19:37:21    

je pense que tu vas avoir 0

Reply

Marsh Posté le 06-02-2003 à 19:39:09    

une interface c un contrat
 
une classe qui va implémenter cette interface va "signer" le contrat et s'engager a implémenter les méthodes spécifiées dans le contrat
 
une classe abstraite ne peut etre instanciée, une classe qui va hériter d'une classe abstraite va etre obligée de donner une implémentation aux méthodes abstraites, ou etre déclarée elle meme abstraite
 
 
edit : si tu ne vois pas l'interet, soit t'as rien ecouté en cours, soit tu n'y es pas allé, dans les 2 cas, abandonne la POO :o


Message édité par HappyHarry le 06-02-2003 à 19:43:18
Reply

Marsh Posté le 06-02-2003 à 19:48:09    

c'est extrèmement utile.
Par exemple tu as un programme qui gère des comptes banquaires, tu définit une classe abstraite Compte qui implémente des fonctions getCompteNumber() et des trucs comme ca.
Et tu l'étend avec une classe CompteCourant et une classe compteEpargne qui ont des méthodes différentes spécifiques.
 
Les opérations qui peuvent être faites sur les deux types de compte sont définis sur des objets Compte, par exemple, tu peux avoir une méthode pour un distributeur de billet qui fait imprimerExtraits(Compte c)
 
Par contre un méthode pour faire des virements automatique ne peut se faire que à partir d'un compte courant: virementAuto(CompteCourant c)
 
Voilà, c'est la même chose pour une interface, mais là il n'y a aucune méthodes définies dedant.


---------------
"La Terre est le berceau de l'humanité, mais on ne passe pas toute sa vie au berceau." - Konstantine Tsiolkovski
Reply

Marsh Posté le 06-02-2003 à 20:04:40    

Osama a écrit :

je pense que tu vas avoir 0


 
écoute je te tiens au courant
 
merci aux autres


Message édité par Whismeril le 06-02-2003 à 20:05:32
Reply

Marsh Posté le 06-02-2003 à 22:23:04    

Osama a écrit :

je pense que tu vas avoir 0


 
[+1]


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 06-02-2003 à 23:30:02    

ouais, bon, pour le 0, je suis assez d'accord, mais bon, si tu peux piger, c'est pas plus mal...
L'explication de DeltaDen est pas mal, mais manque de pr"cisions, je trouve : une interface, ça définit un ensemble de méthodes, que DOIVENT implémenter les classes qui implémentent l'interface. Par contre, on peut faire appel à ces méthodes, par l'intermédiaire de l'interface, sans connaître la classe de l'objet qu'on manipule.
Par exemple, une interface shape, pour reprendre ton exemple...
 
Une forme géométrique, c'est très variable, ça peut être un carré, un rectangle, un cercle, etc..Par contre, chacune de ces formes a une aire, un périmètre, une façon d'être dessinée, etc..
 
Donc, pour faire un logiciel de dessin, par exemple, tu définis une interface shape, avec la méthode draw(graphics)
 
Ensuite, tu implémente la méthode dans chaque classe : dans Carre, la méthode dessine un carré, dans Rectangle, ça dessine un rectangle, etc...
 
Au moment de dessiner l'interface de ton programme, au lieu de dire "je dessine les carrés, puis les cercles, puis les rectangles" tu dis "je dessine les formes" , et ça se fait en appellant draw() sur chacun des objets définis....
au lieu de faire 3 boucles sur 3 ensembles d'objets, tu n'en fait qu'une...Bon, c'est un avantage basique et purement gratuit, mais ce n'est qu'un exemple.
 
Ensuite, une classe abstraite, c'est comme une interface, mais ça définit en plus, des comportements commune à tes objets (par l'intermédiaire des méthodes non-abstraites)
 
l'exemple des comptes est en l'occurence très bien choisi, mais pour à la place de Deltaden, j'aurais dit :  
"Pour imprimer un extrait de compte, on a une méthode Compte.imprimeExtrait(Machin m), qi imprime l'ensemble des opérations effectuées sur le compte : ça ne dépend pas du type de compte, ça, les opérations...
Bon, c'est flou, mais il est 23h29, et je suis naze...
Mais garanti, c'est très très très très très utile, et même indispensable en POO.

Reply

Marsh Posté le 06-02-2003 à 23:40:53    

on pourrait meme dire que sans ces notions l'interet de la poo serait plutot limité nan?


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 07-02-2003 à 00:09:40    

Allez un autre exemple : L'utilisation des interfaces pour une architecture type plug-ins.
Imaginons que j'ai cree un viewer d'image, je te le montre et tu me dis :  
"ouais, il est super ton viewer tu me le files ? il prend quoi comme type d'images  ?"
 
"les bmp, et le jpg."
 
"Merde, moi j'utilise plutot les gifs, c'est con.... :/"
 
"Pas de probleme, j'ai defini une interface qui contient les methodes  

Code :
  1. Image readImage(String filename);
  2. void writeImage(Image image, String filename);


t'as plus qu'a creer une classe qui implemente l'interface pour lire ou ecrire ton propre format d'image et le tour est joué...."

Reply

Marsh Posté le 07-02-2003 à 03:38:47    

--greg-- a écrit :

on pourrait meme dire que sans ces notions l'interet de la poo serait plutot limité nan?  


 
On me souffle "smalltalk" et "self" dans mon oreilette.
Encore que dans le cas de smalltalk, le manque de contrats c'est fait sentir et les catégories on rapidement pris une partie de cette place.
 
C'est la conbinaison typage statique + objet qui est liée aux interfaces java (et héritage simple mais c'est un aspect plus technique de la chose).

Reply

Marsh Posté le 07-02-2003 à 03:38:47   

Reply

Marsh Posté le 07-02-2003 à 09:31:48    

Reply

Marsh Posté le 07-02-2003 à 10:13:54    


lol ;)
y'en a qui citent pas leurs sources, merci benou de le faire pour eux! :lol:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed