Programmation Orientée Objets et Evénementielle

Programming, Object-Oriented Programming, Java · exam

Voir tous les documents en programmation

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 :

Publicité

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 ;

Publicité

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.

Publicité

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.

Publicité

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é.