Projet du Programmation Orientée Objet

Fermé
archene Messages postés 1 Date d'inscription vendredi 24 novembre 2017 Statut Membre Dernière intervention 24 novembre 2017 - 24 nov. 2017 à 11:43
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 - 24 nov. 2017 à 12:07
Bonjour, les amis SVP aider moi a terminer ce projet j'ai des probleme a le terminer


On souhaite écrire une classe Livre. Voici les attributs et les méthodes de celle-ci :
Livre
// Variables - titre : string - auteur : string - nbPages : entier
// Constructeur + Livre(unAuteur : string, unTitre : string) // Accesseur + getAuteur( ) : string // Modificateur + setNbPages(n : entier)
1) Implémentez cette classe !
2) ajoutez une méthode main() pour : Créer 2 livres et afficher les auteurs de ces 2 livres.
3) Ajoutez un accesseur pour la variable titre et la variable nbPages.
4) Ajouter un modificateur pour les variables auteur et titre.
5) Changez le modificateur de nbPages : il ne devra changer le nombre de pages que si on lui passe en paramètre un nombre positif, et ne rien faire sinon, en affichant un message d'erreur. On remarquera l'intérêt des variables private : on peut contrôler leur modification dans les éventuelles méthodes qui permettent de les modifier.
6) Dans la méthode main(), o donnez le nombre de pages de chacun des 2 livres, o faites afficher ces nombres de pages, o calculez le nombre de pages total de ces 2 livres et affichez-le.
7) Dans la classe Livre, ajoutez une méthode afficheToi() qui affiche une description du livre (auteur, titre et nombre de pages). Utilisez afficheToi() dans la méthode main().
8) Ajoutez l'instruction System.out.println(livre) où livre désigne un des livres que vous avez créés. Vous essaierez de comprendre ce qui est affiché après avoir fait les 2 questions suivantes.

9) Ajoutez une méthode toString() qui renvoie une chaîne de caractères qui décrit le livre. Donnez à la méthode toString() le même profil que la méthode de même nom de la classe java.lang.Object. Exécutez à nouveau la classe. Voyez ce qui est affiché maintenant par l'instruction System.out.println(livre). Miracle ! println() utilise automatiquement la méthode toString() de la classe de l'objet qu'il a à imprimer.
10) Modifiez la méthode afficheToi() pour utiliser toString().
11) Ajoutez 2 constructeurs pour avoir 3 constructeurs dans la classe : o un constructeur qui n'a pas de paramètre, o un qui prend en paramètre l'auteur et le titre du livre, o et l'autre qui prend en plus le nombre de pages. Utilisez les 3 constructeurs (et éventuellement d'autres méthodes) pour créer 3 livres de 300 pages dans la méthode main.
12) Ajoutez un prix aux livres (nombre qui peut avoir 3 décimales de type Java double) avec 2 méthodes getPrix et setPrix pour obtenir le prix et le modifier. Ajoutez au moins un constructeur qui prend le prix en paramètre. Testez. Si le prix d'un livre n'a pas été donné, la description du livre (toString()) devra indiquer "Prix pas encore donné". Attention, un livre peut être gratuit (0 est une valeur possible pour un prix) ; la valeur -1 indiquera que le prix n'a pas encore été donné.
13) On bloque complètement les prix : un prix ne peut être donné qu'une seule fois et ne peut être modifié ensuite (une tentative pour changer le prix ne fait qu'afficher un message d'erreur). Récrivez la méthode setPrix (et autre chose si besoin est). Vous ajouterez une variable booléenne prixFixe (pour "prix fixé") qui indiquera que le prix ne peut plus être modifié. Faut-il écrire une méthode "setPrixFixe" pour modifier la variable booléenne ? Ajoutez une méthode "isPrixFixe" qui renvoie vrai si le prix a déjà été fixé.
14) Dans la classe Livre écrivez une méthode d'instance compare pour comparer 2 livres sur leur nombre de pages. compare prend un livre en paramètre et elle renvoie 0 si le livre a le même nombre de pages que l'instance qui reçoit le message, 1 si l'instance courante ("this") a plus de pages que le paramètre et -1 sinon. Pour tester, affichez l'auteur du plus gros livre.
15) Dans la classe Livre, écrivez une méthode de classe compare2 pour comparer 2 livres (passés en paramètres) sur leur nombre de pages.
16) Créez une classe Etagere pour représenter une étagère qui peut contenir un certain nombre de livres (fixe pour chaque étagère). Vous utiliserez un tableau pour ranger les livres : o Le constructeur prendra en paramètre le nombre de livres que pourra contenir l'étagère. o Vous ajouterez des méthodes pour :
a) Donner le nombre de livres que peut contenir l'étagère, et le nombre de livres qu'elle contient.
b) Ajouter des livres ("void ajouter(Livre)"). Vous ajouterez les livres à la suite des livres déjà ajoutés dans l'étagère ; le premier livre est ajouté au début de l'étagère (au début du tableau). Il devra être impossible d'ajouter des livres dans une étagère pleine.
c) Récupérer un livre dont on donne la position sur l'étagère (le livre reste sur l'étagère, on récupère simplement une référence sur le livre). La méthode renverra une instance de Livre. La position du premier livre d'une étagère devra être 1 (et pas 0, bien que le livre soit rangé dans la première position du tableau, qui est d'indice 0). La signature de la méthode sera "Livre getLivre(int)".
d) Chercher sur l'étagère un livre repéré par son titre et son auteur. La méthode renverra la position du livre dans l'étagère (ou 0 si le livre n'y est pas). Le profil de la méthode sera "int chercher(String, String)". S'il y a plusieurs livres avec le même titre et le même auteur, la méthode renvoie celui qui a le plus petit indice.
e) Avoir une fonctionnalité semblable à la précédente, mais la méthode renvoie un tableau de positions s'il y a plusieurs livres qui ont ce titre et cet auteur. On aimerait appeler cette méthode "chercher" ; est-ce possible ? Le tableau aura pour taille le nombre de livres trouvés (0 si aucun livre n'a été trouvé). Si vous avez besoin de faire une copie de tableau, utilisez la méthode arraycopy pour voir... Ecrivez aussi 2 méthodes pour rechercher tous les livres d'un auteur, ou tous les livres qui ont un certain titre. Cette fois-ci, les méthodes renvoient un tableau de livres.
f) Enlever des livres. Vous "tasserez" les livres vers le début quand vous enlèverez des livres. Vous écrirez 2 méthodes de même nom pour enlever un livre (on appelle ça une surcharge) :
 une méthode qui repèrera le livre par sa position (1 pour le premier livre) dans l'étagère (de profil "Livre enleverLivre(int)"),
 une méthode qui repèrera le livre par son auteur et son titre, et qui utilisera la méthode chercherLivre (de profil "Livre enleverLivre(String, String)"). Les 2 méthodes renverront le livre supprimé (ou null si le livre n'a pas été trouvé).
g) Renvoyer une description d'une étagère (la fameuse, et bien utile, méthode toString()). Utilisez-la dès le début, par exemple pour tester la méthode ajouter.
h) Et tout ce qu'il vous semblera utile d'ajouter... Dans la méthode main(), vous créerez des livres, 2 étagères et ajouterez les livres dans les étagères. Vous chercherez un des livres dans une étagère ; s'il y est, vous ferez afficher son nombre de pages. Vous rechercherez tous les livres d'un auteur et les ferez afficher. Vous supprimerez un des livres d'une étagère. Vous ferez afficher à chaque fois que nécessaire les étagères modifiées (en utilisant la méthode toString()).
17) Dans la méthode de Etagere qui ajoute un livre sur l'étagère, enlevez les tests qui vérifient que l'étagère n'est pas pleine. Pour la suite, appelons cette méthode "ajouter". Dans la méthode main(), provoquez la levée d'exception en ajoutant un livre dans une étagère pleine. Notez les noms des exceptions levées.
18) Mettez dans des blocs "try ... catch" les appels à la méthode ajouter. Les messages d'erreurs seront affichés par ces blocs dans la méthode utilisatrice des étagères. Dans votre message d'erreur, faites afficher la pile des appels de méthodes qui a conduit à l'erreur (voir printStackTrace).
19) Ecrivez votre propre classe d'exception EtagerePleineException pour ce type d'exception. La méthode ajouter devra utiliser cette nouvelle exception. Un attribut privé de cette classe sera une référence vers l'étagère qui a provoqué le problème. Les méthodes qui utiliseront Etagere (en dehors de Etagere) pourront ainsi afficher des messages du type "Impossible d'ajouter un livre à cette étagère car elle ne peut contenir que 6 livres", ou plus généralement, récupérer des informations sur l'étagère où il y a eu un problème (par exemple, afficher la liste des livres qu'elle contient déjà).
20) Les exceptions doivent être traitées par la méthode qui en sait assez pour prendre la bonne décision. Par exemple, il serait mauvais de traiter l'exception par la méthode ajouter qui ne peut prendre la bonne décision. Pour illustrer cela, écrivez une classe Librairie qui possède une méthode ajouterLivre() qui ajoute des livres dans des étagères. Si une étagère est pleine alors que l'on veut ajouter un livre, on n'affiche pas de message d'erreur mais on crée une nouvelle étagère dans laquelle on range le livre. Vous créerez des étagères qui peuvent contenir 3 livres et vous rangerez les étagères dans un ArrayList<Etagere>. Pour créer une instance d'une telle liste : listeEtageres = new ArrayList<Etagere>(); pour ajouter une étagère dans une telle liste : listeEtageres.add(etagere);
21) Ajoutez à la classe Librairie une méthode qui affiche tous les livres qui ont été ajoutés

1 réponse

Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 929
24 nov. 2017 à 12:07
0