Correction du TD de Programmation Orientée Objet
I-Questions de cours
A) QCM :
1. Quels sont les 3 principes importants en POO ?
Réponse : b. Encapsulation, c. Héritage, d. Polymorphisme
2. Une Classe est :
Réponse : c. déclare des propriétés communes à plusieurs objets, e. Un modèle
3. Un constructeur :
Réponse : a. Est automatiquement appelé à la création d’un objet, c. a pour rôle d’initialiser les
attributs, e. porte le nom de la classe
4. Les attributs sont des variables :
Réponse : a. contenues dans la classe, c. qui caractérisent l’état
5. Les méthodes des fonctions :
Réponse : a. Qui décrivent les actions et les réactions d’un objet, b. contenues dans la classe
6. Une méthode ou attribut privée est accessible :
Réponse : a. Partout dans la classe
7. Une méthode ou attribut publique est accessible :
Réponse : d. Partout dans le monde
8. Une méthode ou attribut protected est accessible :
Réponse : a. Partout dans la classe, b. dans le package, c. dans la sous-classe
9. Une méthode statique :
Réponse : a. peut être appelée même sans avoir instancié, b. ne peut accéder qu'à des attributs et
méthodes statique
[Link] une classe B hérite d'une classe A, on dit que :
Réponse : a. B spécialise A, c. A est la super-classe et B la classe fille, d. la classe B possède au
moins tous les champs et les méthodes de A
B) Vrai ou Faux :
1. Une classe abstraite ne peut être instanciée
Réponse : Vrai
2. Une agrégation est une relation de composition
Réponse : Faux (l'agrégation est une relation plus faible que la composition)
3. Une méthode ou classe abstraite doit être obligatoirement redéfinie.
Réponse : Vrai
4. L’héritage multiple permet à une classe d’hériter des propriétés et des méthodes de
plusieurs classes
Réponse : Vrai
5. L’héritage multiple n’existe pas en POO
Réponse : Faux (il existe dans certains langages comme C++)
6. Les valeurs d’une variable de classe sont redéfinies à chaque nouvel objet
Réponse : Faux (les variables de classe sont partagées entre toutes les instances)
II-Problèmes
Problème K :
1. Déclaration de la classe Patient :
java
Copy
public class Patient {
private String nom;
private int age;
private Maladie maladie;
private List<Medecin> medecins;
public Patient(String nom, Maladie maladie, int age) {
[Link] = nom;
[Link] = maladie;
[Link] = age;
[Link] = new ArrayList<>();
}
}
2. Constructeur avec paramètres :
java
Copy
public Patient(String nom, Maladie maladie, int age) {
[Link] = nom;
[Link] = maladie;
[Link] = age;
[Link] = new ArrayList<>();
}
3. Setter de age :
java
Copy
public void setAge(int age) {
[Link] = age;
}
4. Méthode afficher() :
java
Copy
public void afficher() {
[Link]("Nom: " + nom);
[Link]("Age: " + age);
[Link]("Maladie: " + maladie);
for (Medecin medecin : medecins) {
[Link]();
}
}
5. Méthode pour ajouter un médecin :
java
Copy
public void ajouterMedecin(Medecin medecin) {
[Link](medecin);
}
6. Getters et Setters :
java
Copy
public String getNom() { return nom; }
public void setNom(String nom) { [Link] = nom; }
public int getAge() { return age; }
public void setAge(int age) { [Link] = age; }
public Maladie getMaladie() { return maladie; }
public void setMaladie(Maladie maladie) { [Link] = maladie; }
7. Procédure main :
java
Copy
public static void main(String[] args) {
Scanner scanner = new Scanner([Link]);
[Link]("Entrez le nom du patient :");
String ceNom = [Link]();
[Link]("Entrez l'âge du patient :");
int cetAge = [Link]();
Patient p1 = new Patient(ceNom, [Link], cetAge);
[Link](new Medecin("dr Doctor", 35));
[Link]();
}
Problème G :
a. Représentation des patients et des actes :
java
Copy
import [Link];
import [Link];
import [Link];
class Patient {
private String nom;
private String prenom;
private Instant dateNaissance;
private char sexe;
private List<ActeMedical> actesMedicaux;
public Patient(String nom, String prenom, Instant dateNaissance, char sexe) {
[Link] = nom;
[Link] = prenom;
[Link] = dateNaissance;
[Link] = sexe;
[Link] = new ArrayList<>();
}
public long getAge() {
return [Link]([Link](), [Link]);
}
public void ajouterActeMedical(ActeMedical acte) {
[Link](acte);
}
}
abstract class ActeMedical {
protected String soignant;
protected Instant date;
public ActeMedical(String soignant, Instant date) {
[Link] = soignant;
[Link] = date;
}
}
class Diagnostic extends ActeMedical {
private Maladie maladie;
private int fiabilite;
public Diagnostic(String soignant, Instant date, Maladie maladie, int
fiabilite) {
super(soignant, date);
[Link] = maladie;
[Link] = fiabilite;
}
}
class Soin extends ActeMedical {
private int amelioration;
public Soin(String soignant, Instant date, int amelioration) {
super(soignant, date);
[Link] = amelioration;
}
}
b. Représentation des prises de médicaments :
java
Copy
class PriseMedicament extends Soin {
private int posologie;
private int frequence;
public PriseMedicament(String soignant, Instant date, int amelioration, int
posologie, int frequence) {
super(soignant, date, amelioration);
[Link] = posologie;
[Link] = frequence;
}
public int getMedicamentsParJour() {
return posologie * frequence;
}
}
Problème R :
a. Classe Elu :
java
Copy
import [Link];
import [Link];
class Elu extends Personne {
private List<Personne> assistants;
public Elu(String nom, String prenom) {
super(nom, prenom);
[Link] = new ArrayList<>();
}
public void embaucherAssistant(Personne assistant) {
[Link](assistant);
}
public void licencierAssistant(Personne assistant) {
[Link](assistant);
}
public void distribuerDotation(int montant) {
if ([Link]()) return;
int part = montant / [Link]();
for (Personne assistant : assistants) {
[Link](part);
}
}
}
b. Classe EluMafieux :
java
Copy
class EluMafieux extends Elu {
public EluMafieux(String nom, String prenom) {
super(nom, prenom);
}
@Override
public void embaucherAssistant(Personne assistant) {
if ([Link]().equals([Link]())) {
[Link](assistant);
}
}
}
c. Classe EluEconome :
java
Copy
class EluEconome extends Elu {
private static final int SMIC = 1480;
public EluEconome(String nom, String prenom) {
super(nom, prenom);
}
@Override
public void distribuerDotation(int montant) {
if ([Link]()) return;
int part = [Link](SMIC, montant / [Link]());
for (Personne assistant : assistants) {
[Link](part);
}
}
}
d. Classe EluEscroc :
java
Copy
class EluEscroc extends Elu {
private int compteSuisse;
public EluEscroc(String nom, String prenom) {
super(nom, prenom);
[Link] = 0;
}
@Override
public void distribuerDotation(int montant) {
if ([Link]()) return;
int part = [Link](1480, montant / [Link]());
for (Personne assistant : assistants) {
[Link](part);
}
[Link] += montant - (part * [Link]());
}
}