Surchage, héritage et polymorphisme

Surchage, héritage et polymorphisme - Java - Programmation

Marsh Posté le 03-08-2005 à 22:48:01    


Bonjour!
 
Bon alors je continue d'étudier mon beau petit livre de Java. J'ai un petit exercice et il mentionne de faire un fichier contenant les notions de classe et surcharge   et un fichier contenant la notion de l'héritage et finalement un fichier contenant 'main' et exploiter les deux classes de façon à introduire le polymorphisme???    
 
Compliqué?  Avez-vous une idée avec quel exemple je pourrais ESSAYER de faire ca!   Avec des voitures?   Livres?  
 
Je dois relire quelques pages hahaha!!!
 
 
Merci de votre aide!

Reply

Marsh Posté le 03-08-2005 à 22:48:01   

Reply

Marsh Posté le 04-08-2005 à 01:00:32    


Encore moi,  
 
Je travaille sur cet exercice, est-ce que je suis sur la bonne voie?  
 
Je vais enregistré cet exercice sous le nom : Véhicules  
 
Classe : véhicule  
Sous-classes : camion, auto  
 
Je dois enregistré véhicule, camion et auto avec leur caractéristiques (couleur, année, usagée, neuve) dans des fichiers différents et joindre le tout dans un même fichier en effectuant la surchage, l'héritage et le polymorphisme??  
 
Est-ce que quelqun peut m'aider s.v.p.  
 
Merci.

Reply

Marsh Posté le 04-08-2005 à 01:08:25    

ben ta classe véhicule, tu la mets abstraite je pense, et tu dérives camion, auto, etc

Reply

Marsh Posté le 04-08-2005 à 12:36:13    

Bon, c'est bien bien parti.  
Remarque : je ne vois pas l'intéret de déclarer la classe véhicule comme abstraite !!
Pour l'héritage, tu as tout compris : auto et camion héritent de véhicule.
Pour la surcharge : écris par exemple une méthode "affiche()" qui écrira à l'écran les états de ta classe ( ex pour véhicule : "année", et pour camion "année" + "typeDeChargement" ). En fait on dit que l'on surcharge la méthode "affiche" car elle est utilisée ( même nom ) pour deux classes différentes.
Pour le polymorphisme, crée un tableau de 2 éléments ( ça suffira ) de type "vehicule" ( code : vehicule [] monTableau=new Vehicule[2]; )  où tu mettras une instance de "véhicule" et une instance de "camion". Ensuite appèle la méthode "affiche()" pour chaque élément du tableau. Regarde le résultat et tu comprendras ce qu'on appelle polymorphisme.
 
Bon courage
 

Reply

Marsh Posté le 04-08-2005 à 12:49:29    

Tu déclares Vehicule abstraite car elle contient certainement des méthodes abstraites, qui ne sont implémentées que par ces descendants Camion, Auto.
 
Instancier un Vehicule n'aurait pas de sens. Tu mélangerais sur ta route Camion, Auto et Vehicule. Ca ne va pas. Tu peux instancier Camion et Auto, ça ne choque pas, et les manipuler comme des Vehicule. Mais instancer en plus un Vehicule, heuuuu....


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 04-08-2005 à 13:08:10    

En effet, tout est discutable selon la nature du projet. Mais notre élève connait-il déjà la notion d'abstraction ? ( je connais par son livre ainsi que l'ordre des chapitres )... enfin je disais ça, c'était pour éviter de l'embrouiller avec plein de noms compliqués d'un coup.

Reply

Marsh Posté le 04-08-2005 à 13:13:21    

il est temps que je l'écrive ce tuto je crois [:pingouino]
 
 
globalement : un problème s'analyse par rapport à un besoin, il y a de fortes chances que dans un bon paquets de problèmes, les bagnoles et les camions soient des instances de la même classe.
 
Désolé, mais la plupart des objets qui existent dans un programme ne modélisent pas directement des choses de la vraie vie.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 04-08-2005 à 13:13:52    

Vrai, mais mieux vaut prendre de bonnes habitudes dès le départ. Utiliser des analogies avec la vie réelle est par ailleurs à double tranchant.
 
Je m'explique. On parle de propriétés et de méthodes, ces dernières reflétant des comportements. Or, comment fait-on la plupart du temps ? Les "comportements" sont implémentés sur des "managers", ne laissant que les propriétés pour modéliser l'objet. POJO power.
 
Grosse arnaque des bouquins O.O., restés sur la bonne vieille O.O. sans tenir compte de design patterns devenus une habitude.
 
[:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 04-08-2005 à 13:20:36    

sircam a écrit :

Les "comportements" sont implémentés sur des "managers", ne laissant que les propriétés pour modéliser l'objet. POJO power.


c'est de la stratégie, ce n'est normalement pas pour des comportements intrinsèques.
 
typiquement, si tu fais de la simulation géométrique de bagnoles, les déplacement seronts effectués de l'extérieur, car tout déplacement possède des contraites physiques impliquant les autres bagnoles et l'environnement. Par contre, la consomation ou l'allumage des feux sont plutôt des opérations intrinsèques.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 04-08-2005 à 13:46:14    

http://www.objectmentor.com/resour [...] eMaker.pdf
tiens, ça c'est pas mal, on vient bien qu'à la fin ce ne sont pas des objets de la vraie vie qui restent dans le desing.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 04-08-2005 à 13:46:14   

Reply

Marsh Posté le 04-08-2005 à 14:19:01    

Mouais, je ne vois plus guère d'opérations intrinsèques dans les applis typiques commerce/finance ces jours-ci.
 
J'aime pourtant bien faire myCar.getFuelUsage();
 
Mais dans les bouquins, je n'ai jamais vu une telle différence. On parle de méthode et c'est tout, et les exemples "vie courante" tombent souvent à plat.
 
Pas évident pour les débutants.
 
[:pingouino]
 


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 06-08-2005 à 18:37:51    

Bon ok alors je suis encore un peu mélangée!
 
Est-ce qu'il y a des bons exemples sur le web en Francais?
 
Merci de votre aide.
 
Je vais essayer de travailler là-dessus et je vous reviens plus tard.

Reply

Marsh Posté le 06-08-2005 à 22:48:02    

Bonjour,
 
Alors voici ce que j'ai fait. J'ai défini une classe, fait l'héritage et le polymorphisme. Par contre, que dois-je ajouter pour ajouter une surchage??
 
J'ai aussi un message qui dit que j'ai deux erreurs??
 
Quelqun peut m'aider s.v.p.
 
Mon code :
 
 
class Vehicule
{
  // définition des attributs
  String marque;
  fonctionnement;
  caracteristique;
   
  // Constructeur
  Vehicule(String saMarque,String sonFonctionnement,String saCaracteristique)
  {
   marque=saMarque;
   fonctionnement=sonFonctionnement;
   caracteristique=SaCaracteristique;
  }
   
// définition des méthodes
   void getInformation()
  {
 
   System.out.println("" );
   System.out.println("Information sur les véhicules:" );
   System.out.println("Marque:" + marque);
   System.out.println("Fonctionnement:" + fonctionnement);
   System.out.println("Caracteristique:" + caracteristique);
  }
 
 
}  // fin de la classe Vehicule
 
 
 
class Camion extends Vehicule
{
  // définition des attributs
  String vitesse;
 
  // Constructeur
  Camion(String saMarque,String sonFonctionnement,String saCaracteristique,String saVitesse)
  {
   // Appel du constructeur de la classe de base: Vehicule
   super(saMarque,sonFonctionnement,saCarateristique);
   
 
   vitesse=saVitesse;
   
  }
 
  // définition des méthodes
  void getInformation()
  {
   System.out.println("" );
   System.out.println("Information sur le camion:" );
   System.out.println("Marque:" + marque);
   System.out.println("Fonctionnement:" + fonctionnement);
   System.out.println("Caracteristique:" + caracteristique);
   System.out.println("Vitesse:" + vitesse);
   System.out.println("" );
  }
 
 }  // fin de la classe Camion
 
 
 
class Avion extends Vehicule
{
  // définition des attributs
  String hauteur;
 
  // Constructeur
  Avion(String saMarque,String sonFonctionnement,String saCaracteristique,String saHauteur)
  {
   // Appel du constructeur de la classe de base: Vehicule
   super(saMarque,sonFonctionnement,saCarateristique);
   
 
   hauteur=saHauteur;
   
  }
 
  // définition des méthodes
  void getInformation()
  {
   System.out.println("" );
   System.out.println("Information sur l'avion:" );
   System.out.println("Marque:" + marque);
   System.out.println("Fonctionnement:" + fonctionnement);
   System.out.println("Caracteristique:" + caracteristique);
   System.out.println("Hauteur:" + hauteur);
   System.out.println("" );
  }
 
 }  // fin de la classe Avion
 
 
 
 
public class Information
{
 public static void main(String[] args)
 {
  // tonVehicule va faire référence à un objet de type Camion
  // monVehicule va faire référence à un objet de type Avion
 
  Vehicule monVehicule;
  Vehicule tonVehicule=new Vehicule ("Ford","Roule","Transporteur", 200);
 
  tonVehicule.getInformation();
 
  monVehicule = new Camion ("Airbus","Vole","Transporteur", 40000);
  monVehicule.getInformation();
 
 
   
 }
 
 
}

Reply

Marsh Posté le 06-08-2005 à 23:04:04    

1/ balise [code]
2/ revoi ce qu'est le polymorphisme :o


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 06-08-2005 à 23:22:28    

void getInformation()  
 
 
mouahahaha

Reply

Marsh Posté le 06-08-2005 à 23:22:32    

Kangol :   qu'est-ce que je dois corriger?
Je suis débutante.

Reply

Marsh Posté le 06-08-2005 à 23:23:09    

Taz : ou dois ajouter Void getInformation() ??

Reply

Marsh Posté le 06-08-2005 à 23:24:14    

rien, t'appelle une fonction getmachin, seulement elle retourne void, donc elle get rien du tout :)

Reply

Marsh Posté le 06-08-2005 à 23:25:37    

hum.........je suis désolée.......si je ne comprends pas!  hehe alors je dois ajouter Void getInformation()  en quelque part pour qu'elle le "get" comme tu dis?

Reply

Marsh Posté le 06-08-2005 à 23:40:32    

tachag a écrit :

hum.........je suis désolée.......si je ne comprends pas!  hehe alors je dois ajouter Void getInformation()  en quelque part pour qu'elle le "get" comme tu dis?


ce qu'il veut dire, c'est que vu son nom, ta fonction semble retourner une info ! or, son type de retour est void, ce qui veut dire qu'elle ne retourne rien du tout :o


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 06-08-2005 à 23:47:41    

Ok alors je devrais l'enlever?  Je suis sincèrement désolée je suis débutante et j'essaie de comprendre.  Que dois-je modifier dans mon code?  
 
Est-ce trop compliqué?  Ou bien, peux-tu me donner un exemple, semblable au mien qui comporte une classe, une surcharge, héritage et polymorphisme?
 
Merci beaucoup.

Reply

Marsh Posté le 06-08-2005 à 23:57:44    

tachag a écrit :

Ok alors je devrais l'enlever?  Je suis sincèrement désolée je suis débutante et j'essaie de comprendre.  Que dois-je modifier dans mon code?  
 
Est-ce trop compliqué?  Ou bien, peux-tu me donner un exemple, semblable au mien qui comporte une classe, une surcharge, héritage et polymorphisme?
 
Merci beaucoup.


je vais pas te donner d'exemple, mais des pistes :
- ta classe Vehicule étant une classe abstraite, elle ne doit implémenter aucune méthode.
- comme dit KangOl, revoit le polymorphisme : ta fonction getInformation() est sensée renvoyer des infos différentes en fonction du véhicule (une voiture n'a pas le même nombre de roues qu'un camion par exemple)
- tu dois donc redéfinir cette fonction dans chaque classe qui héritera de véhicule, et déclarer cette fonction comme virtuelle
- ...


Message édité par Harkonnen le 06-08-2005 à 23:58:05

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 07-08-2005 à 00:02:10    

euh non c'est pas ca que je voulais dire par revoir ce qu'etait le polymorphisme...
le polymorphisme, c'est plusieur méthodes qui portent le meme nom mais ont des paramètres différents :o
 
le fait de redéfinir une méthode dans une classe fille c'est un surchage :o


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 07-08-2005 à 00:04:19    

KangOl a écrit :

euh non c'est pas ca que je voulais dire par revoir ce qu'etait le polymorphisme...
le polymorphisme, c'est plusieur méthodes qui portent le meme nom mais ont des paramètres différents :o
 
le fait de redéfinir une méthode dans une classe fille c'est un surchage :o


:heink:
edit: t'as pas l'impression de te mélanger là ?


Message édité par Harkonnen le 07-08-2005 à 00:04:40

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 07-08-2005 à 00:04:56    

ok je vois.
Surcharge, comment redéfinir une méthode?
je ne sais pas comment faire mon code?
Dois-je tout recommencer?

Reply

Marsh Posté le 07-08-2005 à 00:05:54    

hehehe je suis toute mélangée!
Dois-je prendre un exemple d'animaux au lieu?

Reply

Marsh Posté le 07-08-2005 à 00:07:49    

ben il est bon ton code. On discutait juste sur le mauvais nom de ta fonction. Quand tu lances ton programmes, tu vois bien que c'est la méthode du vrai type de l'objet qui est appelée

Reply

Marsh Posté le 07-08-2005 à 00:11:30    

OK tout fonctionne!!!
 
Voici le code :
 
 
 
class Vehicule
{
  // définition des attributs
  protected String marque;  
  protected String fonctionnement;
   
   
  // Constructeur
  Vehicule(String saMarque,String sonFonctionnement)
  {
   marque=saMarque;
   fonctionnement=sonFonctionnement;
   
  }
   
// définition des méthodes
   void getInformation()
  {
 
   System.out.println("" );
   System.out.println("Information sur les véhicules:" );
   System.out.println("Marque:" + marque);
   System.out.println("Fonctionnement:" + fonctionnement);
     }
}  
 
// fin de la classe Vehicule
 
 
 
class Camion extends Vehicule
{
  // définition des attributs
  String vitesse;
 
  // Constructeur
  Camion(String saMarque,String sonFonctionnement,String saVitesse)
  {
   // Appel du constructeur de la classe de base: Vehicule
   super(saMarque,sonFonctionnement);
   
 
   vitesse=saVitesse;
   
  }
 
  // définition des méthodes
  void getInformation()
  {
   System.out.println("" );
   System.out.println("Information sur le camion:" );
   System.out.println("Marque:" + marque);
   System.out.println("Fonctionnement:" + fonctionnement);
      System.out.println("Vitesse:" + vitesse);
   System.out.println("" );
  }
 
 }  // fin de la classe Camion
 
 
 
class Avion extends Vehicule
{
  // définition des attributs
  String hauteur;
 
  // Constructeur
  Avion(String saMarque,String sonFonctionnement,String saHauteur)
  {
   // Appel du constructeur de la classe de base: Vehicule
   super(saMarque,sonFonctionnement);
   
 
   hauteur=saHauteur;
   
  }
 
  // définition des méthodes
  void getInformation()
  {
   System.out.println("" );
   System.out.println("Information sur l'avion:" );
   System.out.println("Marque:" + marque);
   System.out.println("Fonctionnement:" + fonctionnement);
   System.out.println("Hauteur:" + hauteur);
   System.out.println("" );
  }
 
 }  // fin de la classe Avion
 
 
 
 
public class Information
{
 public static void main(String[] args)
 {
  // tonVehicule va faire référence à un objet de type Camion
  // monVehicule va faire référence à un objet de type Avion
 
  Vehicule monVehicule;
  Vehicule tonVehicule=new Camion ("Ford","Roule","200 km/h" );
 
  tonVehicule.getInformation();
 
  monVehicule=new Avion ("Airbus","Vole","40000 pieds" );
  monVehicule.getInformation();
 
 
   
 }
 
 
}

Reply

Marsh Posté le 07-08-2005 à 00:13:47    

à quoi sert il d'implémenter getInformation() dans Vehicule, vu que cette classe ne sera jamais instanciée :??:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 07-08-2005 à 00:15:23    

ok alors selon toi, je peux enlever, dans la classe Vehicule, cette information?  Je me suis inspirée d'un modèle dans mon livre.    
 
Maintenant, comment ajouter une surcharge?

Reply

Marsh Posté le 07-08-2005 à 01:28:42    

KangOl> [:rofl]
 
tachag> si tu veux tester la surcharge rajoute juste dans ta classe avion par exemple une deuxième méthode getInformation mais qui prend un paramètre cette fois çi. Tu te retrouveras donc avec 2 méthodes getInformation ayant une signature différente dans une même classe. Mais bon ça devrait apparaître dans ton livre des choses aussi triviales.

Reply

Marsh Posté le 07-08-2005 à 11:02:35    

Harkonnen a écrit :

:heink:
edit: t'as pas l'impression de te mélanger là ?


bon a priori y a les deux...
http://fr.wikipedia.org/wiki/Polymorphisme
 
meme si le coup des classes c'est pas vraiment du polymorphisme...

Citation :

un mot hérité du grec signifiant "capacité d'assumer plusieurs formes".


 
ca c'est bien le coup d'un meme methode avec plusieurs formes possible. si elles sont dans des classes dérivées, c'est une redéfinition :o


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 07-08-2005 à 11:04:18    


:??:


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 07-08-2005 à 15:44:59    

un mot hérité du grec signifiant "capacité d'assumer plusieurs formes".
 
En OO ça se rapporte aux objets... un objet peut se faire passer pour un autre tout en gardant les méthodes qu'il aurait rédéfini, rien avoir avec une méthode qu'on surcharge.

Reply

Marsh Posté le 07-08-2005 à 15:57:42    

eventuellement...


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 07-08-2005 à 16:28:13    

Bon......je suis toute mélangée.!!!! hehehe
 
Il n'y aurait pas un exemple de code avec une surcharge et un sans surcharge? Peut-être que je comprendrais mieux.
 
Merci.

Reply

Marsh Posté le 09-08-2005 à 10:28:18    

[code]
class MaClasse{
   public void afficher(int i){

Reply

Marsh Posté le 09-08-2005 à 10:31:44    

Désolé, j'ai appuyé sur le mauvais bouton ... ;-)

Code :
  1. class MaClasse{
  2.    public void afficher(int i){
  3.       System.out.println(i)
  4.    }
  5. }


 
pour surcharger la méthode affiche, il te suffit de rajouter par exemple :

Code :
  1. public void afficher(String s){
  2.       System.out.println(s);
  3.    }


 
la méthode qui se nomme "afficher" est ainsi surchargée car elle comporte deux signature : une avec un entier en paramètre, et une deuxième avec une chaine de caractères en paramètre.
C'est aussi simple que ça.

Reply

Marsh Posté le 10-08-2005 à 01:18:58    

ha ok!
Je pense avoir compris. J'ai posté mon code avec une surcharge dans un nouveau message par erreur.  Vous pouvez allez lire le sujet : Surcharge aide

Reply

Marsh Posté le 10-08-2005 à 02:10:58    

Ok voici mon message :
 
Bonjour,  
 
Alors, j'ai essayé de faire une surcharge.    
 
Ma question est : pourquoi lorsque je fais execute file, l'information n'apparaît pas?  
 
Je vous transmets seulement le code d'une classe :  
 
class Camion extends Vehicule  
{  
  // définition des attributs  
  String vitesse;  
  String couleur;  
 
  // Constructeur  
  Camion(String saMarque,String sonFonctionnement,String saVitesse, String laCouleur)  
  {  
   // Appel du constructeur de la classe de base: Vehicule  
   super(saMarque,sonFonctionnement);  
     
 
   vitesse=saVitesse;  
     
  }  
 
  // définition des méthodes  
  void getInformation()  
  {  
   System.out.println("" );  
   System.out.println("Information sur le camion:" );  
   System.out.println("Marque:" + marque);  
   System.out.println("Fonctionnement:" + fonctionnement);  
   System.out.println("Vitesse:" + vitesse);  
   System.out.println("" );  
  }  
 
 // Surcharge : Permet de définir dans la même classe plusieurs méthodes.  
  void getInformation(String laCouleur)  
  {  
     System.out.println("" );  
   System.out.println("Information sur la couleur du camion:" );  
   System.out.println("Couleur:" + couleur);  
   System.out.println("" );  
  }  
 
   
 
   
 
 }  // fin de la classe Camion

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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