DS - Java - 2324 - 3B - Correction

Télécharger au format docx, pdf ou txt
Télécharger au format docx, pdf ou txt
Vous êtes sur la page 1sur 8

Année universitaire : 2023 - 2024

DS Écrit

Module : Conception Orienté Objet et Programmation Documents autorisés : Non


Java Internet autorisé : Non
Classes : 3B2->14 - 3IA Date : 16-03-2024
Durée : 1H Heure : 11H00
Nombre de pages : 6

Veuillez répondre sur la feuille d’examen.

Exercice I : QCM (4pts)

Une seule réponse est correcte.

1. Soit la classe suivante, quelle est l’instruction correcte permettant


d'implémenter un constructeur paramétré qui initialise x et y ?

A. public Mobile (int x, int y) {


x=x;
this.y=y;
}
B. public Mobile (int x, int y) {
super();
this.y=y;
}
C. public Mobile (){
super;
}
D. public Mobile (int x, int y ) {
this.x=x;
this.y=y;
}

1
2. Quelle est la sortie de ce programme ?

A. true true
B. false false
C. true false
D. false true

3. Soit le code suivant :

Parmi les définitions suivantes dans C2, laquelle constitue une


redéfinition (Overriding) correcte de la méthode « meth » de la classe
C1 et non une surcharge (Overloading) ?

A. public int meth (String s, int n) {return super.meth(s, n * 2) + 10;}


B. public int meth (int n, String s) {return super.meth(s, n * 2) + 10;}
C. public int meth (String s, int n, int n2) {return super.meth(s, n * 2) +
n2;}
D. public float meth (String s, int n) {return super.meth(s, n * 2) + 10;}

4. Soit le code suivant, La variable “nom” est accessible directement à


partir de :

A. n’importe classe
B. que la classe Etudiant
C. n’importe quelle classe dans le package entities
D. n’importe quelle classe qui hérite de la classe Etudiant

2
Exercice II : Problème (16 pts)

Recopiez le code sur la feuille d’examen.

Dans le cadre d'un projet académique, vous êtes chargé de développer


un programme en Java qui met en œuvre une salle de sport, en vous
appuyant sur le diagramme de classe fourni et en suivant les instructions
données (TODO) par votre superviseur.

Nb : Respecter les Règles (Conventions) de Nommage Java.


RQ-
1 :

L’utilisation des collections (List, Set et Map) est strictement


interdite

RQ-2 : Il faut noter que tous les attributs de toutes les classes
ont le niveau d’accès « private ».

3
1. TODO 1 (1pt) : La classe « Person » doit permettre l’héritage
seulement pour les classes « Trainer » et « Member ».

2. TODO 2 (1pt) : Implémentez le constructeur qui prend tous les


attributs en paramètre

3. TODO 3 (1pt) : Implémentez la méthode “toString()”


(N’oubliez pas les annotations et les règles de nommages)

4. TODO 4 (1pt) : Déclarez la méthode “public void showLabel( )”


sachant qu’elle doit être redéfinie dans toutes les classes filles et
pas dans la classe Person.

Classe Person

//TODO 1
public abstract sealed class Person permits Member, Trainer{

private int cin;


private String firstName, lastName;
private boolean banned;

/* les getters et les setters sont déjà implémentés */

//TODO 2

public Person(int cin, String firstName, String lastName, boolean banned){


this.cin = cin;
this.firstName = firstName;
this.lastName = lastName;
this.banned = banned;
}

//TODO 3

@Override
public String toString(){
return "cin : " + cin + " | " + firstName + " " + lastName + " , banned = "
+ banned;
}

//TODO 4
public abstract void showLabel();
}

5. C’est quoi l’entête (signature) de l’accesseur (getter) de l’attribut


« banned » sachant qu’il est de type boolean ? (0.5pt)

public boolean isBanned()


4
6. TODO 5 (0.5 pt) : La classe « Trainer » peut-être étendue

7. TODO 6 (1pt) : Implémentez le constructeur qui prend tous les


attributs en paramètre

8. TODO 7 (2pts) : Implémentez les getters et les setters de salary et


trainerId sachant que salary doit être supérieur ou égal à 0 et
trainerId n’est pas vide.

9. TODO 8 (0.5pt) : Redéfinissez la méthode “public void showLabel (


)” sachant que pour un entraineur, elle affiche le message « I’m a
professional trainer » (N’oublier par d’ajouter l’annotation adéquate)

Classe Trainer

//TODO 5
public non-sealed class Trainer extends Person{

private String trainerId;


private float salary;

//TODO 6

public Trainer(int cin, String firstNmae, String lastName, boolean banned,


String trainerId, float salary){
super(cin, firstNmae, lastName, banned);
this.trainerId = trainerId;
this.salary = salary;
}

//TODO 7

public double getSalary() {


return salary;
}

public void setSalary(double salary) {


if (salary >= 0) {
this.salary = salary;
}
}

public String getTrainerId() {


return trainerId;
}

5
public void setTrainerId(String trainerId) {
if (!trainerId.isEmpty()) { // trainerId != null // !trainerId.isBlank()
this.trainerId = trainerId;
}
}
//TODO 8

@Override
public void showLabel() {
System.out.println("I’m a professional trainer");
}

10. TODO 9 (0.5pt) : La classe « Member » ne peut pas être


étendue

11. TODO 10 (1.5pts) : Redéfinissez la méthode “equals(Object


obj)” selon le cin et l’identifiant du membre.

12. TODO 11 (0.5pt) : Redéfinissez la méthode “public void


showLabel ( )” sachant que pour un membre, elle affiche le
message avec le memberId. (N’oublier par d’ajouter l’annotation
adéquate)

Exemple: « I’m a member and my id is 123A45»

13. TODO 12 (1.5pt) : Implémentez la méthode “toString( )” qui


réutilise la même méthode de la classe Person

Classe Member

//TODO 9
public final class Member extends Person {

private String memberId, ;

/* les constructeurs, les getters et les setters sont déjà implémentés */

//TODO 10

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Member member = (Member) o;
return member.memberId.equals(this.memberId) &&

6
member.getCin()==getCin();
}

//TODO 11

@Override
public void showLabel() {
System.out.println("I’m a member having " + memberId + "like member
id");
}

//TODO 12

@Override
public String toString() {
return super.toString() +
" | memberId='" + memberId + '\'' +
"}";
}
}

14. TODO 13 (0.5pt) : Complétez la déclaration de CAPACITE_MAX


qui est fixée à 30 puis ajouter l’instruction nécessaire pour déclarer
un ensemble qui regroupe des entraineurs et des membres et qui
s’appelle « team ».

15. TODO 14 (1pt) : Créez le constructeur paramétré qui prend en


paramètre qui initialise le nombre des membres à 0 et fait la
création de groupe des personnes « team ».
16. TODO 16 (2pt) : La méthode “public void getStatistics( )”
permet d’afficher le nombre des membres et le nombre des
entraineurs dans le team. Les personnes bannis ne seront pas prises
en compte.
Exemple : This gym has 20 members and 4 trainers

Classe Gym

public class Gym {


private String name;
private int nbrPersons;

/* Les getters, les setters sont déjà implémentés */

//TODO 13
private String name ;
private final int CAPACITE_MAX = 30;
private Person[] team;

7
//TODO 14

public Gym (String name){


this.name = name;
this.nbrPerson = 0;
team = new Person[CAPACITE_MAX];
}

//TODO 15
public void getStatistics(){
int nbrTrainers = 0;
int nbrMembers = 0;

for (Person p : team){


if ( p instanceof Member)
nbrMembers++;
else if( p instanceof Trainer)
nbrTrainers++;
}

System.out.println("This gym has " + nbrMembers + " members and " +


nbrTrainers + " trainers");
}
}

Vous aimerez peut-être aussi