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 (les prix sont de type int) : 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. Un lot a une référence. Le nom du lot est déterminé par le nombre d'articles et le nom de l'article 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é.

Écrivez 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 donne le prix d'un article, que l'article soit un stylo, une ramette de papier ou un lot (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. Une facture doit pouvoir afficher 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. Les numéros des factures sont générés automatiquement en utilisant une variable static qui est incrémenté à chaque nouvelle facture ; la première facture a le numéro 1, la suivante le numéro 2, et ainsi de suite.

Pour simplifier, un client ne sera qu'un simple nom dans la facture (pas de classe Client) et la date sera donnée sous la forme d'une String (par exemple "15/05/2015") ; dans le JDK il existe des classes pour représenter les dates mais elles ne seront pas utilisées dans cet exercice.

Pour conserver les articles facturés, une facture contient un tableau de lignes de facture. Une ligne de facture contient un article et le nombre d'articles facturés. Vous écrirez une classe Ligne pour cela. Pour simplifier vous supposerez qu'une facture ne peut pas contenir plus de 20 lignes de facture ; rangez ce nombre 20 dans une constante de la classe Facture.

Ajoutez les classes pour représenter ces factures dans un paquetage "facture".

Voici une classe TestFacture (adaptez ce code aux classes que vous avez écrites dans l'exercice précédent, en particulier aux constructeurs de ces classes) qui affiche 1 facture pour

et une autre facture pour

pour 2 clients différents.

Le programme créera tous les objets nécessaires à l'affichage des 2 factures.

Pour information, voici le code d'une méthode afficheToi() de la classe Facture qui utilise System.printf, comme avec le langage C. Vous pouvez l'utiliser. Avec cette méthode l'affichage de la facture sera :

Facture numéro 1 ; Client : Toto ; Date : 10/11/2010 
 Quant. |   Réf. |                    Nom |         PU |         PT 
     10 |     s1 |             Stylo jade |         50 |        500 
     15 |     r1 |  Ramette haute qualité |         80 |       1200 
      2 |     l1 |      Lot de 5 Stylo or |        450 |        900 
                                    Prix total facture :       2600

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 :

Modélisez cette situation à l'aide de classes dans un paquetage employe. Un conseil : écrivez votre hiérarchie d'héritage sur papier et faites-la vérifier par l'enseignant avant de commencer à coder.

Ecrivez une classe Paie qui comporte une unique méthode main. Dans cette méthode vous entrerez les informations sur des employés des différents types (au moins 3 employés). Les employés seront enregistrés dans un tableau employes.

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 la méthode getSalaire(). L'affichage aura exactement la forme : "Dupond gagne 2500 € ". Vérifiez les calculs des salaires !

Correction

Les différentes classes


Javadoc et fichiers jar (Optionnel)

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

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