TP sur l'héritage
Page Home (contact) Retour
TPs
Support de cours
Articles à vendre
Une société vend des articles de papeterie. Vous vous limiterez
aux articles suivants :
- stylos décrits par une référence,
un nom (par exemple "stylo noir B2"), un prix unitaire
et une couleur,
- ramettes de papier décrites par une
référence, un nom, un prix unitaire et le grammage
du papier (par exemple, 80 g/m²).
De plus cette société peut vendre ces articles par lots.
Vous supposerez que les lots sont composés d'un certain nombre d'un même
type d'articles, par exemple un lot de 10 stylos noirs B2 de la marque WaterTruc.
Un lot a une référence. Le nom
du lot est déterminé par le nombre d'articles dont il est composé
; par exemple "Lot de 10 stylo noir B2" (vous êtes dispensé de mettre
les noms au pluriel !). Le prix du lot est déterminé par le prix
unitaire de l'article multiplié par le nombre d'articles, auquel est enlevé
un certain pourcentage qui dépend du lot. Par exemple, si un lot de 10
stylos à 100 € a un pourcentage de réduction de 20 %, le prix du
lot sera de 10 x 100 x (100 - 20) / 100 = 800 €. Le prix d'un lot sera calculé
au moment où on demandera le prix du lot ; il n'est pas fixé une
fois pour toute et il change si le prix de l'article qui compose le lot est modifié.
Ecrivez des classes dans un paquetage "article"
pour représenter les différents articles.
On ne s'intéresse qu'aux différents types d'articles. Ainsi,
on aura une seule instance qui représentera le type "stylo noir
B2" et pas 250 instances si la société possède 250 "stylo
noir B2". Pour gérer les stocks, on pourrait ajouter
le nombre d'articles en stock pour chaque type, mais ça n'est pas demandé.
Vos classes devront permettre de faire du polymorphisme avec la méthode
qui donnera le prix d'un article (application dans l'exercice suivant sur les
factures).
Avant de commencer à coder, faites valider votre arborescence d'héritage
à l'enseignant qui encadre le TP.
Correction :
Les classes
Du polymorphisme dans une facture
La société établit des factures numérotées
(en partant de 1) et datées, comprenant le nom du client, le prix total
de la commande et, pour chaque article commandé, sa référence,
son prix unitaire, le nombre d'articles commandés et le prix total pour
cet article.
Pour simplifier, un client ne sera qu'un simple nom dans la facture (pas de classe
Client).
Ajoutez les classes pour représenter ces factures, dans un paquetage
"eg.ufe.toto.facture"
(où vous remplacerez toto par votre nom).
Vous écrirez une classe test qui affiche 1 facture pour
- 10 stylos (choisissez ses caractéristiques)
- 15 ramettes de papier
- 2 lots de 5 stylos (différents des 10 stylos)
et une autre facture pour
pour 2 clients différents.
Le programme créera tous les objets nécessaires à l'affichage
des 2 factures.
Une facture s'affichera sur le modèle suivant (on ne demande pas d'affiner
davantage le format d'affichage mais si vous pouvez faire mieux, n'hésitez
pas !) :
---------------------------------------------------------------------
Facture 125 Client: Toto Date: 10 novembre 2010
Quant. Ref. Nom PU PT
10 s1
Stylo Jade
50.0 500.0
15 r1
Ramette haute qualité 9.5
142.5
2 l1
Lot de 5 Stylo or 450.0 900.0
Prix total facture : 1542.5 €
---------------------------------------------------------------------
Pour tester vos classes, utilisez une classe semblable à cette classe TestFacture. Évidemment, il vous faudra
adapter ce code aux classes que vous avez écrites dans l'exercice précédent,
en particulier aux constructeurs de ces classes.
Correction :
Les classes
L'héritage appliqué aux employés
d'une entreprise, polymorphisme
Vous allez programmer le calcul des salaires hebdomadaires des employés
d'une entreprise.
Cette entreprise comporte plusieurs types d'employés :
- Des employés qui sont payés suivant le nombre d'heures qu'ils
ont travaillé dans la semaine. Ils sont payés à un certain
tarif horaire et leurs heures supplémentaires (au-delà de 39
heures) sont payées 30 % de plus que les heures normales.
- D'autres employés, payés de la même façon, mais
leurs heures suplémentaires sont payées 50 % de plus que les
heures normales.
- Les commerciaux sont payés avec une somme fixe à laquelle
on ajoute 1 % du chiffre d'affaires qu'ils ont fait dans la semaine.
Modélisez cette situation à l'aide de classes dans
un paquetage employe.
- Vous donnerez un nom à chacun des employés. On ne pourra
modifier le nom d'un employé.
- Vous commencerez par écrire une classe Employe dont hériteront
les autres classes.
- Le temps est compté pour faire ce TP. Pour ne pas avoir trop de
modificateurs vous simplifierez en ne donnant qu'un seul modificateur setInfosSalaire
pour entrer ou modifier les informations brutes nécessaires au calcul
des salaires (nombre d'heures de travail, chiffre d'affaire,...). N'essayez
pas de faire du polymorphisme avec cette méthode.
- Les classes comporteront au moins 2 constructeurs : un qui ne prend en
paramètre que le nom de l'employé et l'autre qui prend en paramètres
le nom et toutes les informations pour le calcul du salaire.
- Le calcul des salaires se fera dans la méthode getSalaire()
qui sera utilisée pour faire du polymorphisme.
Un conseil : écrivez votre hiérarchie
d'héritage sur papier et faites-la vérifier par l'enseignant avant
de commencer à coder.
Une classe Paie comportera une unique méthode main()
qui entrera les informations sur des employés des différents types
(au moins 3 commerciaux). Les employés seront enregistrés dans
un tableau employes.
Au moins un des employés sera créé avec le constructeur
qui n'a que le nom en paramètre, et vous entrerez ensuite les informations
pour son salaire avec la méthode setInfosSalaire. Pour au moins
un autre employé, vous utiliserez le constructeur pour entrer les informations
sur le salaire.
La méthode main affichera le salaire hebdomadaire de chacun
des employés dans une boucle "for" qui parcourra le tableau
des employés. Vous utiliserez le polymorphisme avec un accesseur pour
le salaire. L'affichage aura exactement la forme : "Dupond gagne 2500
€ ". Vérifiez les calculs des salaires !
Correction
Les différentes
classes
Javadoc et fichiers jar (à présenter à
l'enseignant au prochain TP)
Générez la documentation du paquetage sur les employés
avec l'outil javadoc.
Ajoutez une page pour votre travail dans votre page Web personnelle, accessible sur le Web.
Cette page devra donner les explications nécessaires et elle permettra
d'accéder
- à un fichier ZIP contenant
- les fichiers source des classes,
- les fichiers classe de ces classes (dans un fichier JAR à part). Voici un cours qui contient une courte introduction aux fichiers JAR. si vous voulez plus d'informations vous pouvez consulter les pages du tutoriel d'Oracle, un guide sur les fichiers JAR et la documentation sur l'outil jar. Pour bien comprendre les outils et les fichiers MANIFEST, vous ne devez pas utiliser un IDE pour générer votre jar ; utilisez directement la commande jar.
- un script d'installation pour l'application (seulement si c'est nécessaire).
Ce script devra être simple à utiliser et permettre de démarrer
simplement l'exécution de la classe Paie par le script "execute".
Cette commande devra être incluse dans le fichier ZIP
- à la documentation de ces classes en format HTML
Donnez 2 versions de vos scripts : pour PC sous Windows/DOS (.bat)
et pour Unix/Linux (.sh).
On doit pouvoir installer et lancer l'application en moins de 3 minutes (environ
;-) ).
Pour ceux qui ont déjà fini...
L'héritage chez les animaux (super !)
Des animaux, des mamifères et des poissons. Des chiens et des hommes...
Modélisez avec des classes. Ajoutez à chaque classe fille au
moins une variable et une méthode nouvelles. Arrangez-vous pour que les
classes filles puissent manipuler directement les nouvelles variables.
Voici ci-dessous une classe de test et l'affichage que vos classes devront
fournir. La méthode getType de vos classes devra fournir une description de l'instance, en incluant les
descriptions de toutes les classes mères. Pour cela, il vous est imposé
d'utiliser le mot-clé super.
La classe de test :
public class TestAnimal {
public static void main(String[] args) {
Animal[] animaux = new Animal[5];
animaux[0] = new Animal("Truc");
animaux[1] = new Animal();
animaux[2] = new Chien("Médor");
animaux[3] = new Homme();
animaux[4] = new Homme("Robert");
for (int i = 0; i < animaux.length; i++) {
System.out.println(animaux[i].getType());
}
}
}
L'affichage :
Je suis un animal de nom Truc.
Je suis un animal.
Je suis un animal de nom Médor. Je suis un mamifère. Je suis un chien.
Je suis un animal. Je suis un mamifère. Je suis un homme.
Je suis un animal de nom Robert. Je suis un mamifère. Je suis un homme.
Correction :
Les classes
Retour TPs