Héritage

GIL-ENSEM - Modifié par GIL-ENSEM le 19/01/2016 à 17:21
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 20 janv. 2016 à 07:57
Bonjour,

je suis en premier annee Genie industriel, viola 3 exercices :

s'il est possible de prendre en concideration le niveau de la reponse.
Exercice 1: Une bibliothèque

Pour la gestion d’une bibliothèque on nous demande d’écrire une application traitant des documents de nature diverse : des livres, qui peuvent être des romans ou des manuels, des revues, des dictionnaires, etc.
Tous les documents ont un numéro d’enregistrement (un entier) et un titre (une chaîne de caractères). Les livres ont, en plus, un auteur (une chaîne) et un nombre de pages (un entier). Les romans ont éventuellement un prix littéraire (un entier conventionnel, tandis que les manuels ont un niveau scolaire (un entier). Les revues ont un mois et une année (des entiers) et les dictionnaires ont une langue (une chaîne de caractères appartenant à un ensemble prédéfini, comme "anglais", "allemand", "espagnol", etc.).
Tous les divers objets en question ici (livres, revues, dictionnaires, romans, etc.) doivent pouvoir être manipulées en tant que documents.

A. Définissez les classes Document, Livre, Roman, Manuel, Revue et Dictionnaire, entre lesquelles existeront les liens d’héritage que la description précédente suggère. Dans chacune de ces classes définissez
• le constructeur qui prend autant arguments qu’il y a de variables d’instance et qui se limite à initialiser ces dernières avec les valeurs des arguments,
• déclarez private les variables d’instance (c’est conseillé, sauf indication contraire) définissez également des « accesseurs » publics get... permettant de consulter les valeurs de ces variables.
Écrivez une classe exécutable TestDocuments qui crée et affiche plusieurs documents de types
différentes.

B. Une bibliothèque sera représentée par un tableau de documents (on verra un autre jour de meilleures manières de faire, basées sur l’emploi d’une Collection). Définissez une classe Bibliotheque, avec un tel tableau pour variable d’instance et les méthodes :
• Bibliotheque(int capacité)- constructeur qui crée une bibliothèque ayant la capacité (nombre
maximum de documents) indiquée,
• void afficherDocuments()- affiche tous les ouvrages de la bibliothèque,
• Document document(int i)- renvoie le ième document,
• boolean ajouter(Document doc) - ajoute le document indiqué et renvoie true
(false en cas d’échec),
• boolean supprimer(Document doc)- supprime le document indiqué et renvoie true (false en cas d’échec)
• void afficherAuteurs()- affiche la liste des auteurs de tous les ouvrages qui ont un auteur (au besoin, utilisez l’opérateur instanceof)

C. Définissez, avec un effort minimal, une classe Livrotheque dont les instances ont les mêmes fonctionnalités que les Bibliotheques mais sont entièrement constituées de livres. Comment optimiser dans la classe Livrothequela méthode afficherAuteurs?



Exercice 2 : Polygones
Pour cet exercice vous devez disposer d’une classe Pointavec – au moins – deux membres d’instance privés xet yde type double(par exemple), un constructeur public Point(double x, double y), des accesseurs public double x()et public double y()et l’habituelle transformation en chaîne de caractères public String toString(). La classe Point définie à la série précédente devrait faire l’affaire.

A. Définissez une classe Polygone comportant la variable membre :
• protected Point[] sommets– tableau contenant les sommets du polygone et les méthodes :
• public Polygone (Point[] sommets)– construction d’un polygone à partir du tableau de ses sommets
• protected Polygone (int nbrSommets)– début de la construction d’un polygone à partir du nombre de ses sommets ; ces derniers restent indéterminés (ou plutôt valent null) et devront être donnés ultérieurement
• public Point getSommet(int i)– obtention du ième sommet du polygone
• public double aire()– calcul de la surface du polygone (voir indications ci-dessous)

B. Définissez une classe Triangle, sous-classe de Polygone, avec un constructeur
• public Triangle (Point a, Point b, Point c)– construction du triangle ayant les trois sommets indiqués

C. Définissez une classe Rectangle(sous-entendu, avec des côtés parallèles aux axes), sous-classe de Polygone, munie d’un constructeur
• public Rectangle(double x.Min, double x.Max, double y.Min, double y.Max)– construction d’un rectangle parallèle aux axes

D. Définissez une classe PolygoneRegulier, sous-classe de Polygone, disposant d’un constructeur
• public PolygoneRegulier(Point centre, double rayon, int nombreSommets)– construction du polygone régulier ayant le centre, le rayon et le nombre de sommets indiqués.

E. Écrivez une classe TestPolygoneavec une méthode mainconstruisant et affichant des polygones de diverses sortes et permettant de vérifier que la méthode aire est correcte.

Voyez-vous pourquoi certains membres de la classe Polygone ont été déclarés protected au lieu de private ? Aurions-nous pu faire autrement ?
Indications,
1. Voici une manière de calculer l’aire S d’un polygone ayant les sommets (X0, Y0), (X1, Y1), ...(Xn-1, Yn-1) :

S = 1/2 | (X0 + X1) × (Y0 – Y1) + (X1 + X2) × (Y1 – Y2) + ... + (Xn-2 + Xn-1) × (Yn–2 – Yn–1) + (Xn–1 + X0) × (Yn–1 – Y0) |

Indications, 2. Les sommets (Xi, Yi) d’un polygone régulier qui a n sommets, le point (Xc, Yc) pour centre, r Pour rayon et un sommet ayant Yc pour ordonnée, sont donnés par :
Xi = Xc + r × cos (2 × pi × i / n) ; Yi = Yc + r × sin (2 × pi × i / n)


Exercice 3 : Héritage ou composition ?
Prérequis. Si vous ne l’avez pas encore fait, jetez un œil sur la documentation de la classe java.util.ArrayList. Une arraylist (ou un vector) AL se comporte comme un tableau T, c’est-à- dire qu’elle offre l’accès indexé optimisé (on dit « en temps constant ») à ses éléments, sauf qu’au lieu de « x = T[i]» il faut écrire « x = AL.get(i)» et au lieu de « T[i] = x » il faut écrire « AL.set(i,x)». Cependant, une arraylist a un avantage considérable sur un tableau : elle s’occupe de l’allocation de son espace mémoire, l’augmentant lorsque c’est nécessaire, sans que le programmeur ait à s’en soucier.

Exercice. Un journal est une collection d’événements. Un événement est fait de deux champs : une date et un texte. Un journal doit posséder les opérations suivantes :
• unJournal.ajouter(unTexte)– ajout au journal d’un événement composé de la date courante (que cette méthode obtient automatiquement) et du texte indiqué
• unJournal.toString()– renvoie une chaîne de caractères contenant tous les événements du journal
• unJournal.toString(uneChaine) – renvoie une chaîne de caractères contenant tous les événements dont le texte contient la chaîne indiquée

N.B. Pour les dates, revoyez si nécessaire l’exercice 3 de la série 1.

A. Écrivez une classe Evenement et une classe Journal. On fera en sorte que la classe Evenement, soit une classe interne à Journal(une classe interne est simplement une classe définie à l'intérieur d'une autre classe. On se sert des classes internes pour ne pas polluer l'espace de noms. Généralement, seule la classe appelante y accède, bien qu'une classe interne ne soit pas forcement private). Evenement sera aussi simple que possible (les deux champs indiqués, un constructeur élémentaire et la méthode toString habituelle).
Dans cette question, la classe Journaldoit être une sous-classe de java.util.ArrayList.

B. Écrivez une classe TestJournal avec une méthode mainsimple qui lit et exécute des commandes comme:
+texte Ajout au journal de l’événement ayant le texte indiqué
? Listage de tous les événements du journal
?chaîne Listage des événements qui contiennent la chaîne indiquée
  • Abandon du programme


C. Réécrivez la classe Journalmais, au lieu d’en faire une sous-classe de ArrayList mettez-y un membre de type ArrayList. La classe TestJournal doit fonctionner sans changement.

D. Etre ou avoir ? Dans la question A vous avez lié les classes ArrayListet Journal par un lien d’héritage : un objet Journal« est » un objet ArrayList; dans la question C vous les avez liés par un lien de composition : un objet Journal« a » un objet ArrayList. D’après vous, quels sont les mérites de
l’une et l’autre manière de faire?
Dans quel cas contrôlez-vous mieux le comportement d’un objet Journal? Supposez qu’on vous demande d’interdire les suppressions d’événements du journal ; est-il facile d’obtenir cela dans la solution
A ?
Voyez-vous dans quelle situation l’héritage peut-il devenir préférable, voire nécessaire ?

2 réponses

BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
19 janv. 2016 à 17:57
Hello,

Je n'ai pas tout lu en détails mais...tu ne nous demande pas de faire ton travail à ta place quand même!? ;)

A lire: http://codes-sources.commentcamarche.net/forum/affich-1557761-bar-sujet-de-pfe-tp-et-autres-devoirs-scolaires
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
Modifié par Twinuts le 20/01/2016 à 07:53
Hello,

Si, si, il nous demande bien de faire le travail à sa place...
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
20 janv. 2016 à 07:57
Bonjour,


"je suis en premier annee Genie industriel"
Je pense sérieusement que tu vas y rester un moment en première année.

Je pense, que tu te trompes de forum, ici, nous ne faisons pas vos devoirs, nous ne cherchons pas à votre place et ne vous pondons pas du code sur demande.

0
Rejoignez-nous