Ai-je compris les bases de l'OO ?

Ai-je compris les bases de l'OO ? - C++ - Programmation

Marsh Posté le 07-04-2008 à 00:21:33    

Bonjour,
je suis débutant et essaye de voir comment marche la notion d'héritage en c++. J'ai essayé d'écrire les classes correspondant à cet exemple :

 

http://www.commentcamarche.net/poo/images/animaux2.gif

 

j'ai écrites une instance de herbivore qui est elephant, une instance de classe pour carnivore qui est lion et deux instances de classes pour omnivore qui sont humain, et enfant qui hérite de humain car je fais l'hypothèse qu'un enfant peut apprendre et pas un adulte (hypothèse très simple c'est juste pour l''exemple). Pour chaque type d'instance j'ai crée un compteur juste pour pouvoir compter le nombre d'animaux.

 

Pourriez vous me dire ce que vous pensez de mon code ? Est ce qu'il manque des choses ? Y'a t-il des choses que j'ai faites qui sont à proscrire ..ou que j'ai oubliées ...? Bref, est ce que c'est comme çà qu'il faut faire ou y'a des problèmes ?

 

voici mon code :

 
Code :
  1. class Animal {
  2. /* abstract */
  3. public:
  4.  ~Animal() { cout << "destruction d'un animal" << endl; } //car cette classe sera forcément dérivée
  5.  //Animal * creer  ();
  6.  //Animal * cloner (Animal & a);
  7.  virtual void marcher() = 0;
  8.  virtual void manger()  = 0;
  9. protected:
  10.  int position[2]; //variables internes bidon
  11.  int vitesse[2];
  12. };
  13. //==================================================================
  14. class Herbivore : virtual public Animal {
  15. /* abstract */
  16. public:
  17.                 ~Herbivore() {cout << "destruction d'un herbivore" << endl; }
  18.  virtual void manger() { cout << "je mange de l'herbe" << endl ; }
  19. };
  20. class Carnivore : virtual public Animal {
  21. public:
  22.                 ~Carnivore() {cout << "destruction d'un carnivore" << endl; }
  23.  virtual void manger() { cout << "je mange de la viande" << endl ; }
  24. };
  25. class Omnivore : public Herbivore, public Carnivore  {
  26. public:
  27.                 ~Omnivore() {cout << "destruction d'un omnivore" << endl; }
  28.  void manger() { cout << "je mange de tout" << endl; }
  29. };
  30. //================== implémentations de Carnivore ==============================
  31. class Lion : public Carnivore {
  32. public:
  33.  Lion() { cout << "construction d'un lion" << endl; nb++; }
  34.  ~Lion() { cout << "destruction d'un lion" << endl ; }
  35.  void marcher () { cout << "je marche sur mes quatres pattes" << endl; }
  36.   static int nombre() { cout << "il y a" << nb << "lions" << endl; }
  37. private:
  38.  static int nb;
  39. };
  40. int Lion::nb=0;
  41. //================== implémentations d'Herbivore ==============================
  42. class Elephant : public Herbivore {
  43. public:
  44.  Elephant() { cout << "construction d'un élephant" << endl; nb++; }
  45.  ~Elephant()  { cout << "destruction d'un éléphant" << endl; }
  46.  void marcher () { cout << "je marche sur mes quatres pattes" << endl; }
  47.  static int nombre() { cout << "il y a" << nb << "elephants" << endl; }
  48. private:
  49.  static int nb;
  50. };
  51. int Elephant::nb=0;
  52. //================== implémentations d'Omnivore ==============================
  53. class Humain : public Omnivore {
  54. public :
  55.  Humain () {cout << "construction d'un humain" << endl; nb++; }
  56.  virtual ~Humain() { cout << "destruction d'un humain" << endl; } //destructeur virtuel car cette classe instanciable sera dérivée
  57.  virtual void marcher () { cout << "je marche sur mes deux jambes" << endl; }
  58.  static int nombre () { cout << "il y a" << nb << "humains" << endl;  }
  59. private:
  60.  static int nb;
  61. };
  62. int Humain::nb=0;
  63. class Enfant : public Humain {
  64. public:
  65.  Enfant() { cout << "Construction d'un enfant" << endl; nb++;}
  66.  ~Enfant() { cout << "Destruction d'un enfant" << endl; }
  67.  void marcher () { cout << "je marche sur mes deux jambes et mes deux mains" << endl; }
  68.  //le truc en plus qui fait que c'est une spécialisation d'Humain ...
  69.  void apprendre () { cout << "je suis un enfant et je peux apprendre" << endl; }
  70.  static int nombre () { cout << "il y a" << nb << "enfants" << endl; }
  71. private:
  72.  static int nb;
  73. };
  74. int Enfant::nb=0;
 

merci par avance pour vos commentaires !
 :wahoo:


Message édité par in_your_phion le 07-04-2008 à 13:32:26
Reply

Marsh Posté le 07-04-2008 à 00:21:33   

Reply

Marsh Posté le 07-04-2008 à 13:32:39    

up

Reply

Marsh Posté le 07-04-2008 à 19:26:23    

up ?  :sweat:

Reply

Marsh Posté le 07-04-2008 à 22:38:06    

personne peut me dire un mot sur ce que j'ai fait ?? ...
 
plz ....  :cry:

Reply

Marsh Posté le 08-04-2008 à 11:13:43    

Un decoupage en classes n'est pas universel. Il depend du probleme a modeliser. Difficile de savoir si tu as compris les bases de l'OO avec du code qui ne modelise aucun probleme.

Reply

Marsh Posté le 08-04-2008 à 13:18:39    

Ace17 a écrit :

Un decoupage en classes n'est pas universel. Il depend du probleme a modeliser. Difficile de savoir si tu as compris les bases de l'OO avec du code qui ne modelise aucun probleme.


 
salut!
ok, merci pour ta réponse.... mais quand meme, les classes sont censées modéliser le problème avec l'image, non ? bon c'est vrai que y'a aucune méthode d'implémentée ... mais en fait c'est surtout au niveau des virtual ou je ne suis pas sur

Reply

Marsh Posté le 08-04-2008 à 17:01:54    

Ouais enfin faire de l'héritage multiple avec des schémas en losange et donc de l'héritage virtuel c'est tout de même assez éloigné des bases de l'OO et ça pose pas mal de problèmes c'est un peu comme poser la question:
"Est-ce que j'ai compris les bases de l'analyse?" et de partir dans les recoins de la théorie de la mesure. Si tu veux vraiment faire du design objet à la base tu devrais éviter de commencer par ça...

Reply

Marsh Posté le 08-04-2008 à 17:13:06    

ElDesdichado a écrit :

Ouais enfin faire de l'héritage multiple avec des schémas en losange et donc de l'héritage virtuel c'est tout de même assez éloigné des bases de l'OO et ça pose pas mal de problèmes c'est un peu comme poser la question:
"Est-ce que j'ai compris les bases de l'analyse?" et de partir dans les recoins de la théorie de la mesure. Si tu veux vraiment faire du design objet à la base tu devrais éviter de commencer par ça...


 
ok ... en fait c'est parce que ça me semble être le plus compliqué donc si je pige ça c'est toujours un plus. Sinon par quoi je devrais commencer ?

Reply

Marsh Posté le 08-04-2008 à 17:20:59    

Attend d'avoir des messages du compilo genre inheritance via dominance ;)
 
Pour ce qui est de commencer, ben héritage simple avec les mécanismes de polymorphismes, forme du coplien chère à JoelF, etc... Y a plein de sites dans le Bibliolink et tu pourras toujours de faire plaisir plus tard avec de l'héritage multiple.

Reply

Marsh Posté le 08-04-2008 à 17:38:54    

ElDesdichado a écrit :

Attend d'avoir des messages du compilo genre inheritance via dominance ;)
 
Pour ce qui est de commencer, ben héritage simple avec les mécanismes de polymorphismes, forme du coplien chère à JoelF, etc... Y a plein de sites dans le Bibliolink et tu pourras toujours de faire plaisir plus tard avec de l'héritage multiple.


 
ok, merci. je vais jeter un œil à tout ça ...

Reply

Sujets relatifs:

Leave a Replay

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