[Javaquarium] Où permettre aux poissons de manger ...?

Partie 1.2-2.1 de l'exercice, difficultés de raisonnement

a marqué ce sujet comme résolu.

Bonjour à tous ! :D

Étant nouveau sur le forum, n’hésitez pas à me dire si je rate quelques étapes avant de poster ici. Merci d’avance.

Je viens demander votre aide concernant le Javaquarium que je suis en train de réaliser, mais en C++. Je rencontre déjà quelques soucis en termes de raisonnement sur la partie 1.2 de l’exercice, pour l’illustrer, j’ai monté un petit UML à cet effet (il sera bien sûr complété au fur et à mesure que j’avance dans ce projet).

javaquarium_uml
javaquarium_uml
Le raisonnement

J’avais donc à l’idée de réaliser un héritage multiple pour chaque race de poisson (J’en ai volontairement illustré que deux pour ce topic). On a donc concrètement une classe Fish/Poisson qui aura en enfant les 6 races qui eux-même hériteront de FIsh/Poisson, ainsi que de Cannibal ou Vegan selon ce qu’ils mangent.

Le tout avec une classe Aquarium qui va contenir tout ce beau monde. (J’ai oublié au passage la méthode permettant de lister les poissons en sortie).

Déjà, je ne sais pas vraiment si le raisonnement tient la route pour la suite, je le saurais très certainement plus tard.

Le problème

Mais vient ensuite le problème de la partie 1.2, ou l’idée est de définir une méthode pour chaque race de poisson (les deux classes Cannibal et Vegan me permettent de réduire ce nombre de déclaration à deux).

Actuellement, je ne sais pas comment faire en sorte que ces deux méthodes puissent agir sur les poissons existants dans l’Aquarium (il s’agit d’un vector<Fish>).

Le code (pour ceux qui voudraient y voir plus en détail ce qui est déjà fait)

Je laisse éventuellement l’intégralité du code ici si vous voulez y jeter un oeil : ici.

Voilà donc pour le problème. J’ai énormément de soucis en termes de raisonnement objet donc si vous avez d’autres propositions sans lien avec la problématique initiale n’hésitez pas. :o

Je vous remercie d’avance ! :)

+0 -0

Je fais un post à part car je pense avoir trouvé un début de solution à mon problème. D’autant que je déborde sur la partie 2.1 de l’exercice.

Voila l’idée : Les classes Cannibal et Vegan n’auraient qu’une seule fonction : renvoyer la nourriture qu’ils mangent. Je fais remonter cet énumération (car je procède par énumération avec {FISH, SEAWEED}) jusqu’à la classe mère Fish et son attribut food (car on part du principe que l’action "Manger" est commun à tous les poissons).

Une fois cela en poche, je repars dans la classe Aquarium ou tout serait géré ici. C’est à dire qu’en fonction de l’énumération contenue par l’instance de poisson en cours (FISH ou SEAWEED), je donne la possibilité de manger soit un autre poisson (en effaçant ce dernier du vector) ou bien une algue (par le même procédé). Le tout en prenant bien soin de faire attention à s’il s’agit pour le poisson, dans le cas ou c’est un carnivore(Cannibal), de ne pas se manger lui-même ou son espèce.

C’est une piste qui reste temporaire car elle me semble un peu brouillon. Si vous avez d’autres avis, je suis preneur.

J’ai mis à jour le code sur GitHub.

+0 -0

Dis tu voudrais un coup de main ? :euh: . Je pourrais faire quelques petits trucs sur le projet on ne sait jamais (j’ai jeté un coup d’oeil au code sur github ,il y a déjà pas mal de fichier :soleil: ).

+0 -0

Salut !

Je n’ai peut-être pas été clair, au temps pour moi !

Enfaite, je rencontrais quelques soucis au niveau de l’implémentation de la méthode manger pour mes poissons. (Je fais référence à l’exercice du Javaquarium 1.2 et 2.1.)

J’avais trouvé une solution temporaire (voir post au dessus du tien), mais elle me semble brouillon. Du coup, j’ai réfléchi à une autre idée: pourquoi pas implanter dans Cannibal/Vegan, une méthode qui fait appel à l’objet Aquarium afin d’avoir accès à mon vecteur de Poisson et d’Algues ? On en reviendrait donc à l’UML de base, mais avec un Aquarium en paramètre au lieu de "fish".

La deuxième question que je me pose de facto: est-ce que cette solution semble plus propre en termes de code que la précédente ?

+0 -0

Je te comprends , juste que je demandais si on pouvait collaborer ensemble sur cet exo bah sinon je suis en train de prendre en main un autre exo

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte