Java - Exercices - Media et Mediathèque

1. Créer une classe Media contenant
(a) Trois attributs :
           private final String titre;
           private final String support;
           private int nbExemplaires;
(b) Les trois «getteurs» appropriés.
(c) Un «setteur» pour nbExemplaires.
(d) Un constructeur Media(String titre, String support) dont les arguments correspondent aux deux premiers attributs et qui met nbExemplaires=1.
(e) Une méthode void affiche() qui affiche Poly de TO2 (Livre) x2 si support="Livre", titre="Poly de TO2" et nbExemplaires=2.
(f) Une méthode boolean estEgalA(Media el) qui renvoie true si this et el ont des support et titre identiques.


2. Dans une classe Principal créer une méthode main pour tester tout ceci. On fera tout particulièrement attention au test de estEgalA.

3. Créer une classe Mediatheque contenant
(a) Un attribut ArrayList<Media> contenu.
(b) Un constructeur Mediatheque() qui initialise l’attribut à un tableau vide.
(c) Une méthode void ajoute(Media el) qui ajoute el dans contenu s’il n’y est pas déjà; s’il y est déjà, la méthode doit augmenter la valeur de son attribut nbExemplaires.
(d) Une méthode void affiche() qui affiche tous les Media de la collection, un par ligne.

Solution:

1. Création de la classe Media
a. Déclaration de la classe Media
Le mot clé final indique que l'élément de l'instance créée ne va pas changer pendant l’exécution par exemple si on crée une deuxième instance de Media, les attributs qui ne sont pas définies final de la première instance vont recevoir les valeurs de la deuxième instance :
Media m1 = new Media("titre1","support1");
Media m2 = new Media("titre2","support2");
Après l'affichage:
m1 ( titre2, support2)
m2 ( titre2, support2)
Remarque: Cliquez sur view plain pour obtenir le texte et faire Copier/Coller.


public class Media {

private final String titre;
private final String support;
private int nbExemplaires;

}
b et c. Les trois getters et un setter pour nbExemplaires
Cliquez avec le bouton droit de la souris --> Source --> Generate Getters and Setters.

generate getters and setters

public int getNbExemplaires() {
return nbExemplaires;
}

public void setNbExemplaires(int nbExemplaires) {
this.nbExemplaires = nbExemplaires;
}

public String getTitre() {
return titre;
}

public String getSupport() {
return support;
}
d. Le constructeur

public Media(String titre, String support){
this.titre = titre;
this.support = support;
nbExemplaires = 1;
}
e. Méthode affiche()

void affiche(){
if(this.support=="Livre" && this.titre=="Poly de TO2" && this.nbExemplaires==2)
System.out.print(this.titre+ "(" + this.support+ ") x"+this.nbExemplaires);
}
f. Méthode boolean estEgalA(Media el)

boolean estEgaleA(Media el){
if( support==el.support && titre==el.titre)
return true;
return false;
}

2. Création de la classe main

public class Main {

public static void main(String[] args) {
//création de trois instances Media
Media m = new Media("titre1", "support1");
Media m2 = new Media("titre2", "support2");
Media m3 = new Media("titre3", "support3");

//tester l'égalité
boolean estEgalA = m.estEgaleA(m2);
if(estEgalA)
System.out.println("Media("+m.getTitre()+", "+m.getSupport()+") est egale a Media("+m2.getTitre()+", "+m2.getSupport()+")" );
else
System.out.println("Media("+m.getTitre()+", "+m.getSupport()+") n'est pas egale a Media("+m2.getTitre()+", "+m2.getSupport()+")" );

/************************************
* Classe Mediatheque
*/
Mediatheque mt = new Mediatheque();
//ajout
mt.ajoute(m);
mt.ajoute(m2);
mt.ajoute(m2);
mt.ajoute(m3);
//affichage
mt.affiche();
}
}

3. Création de la classe Mediatheque
a. L'attirubt Arraylist<Media> contenu
Arraylist est un tableau dont la taille n'est pas définie, son avantage ce qu'il est infini et contient des méthodes prédéfinie comme le get et set, la recherche séquentielle contains(element) ou l'indice d'un élément indexOf(élément).
<Media> signifie que les élément que notre Arraylist stock sont de type Media. Ceci va nous éviter de faire la conversion suivante: (Media) notreListe.get(indice).

public class Mediatheque {

ArrayList contenu;

}
b. Le constructeur

Mediatheque(){
this.contenu = new ArrayList();
}
c. La méthode ajoute(Media el)

void ajoute(Media el){
if(!this.contenu.contains(el))
this.contenu.add(el);
else{
/* s'il existe dèja
* augmenter la valeur de nbExemplaire
*/
//indice de el dans la liste
int indice = this.contenu.indexOf(el);
//lire l'attribut nbExemplaires et incrémenter
int nbExemplaires = this.contenu.get(indice).getNbExemplaires() + 1;
//mettre à jour l'attirbut nbExemplaires
System.out.println(this.contenu.get(indice).getTitre());
this.contenu.get(indice).setNbExemplaires(nbExemplaires);
}
}

d. La méthode affiche()

void affiche(){
for(Media media : this.contenu)
System.out.println(media.getTitre()+" "+media.getSupport()+" "+media.getNbExemplaires());
}

Code complet Media.java:

public class Media {

private final String titre;
private final String support;
private int nbExemplaires;

public Media(String titre, String support){
this.titre = titre;
this.support = support;
nbExemplaires = 1;
}

void affiche(){
if(this.support=="Livre" && this.titre=="Poly de TO2" && this.nbExemplaires==2)
System.out.print(this.titre+ "(" + this.support+ ") x"+this.nbExemplaires);
}

boolean estEgaleA(Media el){
if( support==el.support && titre==el.titre)
return true;
return false;
}


public int getNbExemplaires() {
return nbExemplaires;
}

public void setNbExemplaires(int nbExemplaires) {
this.nbExemplaires = nbExemplaires;
}

public String getTitre() {
return titre;
}

public String getSupport() {
return support;
}
}

Mediatheque.java

import java.util.ArrayList;

public class Mediatheque {

ArrayList contenu;

Mediatheque(){
this.contenu = new ArrayList();
}

void ajoute(Media el){
if(!this.contenu.contains(el))
this.contenu.add(el);
else{
/* s'il existe dèja
* augmenter la valeur de nbExemplaire
*/
//indice de el dans la liste
int indice = this.contenu.indexOf(el);
//lire l'attribut nbExemplaires et incrémenter
int nbExemplaires = this.contenu.get(indice).getNbExemplaires() + 1;
//mettre à jour l'attirbut nbExemplaires
System.out.println(this.contenu.get(indice).getTitre());
this.contenu.get(indice).setNbExemplaires(nbExemplaires);
}
}

void affiche(){
for(Media media : this.contenu)
System.out.println(media.getTitre()+" "+media.getSupport()+" "+media.getNbExemplaires());
}

}

main.java

public class Main {

public static void main(String[] args) {
//création de trois instances Media
Media m = new Media("titre1", "support1");
Media m2 = new Media("titre2", "support2");
Media m3 = new Media("titre3", "support3");

//tester l'égalité
boolean estEgalA = m.estEgaleA(m2);
if(estEgalA)
System.out.println("Media("+m.getTitre()+", "+m.getSupport()+") est egale a Media("+m2.getTitre()+", "+m2.getSupport()+")" );
else
System.out.println("Media("+m.getTitre()+", "+m.getSupport()+") n'est pas egale a Media("+m2.getTitre()+", "+m2.getSupport()+")" );

/************************************
* Classe Mediatheque
*/
Mediatheque mt = new Mediatheque();
//ajout
mt.ajoute(m);
mt.ajoute(m2);
mt.ajoute(m2);
mt.ajoute(m3);
//affichage
mt.affiche();
}
}