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(cid:25) un programme Java. Objectifs : hiérarchie de classe, héritage
Considérons le programme Java suivant :
class Livre {
//
//
//
les attributs
public void Acheter(String nom) {
proprietaire = nom ;
}
}
protected string titre, auteur, proprietaire ;
protected int nb_page ;
double prix ;
class BD extend Livre {
private boolean encouleur ;
public BD(String t,String a,double p,int
//
//
//
nb){
les méthodes
public Livre(String t, String a, double p, int
}
super(t,a,p,nb) ;
encouleur = c ;
}
nb,boolean c){
titre = t ; auteur = a ;
prix = p ; proprietaire = "" ;
nb_page = nb ;
}
public void Afficher() {
class Album extends Livre {
boolean page_coloriee[];
public Album(String t, String a, double p,
System.out.println("Titre : " + titre)
int n){
;
auteur) ;
" + nb_page);
System.out.println("Auteur : " +
System.out.println("Prix : " + prix) ;
System.out.println("Nombre de pages :
Advertisement
if ( this.Est_neuf() ) {
super(t,a,p,n) ;
page_coloriee = new boolean[n];
int i ;
for (i=0 ; i<100 ; i++)
page_coloriee[i] = false ;
}
public void Colorie(int num_page){
System.out.println("Aucune
if((page_coloriee[num_page]==false)&&
proprietaire" ) ;
!Est_neuf()){
} else {
System.out.println("Proprietaire:
true ;
"+proprietaire);
}
System.out.println() ;
}
public boolean Est_neuf() {
deja coloriee" ) ;
}
}
page_coloriee[num_page] =
} else {
System.out.println("page
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
14.40,254);
Livre l2 = new Livre("Contes","Grimm",
Exupéry",10.40,50);
b1.Acheter("moi");
b1.Afficher() ;
b2.Afficher() ;
l1.Afficher() ;
l1.acheter("moi") ;
l1.Afficher() ;
l1.prix = 0.0 ;
Advertisement
l2.Acheter("lui") ;
l2.Afficher();
Questions :
Album a1 = new Album("Dora","Dora",
300, 3.5) ;
}
}
a1.Afficher() ;
a1.Colorie(23) ;
a1.Acheter("moi");
a1.Colorie(23) ;
1) Expliquer les informations que le programme va afficher lors de son exécution.
2) Dans la classe Livre, l(cid:25) attribut prix a été défini sans règle d(cid:25) encapsulation (public, private& )
Comment Java va-t-il l(cid:25) 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(cid:25) appel
entre les constructeurs.
5) Expliquer comme ce programme gère le fait de colorier une page d(cid:25) 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(cid:25) utilisateur
a la possibilité de colorier une page d(cid:25) 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(cid:25) é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(cid:25) 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(cid:25) é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(cid:25) année de sa réalisation, le nom du
réalisateur et s(cid:25) il s(cid:25) agit ou non d(cid:25) 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(cid:25) un reportage soit prédéfini ?
Implanter cette solution sous Eclipse en Java et tester tout d(cid:25) abord les classes que vous avez
imaginées en instantiant différents objets de votre choix (avec les constructeurs) pour chacune
de celles-ci.
Advertisement
2)
3) La programmation d(cid:25) une émission dans la journée dépend du type d(cid:25) émission mais se traduit
par le fait de lui fixer une heure de début de diffusion et de calculer l(cid:25) heure de fin.
a. Les divertissements durent systématiquement 2 heures, mais on ne peut les programmer
qu(cid:25) entre 18h et 23h.
b. Les fictions qui ne sont pas des rediffusion ne se programment qu(cid:25) en début de soirée,
c(cid:25) est-à-dire qu(cid:25) à 21h, alors qu(cid:25) une rediffusion peut se programmer n(cid:25) importe quand dans
la journée.
c. Enfin, les reportages ne se programment qu(cid:25) à des heures creuses (14h (cid:19) 18h et 0h-6h) et
s(cid:25) 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(cid:25) 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(cid:25) émissions hétérogènes
que vous remplirez d(cid:25) é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(cid:25) 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(cid:25) il n(cid:25) 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 (cid:28) point(cid:29) , (cid:28) cercle(cid:29) et (cid:28) cylindre(cid:29) 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.
Advertisement
Implémenter les méthodes aire() et volume() pour le cylindre, respectivement
2aire 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(cid:25) 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(cid:25) il possède,
b) afficher tous les véhicules d(cid:25) une couleur donnée
c)
rechercher s(cid:25) il possède ou non un véhicule d(cid:25) une certaine marque et d(cid:25) un certain
modèle.
d) Vendre un véhicule
1)
2)
3)
4)
5)
Proposer une solution orientée objet permettant de représenter toutes les véhicules possibles.
Comment gérer le type du véhicule ?
Implanter sous Eclipse en Java la solution à base d(cid:25) héritage et tester tout d(cid:25) abord les classes
que vous avez imaginées en instantiant différents objets de votre choix (avec les constructeurs)
pour chacune de celles-ci.
Le collectionneur ne connaît pas a priori le nombre de véhicules qu(cid:25) il va posséder. Utilisez les
collections et notamment les ArrayList pour mettre des éléments (véhicules) dans cette liste et
pour l(cid:25) afficher avec et sans itérateurs.
Créer une classe qui hérite de ArrayList pour pouvoir efficacement répondre aux questions b, c
et d.
Créer une interface graphique permettant d(cid:25) afficher chaque véhicule présent dans la liste sous
forme d(cid:25) une liste de boutons sur lesquels on peut cliquer pour afficher toutes les informations
concernant le véhicule sélectionné.