Vous êtes sur la page 1sur 5

Faculté NTIC (Université A.

Mehri) Niveau : 2ème année LMD


Module : Programmation Orientée Objet Année Universitaire 2016-2017

Mercredi, le 01 Février 2017


Corrigé type du Contrôle -sujet1-
Exercice 1 (4 pts)
Cocher la bonne case dans le tableau suivant :
Question Vrai Faux
On peut instancier une interface X
Il est strictement Interdit de placer super() dans une méthode d'instance X
On peut mettre un constructeur dans une interface X
L'instruction : A a =new B() ; est correcte si A est une classe abstraite et B est une sous-classe de A et B X
est non abstraite
L'instruction : A a =new B() ; est correcte si A est une interface et B est une classe qui implémente A et B X
est non abstraite.
Une interface peut hériter d'une autre interface X
Une interface peut hériter d'une classe abstraite X
Une classe abstraite peut hériter d'une autre classe abstraite X

Exercice 2 (4 pts)
Soit le code Java suivant :
public interface I {
static int j = 8;
int m() ;}

public class A { class D extends A implements I { class B implements I {


static int i = 4; static int i = 2; static int i = 6;
public static int f () { return (i+5) ; } public static int f () { return (i+2) ; } public int m() { return j+2;}}
public static int z (int x) { return (i+x);} public int g () { return (i +1); }
public int g (int x) { return (x+2) ; } } public int m() { return j+2;}}

Question 1 : Le résultat d'exécution de l'application suivante est : Résultat :

public static void main (String [] args){ 5


A a=new D() ; 9
System.out.println (a. g(3)) ; System.out.println (a.f()) ; 6
System.out.println (a.z(2)) ;}}

Question 2 : Le résultat d'exécution de l'application suivante est : Résultat :

public static void main (String [] args){ 10


D d=new D() ; 10
I e = new B();
System.out.println (d.m() ); System.out.println (e.m() ); }

Question 3 : Corriger chaque ligne de code dans l'application suivante : Correction :


//On ne change pas le type des variables public static void main (String [] args){
1. A a = new D() ;
public static void main (String [] args){
2. System.out.println ( ( (D) a).m() );
1. A a = new I () ;
3. I [] tab = {new B(), new B(), new D()};
2. System.out.println ( a.m());
3. I [] tab = [new A(), new B(), new D()];

Question Bonus (1 pt) : Réaliser l'interface I dans la version 8 de Java. (Répondre au verso de la page)
a) Le code de l'interface change et devient :
public interface I {
static int j = 8;
default int m() { return j+2;}}
b) On supprime la méthode m() des deux classes B et D.
Faculté NTIC (Université A. Mehri) Niveau : 2ème année LMD
Module : Programmation Orientée Objet Année Universitaire 2016-2017

Corrigé type du Contrôle –sujet2-


Exercice 1 (4 pts)
Cocher la bonne case dans le tableau suivant :
Question Vrai Faux
Une classe abstraite peut implémenter une interface X
Une classe abstraite peut hériter d'une autre classe abstraite X
On peut mettre un constructeur dans une interface X
On peut instancier une interface X
Il est strictement Interdit de placer super() dans une méthode d'instance X
L'instruction : A a =new B() ; est-elle correcte si A est une interface et B une classe l'implémentant X
Une interface peut hériter d'une autre interface X
Une interface peut hériter d'une classe abstraite X

Exercice 2 (4 pts)
Soit le code Java suivant :

public interface I {
static int j = 2;
int m() ;}

public class A { class D extends A implements I { class B implements I {


static int i = 8; static int i = 6; static int i = 4;
public static int f () { return (i+3) ; } public static int f () { return (i+3) ; } public int m() { return j+2;}}
public static int z (int x) { return (i+x);} public int g () { return (i +2); }
public int g (int x) { return (x+6) ; } } public int m() { return j+2;}}

Question 1 : Le résultat d'exécution de l'application suivante est : Résultat :

public static void main (String [] args){ 8


A a=new D() ; 11
System.out.println (a. g(2)) ; System.out.println (a.f()) ; 11
System.out.println (a.z(3)) ;}}

Question 2 : Le résultat d'exécution de l'application suivante est : Résultat :

public static void main (String [] args){ 4


D d = new D() ; 4
I e = new B();
System.out.println (d.m() ); System.out.println (e.m() ); }

Question 3 : Corriger chaque ligne de code dans l'application suivante : Correction :


//On ne change pas le type des variables public static void main (String [] args){
1. A x = new D() ;
public static void main (String [] args){
2. System.out.println ( ( (D) x).m() );
1. A x = new I () ; 3. I [] tab = { new D(), new B(), new B(), };
2. System.out.println ( x.m());
3. I [] tab = [new D(), new A(), new B(),];
Question Bonus (1 pt) : Réaliser l'interface I dans la version 8 de Java. (Répondre au verso de la page)
a) Le code de l'interface change et devient :
public interface I {
static int j = 2;
default int m() { return j+2;}}
b) On supprime la méthode m() des deux classes B et D.
Faculté NTIC (Université A. Mehri) Niveau : 2ème année LMD
Module : Programmation Orientée Objet Année Universitaire 2016-2017

Enoncé : Exercice 3 (12 pts)


 Les questions sont suffisamment expliquées. Si vous avez une remarque reportez-la sur votre copie,
 Le principe d'encapsulation doit être respecté.

A/
Une entreprise veut informatiser la production des chanteurs. Un chanteur produit des œuvres : Chanson
et Disque (CD). Un disque est composé de chansons.

Chaque œuvre est caractérisée par une capacité de stockage exprimée en nombre de secondes (capacité :
int), l'année d'édition (année : int) et un genre. Le genre d'une chanson (genre : String) peut être par
exemple : jaz, rai, etc. et le genre d'un disque est la liste des genres des chansons qu'il contient (pas de
genre en double).
Une chanson a en plus le nom du chanteur (nomChanteur : String).
Un disque a en plus un titre (titre : String) et une liste de chansons (liste : de type ArrayList).
La classe Œuvre possède le comportement suivant :
 Un constructeur initialisant toutes les variables,
 getGenre(): renvoie le genre de l'œuvre.
En plus, un disque a les méthodes suivantes :
 getCapacitéLibre() : renvoie la capacité libre sur le disque.
 addChanson(Chanson s) : ajoute la chanson s à la fin du disque si sa capacité suffit et renvoie true,
sinon elle renvoie false.
 nbChansons() : renvoie le nombre de chansons enregistrées dans le disque.
Questions :
1. Donner le diagramme de classes UML modélisant les œuvres des chanteurs.
2. Écrire en java les différentes classes de cette modélisation.

B/
Les œuvres peuvent être publiées et vendues sur le net à petit prix. Publier une œuvre revient à lui
attribuer un nom de publicité renvoyé par la méthode nomPub(). Le nom de publicité d'une chanson est la
concaténation du nom du chanteur et l'année d'édition. Pour un disque, le nom de publicité est la
concaténation du titre et de l'année d'édition.
Les œuvres publiées peuvent être commercialisées (vendues). Un prix de vente est fixé pour tout type
d'œuvre, La méthode prix() renvoie le prix de l'œuvre.
Questions:
On veut publier toutes les œuvres des chanteurs (chansons et disques) et ne vendre (commercialiser) que
les disques à 60DA l'unité.
1. Représenter un schéma de solution par un diagramme de classes UML.
2. Donner le code Java correspondant. (On ne donne que le code ajouté)

Bon Courage

Corrigé:
Exercice 3 (12 pts)
Faculté NTIC (Université A. Mehri) Niveau : 2ème année LMD
Module : Programmation Orientée Objet Année Universitaire 2016-2017

A/ …………(8,5 pt)
Oeuvre
#capacité: int
#année: int
+getGenre(): String

Disque
Chanson
-titre: String
-genre: String
-nomChanteur: String 0..* +getCapacitéLibre(): int
+addChanson(): boolean
+nbChansons(): int

La classe de base Œuvre


public abstract class Œuvre {
protected int capacité;
protected int année;
public Œuvre (int capacité, int année) {this.capacité=capacité;this.année=année;}
public abstract String getGenre();}

La classe Chanson
public class Chanson extends Œuvre {
private String genre;
protected String nomChanteur;

public Chanson(int capacité, int année, String genre, String nomChanteur) {


super(capacité, année);this.genre=genre; this.nomChanteur=nomChanteur;}
public String getGenre() {return this.genre;}

Remarque : On ajoute l'accès en lecture de la variable "capacité"


public int getCapacité() {return this.capacité;}

La classe Disque
public class Disque extends Œuvre {
private String titre;
private ArrayList <Chanson> liste;

public Disque(int capacité, int année, String titre) {super(capacité, année);


this.titre=titre; liste = new ArrayList<Chanson

public String getGenre() { String str= ""; for (Chanson s:liste) if


(!liste.contains(s.getGenre())) str=str+s.getGenre()+"/"; return str;}

public String getGenre() {String str=""; ArrayList<String> l= new ArrayList();


for (Chanson s:liste) if (!l.contains(s.getGenre())) l.add(s.getGenre());
for (String s:l) str=str+"/"+s; return str;}

public boolean addChanson(Chanson s){ if (this.getCapacitéLibre()>s.getCapacité())


{liste.add(s); return true;} else return false

public int nbChansons() {return liste.size();}}


Faculté NTIC (Université A. Mehri) Niveau : 2ème année LMD
Module : Programmation Orientée Objet Année Universitaire 2016-2017

B/
a) …………(3,5 pt)

Oeuvre
#capacité: int
#année: int
+getGenre(): String

Disque
Chanson
-titre: String
-genre: String
-nomChanteur: String 0..* +getCapacitéLibre(): int
+addChanson(): boolean
+nbChansons(): int

<<interface>>
Publiable

+nomPub()

<<interface>>
Commercialisable

+prix(): double

b)Le code correspondant:

public interface Publiable {


String nomPub();
}

public interface Commercialisable extends Publiable{


double prix(); }

public class Chanson extends Oeuvre implements Publiable{


……….
public String nomPub() {return nomChanteur+année;}
}

public class Disque extends Oeuvre implements Commercialisable{


……………
public String nomPub(){return titre+année;}
public double prix(){return 90;}
}

Vous aimerez peut-être aussi