> Tous les forumsAutres langages

 Classe abstraite,interfaceSujet résolu
Statut du sujet : RESOLU Imprimer
 Premium
  Posté le 15/04/2006 @ 15:15  
 Petit astucien

205 Messages
Bonjour, j'aurais besoin d'aide pour lier les différents types de classes entre elles,c'est à dire savoir quelles sont celles qui doivent être définies commes des interfaces ,classes abstraites,classes. Alors,voici les classes à lier : Animal,Mammifere, Singe, Felin, Serpent, Chimpanzé, Orang-Outan, Lion, Tigre, Boa Merci par avance
 Afficher le profil de PremiumEnvoyer un message privé à Premium
 
 
Publicité
 breizhbugs  Posté le 15/04/2006 à 19:59  
Astucien

3001 Messages
Message original par Premium
Bonjour, j'aurais besoin d'aide pour lier les différents types de classes entre elles,c'est à dire savoir quelles sont celles qui doivent être définies commes des interfaces ,classes abstraites,classes. Alors,voici les classes à lier : Animal,Mammifere, Singe, Felin, Serpent, Chimpanzé, Orang-Outan, Lion, Tigre, Boa Merci par avance
Bon alors en ne considerant que classe "mères" (abstraite) et classe normale: Animal, Mammifere, singe, felins et serpent sont des categories(aillant des relations entres elles), dont on aura pas d'objets animal (theoriquement)-> classe abstraite. De plus: -un mammifere est un animal -un singe est un mammifere. -un felin est un mammifere. -un serpent est un animal. Chimpanzé, Orang outan, lion, tigre et boa sont des "objets" que tu peux toucher (ils sont reels!)->classe normale.
Afficher le profil de breizhbugs Voir la configuration de breizhbugsEnvoyer un message privé à breizhbugs
 Revenir en haut de la page
 AlexPrince  Posté le 16/04/2006 à 08:54  
Petit astucien

398 Messages
Animal Animal - > Mammifère Animal - > Mammifère - > Singe Animal - > Mammifère - > Singe - > Chimpanzé ... La flèche signifie "dérive" ou "est dérivé de" si tu lis de droite à gauche. En fait, ici, tout ce qui n'est pas le nom d'un animal doit être une classe purement virtuelle (aussi appellée interface ou class abstraite).
Afficher le profil de AlexPrinceEnvoyer un message privé à AlexPrince
 Revenir en haut de la page
 Premium  Posté le 16/04/2006 à 12:40  
Petit astucien

205 Messages
Bonjour, j'ai un souci pour créer mes classes dans l'exercice suivant . J'ai crée mes classes de cette manière comme tu l'as détaillé Animal(classe abstraite) Mammifere(interface) Serpent(interface) Singe hérite de Animal et implémente Mammifere Felin hérite de Animal et implémente Mammifere Boa hérite de Animal et implémente Mammifere Chimpanze hérite de singe OrangOutan hérite de singe Tigre hérite de félin Lion hérite de félin Mon souci est que j'écris toutes les méthodes dans la classe abstraite Animal et que je ne sais pas quoi mettre dans les interfaces Mammifere et Serpent. Si quelqu'un pouvait m'aider à mieux répartir les méthodes? Merci d'avance
On veut définir une hiérarchie de classes pour représenter des animaux en vue d'écrire un programme d'aide à la gestion d'un zoo. On s'interressera aux propriétés suivantes : -alimentation typique des ces animaux -poids d'un animal en particulier -dangerosité habituelle -le nom de l'animal La première étape sera de définir la hiérachie des classes pour représenter : -Chimpanzé nourriture : 3kg de banane, pas dangereux, pas protégé, poids max 100 kg -Orang-Outan : 3 kg de banane, pas dangereux, pas protégé, poids max 500 kg -Lion : 3 kg de viande,dangereux,pas protégé,poids max 200 kg -Tigre : 4 kg de viande et une jambe de porc, dangereux, pas protégé, poids max 150kg -Boa : 1 poulet, dangereux,dangereux, protégé, poids max 50 kg -Creez les classes, classes abstraites, ou interface Animal, Mammifere, Singe, Felin, Serpent ainsi que les classes ci-dessus -Ajouter les fonctions suivantes: -String getName() -double getWeight() -boolean isDangerous() -String getFeedingInfo() -Ecrire une methode toString() permettant d'obtenir une description complète de l'animal. Cette description contiendra au minimum toutes les infos décrites ci-dessus. -Dans le cas du Boa,la méthode doit en plus spécifiée que c'est une espèce protégée(en ajoutant un préfixe espèce protégé à la description)
Afficher le profil de PremiumEnvoyer un message privé à Premium
 Revenir en haut de la page
 koala01  Posté le 18/04/2006 à 02:06  
Astucien

4715 Messages
Salut, Selon ce que tu indiques, on pourrait estimer que les classes animal et mamifère sont des classes abstraites… Si c'est clair pour la classe animal, la raison qui m'incite à fournir mamifère en tant que classe abstraite est qu'elle est destinée à être spécialisée en felin et en singe… Tous les membres et toutes les méthodes doivent etre déterminés dans la classe animal, et toutes les méhtodes peuvent y etre implémentées, à l'exception de la classe ToString()qui doit etre virtuelle pure dans animal… Elle devra d'ailleurs rester virtuelle pure dans la classe mamifère, mais etre implémentée dans les classes "serpent", "singe" et "felin". Cela aura bel et bien pour effet de rendre la classe mamifère abstraite, et de prévoir une action donnée pour les classes "serpent", "singe", et "felin" Tu obtiendra donc les classes suivantes la classe animal classe abstraite par la présence de toString() en tant que méthode virtuelle pure [code] class animal { private: std::string Nom; bool dangeureux; bool protege; int poid_nourriture; std::string type_nourriture; double poid_max; public: //les méthodes qui suivent doivent etre implémentée dans animal virtual std::string getName(); virtual double getWeight(); virtual boolean isDangerous(); virtual std::string getFeedingInfo(); //les trois méthodes qui suivent doivent etre implémentée //et ont pour but d'éviter les constructeurs et opérateurs par défaut animal(); animal(animal &); animal & operator=(animal &){return *this;}; //le destructeur (qui ne fait rien, en fait) virtual ~animal(); //la seule méthode virtuelle pure virtual std::string toString()=0; };[/code] la classe serpent classe non abstraite (nécessite l'implémentation de toString()) [code] class serpent: public animal { public: //toutes les méthodes sont à implémenter //les constructeurs et opérateurs serpent(); serpent(); serpent & operarot=(serpent &); //le destructeur (qui ne fait rien) virtual ~serpent(); virtual std::string toString(); }[/code] la classe mamifère n'implémente que les constructeurs et opérateurs, mais n'implémente pas toString(), ce qui la fait rester abstraite [code] class mamifere: public animal { public: mamifere(); mamifere(mamifere &); mamifere& operator=(mamifere &); virtual ~mamifere(); };[/code] la classe felin classe non abstraite (nécessite l'implémentation de toString()) [code] class felin:public mamifere { public: //tout doit etre implémenté felin(); felin(felin &); felin& operator(felin &); virtual ~felin(); std::string toString(); }; [/code] la classe singe classe non abstraite (nécessite l'implémentation de toString()) [code] class singe:public mamifere { public: //tout doit etre implémenté singe(); singe(singe &); singe& operator=(singe &); virutal ~singe(); std::string toString(); }; [/code] L'implémentation de toString() variera principalement par le fait que la string créé commencera par le type d'animal auquel on a affaire (du genre de) [code] std::string serpent::toString() { std::string renvoi="Serpent :"; //instruction completant la chaine return chaine; } std::string felin::toString() { std::string renvoi="Felin :"; //instruction completant la chaine return chaine; } std::string singe::toString() { std::string renvoi="Singe :"; //instruction completant la chaine return chaine; }[/code] mais suivra pour le reste toujours les memes instructions (ajout du poid et du type de nourriture, dangeurosité, bénificie d'une protection, poid maximum…) Quelques remarques: Pour chaque classe, il est largement préférable de définir un constructeur normal et par copie, plutot que d'utiliser ceux qui seront utilisés par défaut s'ils ne sont pas définis Pour chaque classe, il est largement préférable de définir un opérateur d'affectation (c'est le but du nom_de_classe & operator=(nom_de_classe &) ) Il serait pour chaque classe intéressant de prévoir un constructeur prenant en argument toutes les valeurs à définir, à moins de rendre les membres public, pour pouvoir les définir ultérieurement (ce constructeur n'a jamais été donné dans le code) Il pourrait à chaque fois faire appel à l'héritage pour l'initialisation, et n'etre initialisant que dans animal. Dés qu'une méhtode est virtuelle dans une classe, il est largement préférable de rendre le destructeur également virtuel De nombreux compilateurs acceptent qu'on ne le prévienne pas du fait que le destructeur est virtuel, ou que l'on ne rappelle pas dans les classes héritantes que certaines méthodes héritées sont virtuelles, mais le fait de l'indiquer limite grandement ne serait-ce que les avertissements pour d'autres compilos (gcc, souvent utilisé sous linux est dans le cas)
Afficher le profil de koala01 Voir la configuration de koala01Envoyer un message privé à koala01
  Revenir en haut de la page
 Premium  Posté le 19/04/2006 à 08:03  
Petit astucien

205 Messages
koala01,merci pour tous ces détails
Afficher le profil de PremiumEnvoyer un message privé à Premium
 Revenir en haut de la page
Haut de la page 
Inscrivez-vous !
- Posez vos questions

- Résolvez vos problèmes

- Aidez les autres

- Participez et créez vos discussions

- Dialoguez en privé avec d'autres membres

- Suivez vos sujets préférés

- Affichez les signatures des membres

TOUT EST GRATUIT !

Je crée mon compte



Vous avez besoin d'aide ?
Des centaines d'experts sont à votre disposition sur les forums PC Astuces pour vous aider gratuitement, 24h/24, 7j/7.

Les derniers sujets résolus !
 

 > Tous les forumsAutres langages

 
Forum PC Astuces© 1997-2008 WebastucesAller en haut de la page