Vous êtes sur la page 1sur 7

15/04/2008

Programmation Orientée Objets et Evénementielle


DUT SRC IUT Meaux année 2008-Module M2.23
TD 3 et 4 Java : initiation à la notion de classe, héritage,
polymorphisme

Exercice 1 : Analyse d un programme Java. Objectifs : hiérarchie de classe, héritage


Considérons le programme Java suivant :

public void Acheter(String nom) {
class Livre { proprietaire = nom ; 
  // }
  //  les attributs }
  //
protected string titre, auteur, proprietaire ; class BD extend Livre { 
protected int nb_page ;  private boolean encouleur ; 
double prix ;    public BD(String t,String a,double p,int 
  // nb,boolean c){
  //  les méthodes   super(t,a,p,nb) ; 
  //   encouleur = c ;
public Livre(String t, String a, double p, int  }
nb){ }
titre = t ; auteur = a ; 
prix = p ; proprietaire = "" ; 
nb_page = nb ;  class Album extends Livre { 
} boolean page_coloriee[]; 
public void Afficher() { public Album(String t, String a, double p, 
System.out.println("Titre : " + titre)  int n){
;   super(t,a,p,n) ; 
System.out.println("Auteur : " +    page_coloriee = new boolean[n];
auteur) ;   int i ; 
System.out.println("Prix : " + prix) ;   for (i=0 ; i<100 ; i++) 
System.out.println("Nombre de pages :    page_coloriee[i] = false ; 
" + nb_page); }
if ( this.Est_neuf() ) {  public void Colorie(int num_page){
System.out.println("Aucune  if((page_coloriee[num_page]==false)&& 
proprietaire" ) ; !Est_neuf()){
} else { page_coloriee[num_page] = 
 System.out.println("Proprietaire:  true ; 
"+proprietaire); } else {
} System.out.println("page 
System.out.println() ; deja coloriee" ) ;
} }
public boolean Est_neuf() {  }
if ( proprietaire =="" ) return true ;  }
  else return false ; 
} // la classe principale d'appel
public class Test { BD b1=new BD("LuckyLuke","Morris",
public static void main(String[] args) { 10.40,45, true);
BD b2 = new BD("Tintin","Herge",
Livre l1 = new Livre("Le petit  200.40,45,false);
prince","St  b1.Acheter("moi");
Exupéry",10.40,50); b1.Afficher() ;
Livre l2 = new Livre("Contes","Grimm", b2.Afficher() ;
14.40,254);
l1.Afficher() ;  Album a1 = new Album("Dora","Dora", 
l1.acheter("moi") ; 300, 3.5) ;
l1.Afficher() ;  a1.Afficher() ; 
l1.prix = 0.0 ; a1.Colorie(23) ; 
l2.Acheter("lui") ; a1.Acheter("moi");
l2.Afficher();  a1.Colorie(23) ;
}
}
Questions :
1) Expliquer les informations que le programme va afficher lors de son exécution.
2) Dans la classe Livre, l attribut prix a été défini sans règle d encapsulation (public, private& )
Comment Java va-t-il l interpréter ? Comment pouvez-vous le tester ou comment est-il testé
dans le programme ?
3) Expliquer comment on teste dans ce programme si un livre est neuf ou non.
4) Décrivez la hiérarchie de classe décrite dans ce programme et expliquer le processus d appel
entre les constructeurs.
5) Expliquer comme ce programme gère le fait de colorier une page d un album à colorier.
6) Découvrez les erreurs de frappe présentes dans le code. Corriger-les en codant et en
commentant ces quelques lignes sous Eclipse.
Exercice 2 : Héritage de classe et constructeurs
1) Un site internet est spécialisé dan la vente de livres pour enfant. Ces livres sont soit des bandes
dessinées, soit des albums à colorier. Un livre est défini par son titre, son auteur, son prix et son
nombre de pages. Les bandes dessinées sont soit en couleur soit en noir&blanc alors l utilisateur
a la possibilité de colorier une page d un album présenté. Proposer et implémenter et tester sous
Eclipse une solution à ce problème.
2) Le site web veut donner la possibilité aux utilisateurs de revendre un livre et de s échanger deux
bandes dessinées si elles ont un prix équivalent. Modifier le programme précédent pour prendre
en compte ces fonctions supplémentaires.
3) Enfin, le site web veut étendre son offre d S uvre culturelles à des films (DVD) qui sont définis
eux-aussi par un titre, un auteur et un prix mais avec en plus une information sur la durée du
film. Comment modifier la hiérarchie de classe pour intégrer ces modifications ? Programmer-
le.

Exercice 3 : Héritage de classe et polymorphisme


Vous devez développer pour une chaîne de télévision un logiciel permettant de gérer la
programmation journalière d émissions télévisuelles. Pour simplifier le problème, toutes les heures
ou les durées des émissions sont représentées par des valeurs entières (13h, 15h, 22h& ). Une
émission peut être de trois types : divertissement, fiction et reportage. Une émission de type
divertissement dure obligatoirement 2 heures, possède un nom et est systématiquement présentée
par un animateur. Une fiction se définit par le nom du film, l année de sa réalisation, le nom du
réalisateur et s il s agit ou non d une rediffusion. Enfin un reportage est défini par un nom, un
thème (fixé parmi les trois thèmes : information, animalier, culturel) et une durée.
1) Proposer une solution fondée sur les héritages entre classe pour représenter toutes les émissions
possibles. Donner pour chaque classe, la liste de ses attributs et les paramètres de ses
constructeurs. Comment coderiez-vous le fait que le thème d un reportage soit prédéfini ?
2) Implanter cette solution sous Eclipse en Java et tester tout d abord les classes que vous avez
imaginées en instantiant différents objets de votre choix (avec les constructeurs) pour chacune
de celles-ci.
3) La programmation d une émission dans la journée dépend du type d émission mais se traduit
par le fait de lui fixer une heure de début de diffusion et de calculer l heure de fin.
a. Les divertissements durent systématiquement 2 heures, mais on ne peut les programmer
qu entre 18h et 23h.
b. Les fictions qui ne sont pas des rediffusion ne se programment qu en début de soirée,
c est-à-dire qu à 21h, alors qu une rediffusion peut se programmer n importe quand dans
la journée.
c. Enfin, les reportages ne se programment qu à des heures creuses (14h 18h et 0h-6h) et
s ils ont une durée inférieure, égale à 1heure.
Proposer une solution fondée sur la notion de classe abstraite et de polymorphisme permettant
de décrire la programmation ou non de n importe quelle émission à une heure donnée.
Comment initialiser efficacement ces heures de début et de fin de diffusion.
4) Définissez enfin un programme télé comme un ensemble fini (tableau) d émissions hétérogènes
que vous remplirez d émissions de votre choix, programmées à une heure de votre choix.
Décrire puis implémenter les algorithmes vous permettant :
a. Afficher la liste des émissions programmées dans la journée
b. Tester s il y a une superposition de programmation.
c. Afficher heure par heure les émissions programmées pour vérifier que tous les créneaux
horaires ont bien été remplis& On suppose qu il n y a pas de superposition.
15/05/2008
Programmation Orientée Objets et Evénementielle
DUT SRC IUT Meaux année 2008-Module M2.23
TD 5 Java : initiation à la notion de classe, héritage,
polymorphisme

Exercice 4 : Objectifs : classes abstraites, héritage, collections : ArrayList.


Il s'agit dans cet exercice de permettre la création de points, cercles et cylindres. Pour cela, on
considère qu'un cercle étend la notion de point pour caractériser son rayon. De même, un cylindre étend
la notion de cercle.
1) Vous devez implémenter une classe abstraite Forme qui sera la super classe de la classe Point et
donc transitivement des classes Cercle et Cylindre. La classe Forme  comporte 3 méthodes :
calcul de l'aire de la forme, calcul du volume de la forme et affichage du nom de la forme,
respectivement point , cercle et cylindre pour nos 3 classes.
2) La classe Point est caractérisée par 2 coordonnées réelles : x,y. La classe doit permettre d'accéder
et de modifier ces coordonnées. Elle implémente également une méthode toString() affichant les
coordonnées du point.
3) La classe Cercle étend la classe Point, elle comporte également une valeur réelle pour son
rayon. Vous devez écrire 2 constructeurs pour cette classe :
• le premier va créer un cercle dont le centre est le point (0,0) et de rayon 0;
• le second comporte des paramètres pour les coordonnées du centre et le rayon.
De même que pour le point, vous devez proposer une méthode toString() affichant toutes les
informations sur le cercle (coordonnées du centre, valeur du rayon). Enfin le cercle propose une
méthode pour le calcul de l'aire ( 3.14158 * rayon * rayon)
4) La classe Cylindre étend la classe Cercle et comporte une valeur réelle hauteur.
• Implémenter un get et un set pour la hauteur.
• Implémenter les méthodes aire() et volume() pour le cylindre, respectivement
2*aire du cercle + 2 * 3.14159 * rayon * hauteur
et : aire du cercle * hauteur.
• La méthode toString() permet d'obtenir toutes les informations sur le cylindre : centre du cercle,
rayon du cercle et hauteur.
5) Vous devez tester l'implémentation en écrivant une classe FormeTest.
• Une première version comporte un tableau de formes alors que :
• la seconde comporte une ArrayList de formes. Dans la seconde implémentation, l'itération sur
les éléments de la liste se fait par un Iterator.
Dans les deux cas, vous devrez créer :
- un point avec x=5 et y=5
- un cercle avec un rayon de 8.5 et des coordonnées x=10,y=15 pour centre
- un cylindre avec une hauteur de 20, un rayon de 12,5 et des coordonnées x=30,y=30.
- et afficher les coordonnées, les aires, les volumes et le nom des 3 formes
Vous devez obtenir les informations suivantes:
[ 5.0, 5.0]
Aire de Point = 0.0 et volume = 0.0
Centre = [ 10.0, 15.0], Rayon = 8.5
Aire de Cercle = 226.9798775 et volume = 0.0
Centre = [ 30.0, 30.0], Rayon = 12.5, hauteur = 20.0
Aire de Cylindre = 2552.541875 et volume = 9817.46875

Exercice 5 : Objectifs : collections : ArrayList.


Un collectionneur veut gérer la liste des véhicules qu il possède. Il collectionne différents types de
véhicules : des autos, des motos et des camions. Pour chaque véhicule, il veut conserver sa marque, son
modèle et sa couleur (exemple Renault Clio rouge& ). Il désire :
a) afficher la liste des noms des véhicules qu il possède,
b) afficher tous les véhicules d une couleur donnée
c) rechercher s il possède ou non un véhicule d une certaine marque et d un certain
modèle.
d) Vendre un véhicule

1) Proposer une solution orientée objet permettant de représenter toutes les véhicules possibles.
Comment gérer le type du véhicule ?
2) Implanter sous Eclipse en Java la solution à base d héritage et tester tout d abord les classes
que vous avez imaginées en instantiant différents objets de votre choix (avec les constructeurs)
pour chacune de celles-ci.
3) Le collectionneur ne connaît pas a priori le nombre de véhicules qu il va posséder. Utilisez les
collections et notamment les ArrayList pour mettre des éléments (véhicules) dans cette liste et
pour l afficher avec et sans itérateurs.
4) Créer une classe qui hérite de ArrayList pour pouvoir efficacement répondre aux questions b, c
et d.
5) Créer une interface graphique permettant d afficher chaque véhicule présent dans la liste sous
forme d une liste de boutons sur lesquels on peut cliquer pour afficher toutes les informations
concernant le véhicule sélectionné.

Vous aimerez peut-être aussi