0% ont trouvé ce document utile (0 vote)
8 vues5 pages

Héritage en Programmation Orientée Objet

Le document présente des exercices de programmation orientée objet, notamment sur l'héritage et la gestion de classes en Java. Il aborde des concepts tels que les méthodes accessibles dans les classes dérivées, la gestion des attributs avec les modificateurs d'accès, et la conception de classes pour modéliser des machines et des techniciens dans une entreprise textile. Des exercices supplémentaires portent sur la définition de classes pour une application scolaire, incluant des enseignants, des niveaux et des séances.

Transféré par

berkanielissa
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
8 vues5 pages

Héritage en Programmation Orientée Objet

Le document présente des exercices de programmation orientée objet, notamment sur l'héritage et la gestion de classes en Java. Il aborde des concepts tels que les méthodes accessibles dans les classes dérivées, la gestion des attributs avec les modificateurs d'accès, et la conception de classes pour modéliser des machines et des techniciens dans une entreprise textile. Des exercices supplémentaires portent sur la définition de classes pour une application scolaire, incluant des enseignants, des niveaux et des séances.

Transféré par

berkanielissa
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

USTHB- Faculté d’Electronique et d’Informatique 2019/2020

Département d’Informatique
TD/TP Programmation Orienté Objet – ACAD B

Série 3 : Héritage

Exercice 1
Soit le code suivant, qui définit des comptes en banques:

public class CompteEpargne { public class CompteEpargneTauxVariable


private double solde; extends CompteEpargne {
protected double tauxInterets;
public void setTauxInterets( double taux )
public CompteEpargne(double s) {
{solde = s; tauxInterets = 0.03;} tauxInterets = taux;
}
protected double getSolde()
{return solde;} }

public setTauxInterets(double taux)


{tauxInterets= taux;}

public void deposer( double montant )


{solde = solde + montant; }

public void retirer( double montant )


{solde = solde - montant; }

public void verserInterets()


{solde = solde + (solde * tauxInterets);}

public void afficheSolde()


{
[Link]("Le solde est: " +
solde );}

} // fin de la classe CompteEpargne

Répondez aux questions suivantes:

a) Soit les objets obj1 et objt2 des objets des classe CompteEpargne respectivement
CompteEpargneTauxVariable, Quelles sont les méthodes que peut invoquer chacun
des objets.
CompteEpargne obj1= new CompteEpargne(); [Link]();
obj1. {deposer, retirer, verserInteret, afficheSolde}

Page 1 sur 5
USTHB- Faculté d’Electronique et d’Informatique 2019/2020
Département d’Informatique
TD/TP Programmation Orienté Objet – ACAD B

CompteEpargneTauxVariable obj2= new CompteEpargneTauxVariable();


obj2.{setTauxInterets, deposer, retirer, verserInteret, afficheSolde}

b) Peut-on faire [Link]( 0.04 );


Non on ne peut pas. La méthode setTauxInterets est définie dans la classe dérivée et un objet de
la classe de base ne peut pas accéder aux attributs et méthodes définies dans les classes dérivées.

c) Le constructeur de la classe CompteEpargneTauxVariable est absent. Est-ce correct ?


justifier.
C’est correct, puisque le constructeur de la classe CompteEpargne n’a pas d’arguments (pas de
paramètres en entrées), le constructeur implicite est permis dans la classe dérivée et l’appel
implicite vers le constructeur de la classe de base est aussi permis.

d) Pourquoi a-t-on placé le modificateur protected devant la déclaration de la propriété


tauxInteret ? Est-il obligatoire ?
Pour permettre l’accès libre aux classes dérivées.
Oui c’est obligatoire parce que seules les objets de type CompteEpargneTauxVariable ont le droit
de modifier la valeur du taux d’intérêts qui leur correspondant.

Pour répondre : Un programmeur décide de prendre l’approche suivant :


- Dans CompteEpargne, il déclare la propriété tauxInteret private.
- Il déplace la méthode setTauxInterets de la classe
CompteEpargneTauxVariable à la classe CompteEpargne.
Le programme fonctionne-t-il correctement? oui
Le fonctionnement des classes est-il équivalent à la stratégie précédente (utilisant
protected) ? non, tous les objets de type CompteEpargne auront la possibilités de
modifier le tauxInterets. De cette manière les CompteEpargne auront le même
comportement que les objets issus de la classe dérivées
(CompteEpargneTauxVariables).

e) Commentez l'affirmation suivante: "Toutes les propriétés d'une classe de base


devraient être déclarées protected, ça serait beaucoup plus simple".
Non l’affirmation est fausse. Lorsqu’un attribut est défini protected cela signifie que la
responsabilité est partagée entre la classe de base et les classes dérivées pour la gestion de cette
attributs. Lorsqu’il est déclaré private cela signifie que c’est à la charge de la classe de base de
gérer et de contrôler cet attribut.

2. On ajoute une 3ème classe au code de la question précédente:

Page 2 sur 5
USTHB- Faculté d’Electronique et d’Informatique 2019/2020
Département d’Informatique
TD/TP Programmation Orienté Objet – ACAD B

public class CompteEpargneBoni extends CompteEpargne {

public void verserInterets()


{ deposer ( solde * (tauxInterets + 0.005) ); }
}

Question :
1. Pour ce faire, devrons nous rendre la propriété solde protected dans la classe
CompteEpargne ? ( vu elle est utilisée dans le calcul ici).
Non je ne devrais pas autoriser l’accès au solde d’un compte en lecture ni même en écriture
en dehors de la classe CompteEpargne : le solde doit rester private.
2. corriger les erreurs :
public class CompteEpargneBoni extends CompteEpargne {

public void verseInterets()


{ deposer ( getSolde() * (tauxInterets + 0.005) ); }
}

Pour chacun des groupes d'instructions suivants, dites laquelle des deux affirmations
s'applique:
A: La méthode verseInterets de la classe CompteEpargne est appelée
B: La méthode verseInterets de la classe CompteEpargneBoni est appelée

Instructions A ou B ?
CompteEpargne c1 = new CompteEpargne( ); A
[Link]();

CompteEpargneTauxVariable c2 = new CompteEpargneTauxVariable( ); A


[Link]();

CompteEpargneBoni c3= new CompteEpargneBoni( ); B


[Link]();

Exercice 2
On s’intéresse à une entreprise de textile disposant d’un ensemble de machines à coudre (simples
ou industrielles). Une machine simple est caractérisée par un code unique, un nom et une date
d’acquisition. Une machine industrielle est caractérisée par un code unique, un nom, une date
d’acquisition, une marque et un lieu d’achat. Chaque machine est maintenue par un seul
technicien. Un technicien est caractérisé par un code unique, un nom et un email. Il est affecté à
une ou plusieurs machines. On veut mémoriser la liste des machines de l’entreprise et les

Page 3 sur 5
USTHB- Faculté d’Electronique et d’Informatique 2019/2020
Département d’Informatique
TD/TP Programmation Orienté Objet – ACAD B

techniciens employés dans l’entreprise. On veut garder une trace de toutes les opérations de
maintenance d’une machine donnée (date de réparation, compte rendu,…).
Précisez les attributs et constructeurs des classes suivantes et éventuellement d’autres classes que
vous jugez nécessaires :
- La classe Machine (redéfinir la méthode equals pour les machines industrielles, Le test de
l’égalité se fait par rapport à la marque)
- La classe Technicien qui doit contenir, en plus des attributs personnels, la liste des machines
gérées par le technicien courant.
- La Classe Entreprise qui contient la méthode main, une liste statique de machines et une
deuxième liste de techniciens.
- Une classe opérationMaintenance caractérisée par des attributs à trouver. Chaque objet de cette
classe représente une opération de maintenance d’une machine donnée.
1° Rajouter, dans la classe machine, la liste de toutes les opérations de maintenance qui la
concerne.

2° Implémenter les méthodes suivantes : (ce n’est pas nécessaire de rajouter des méthodes
afficher dans les classes)
- Afficher les machines industrielles de l’entreprise.
- Comment modifier la méthode pour retourner la liste des machines industrielles au lieu
de les afficher
- Afficher les machines simples seulement.
- Ajouter une opération de maintenance pour une machine donnée.
- On veut connaitre la liste des techniciens qui entretiennent que des machines industrielles.
- -Afficher la liste des machines qui ont fait l’objet d’au moins une opération de
maintenance entre deux dates d1 et d2.

Ps. - On suppose que l’on dispose d’une classe Date avec la méthode supérieure
- Respecter le principe d’encapsulation.

Page 4 sur 5
USTHB- Faculté d’Electronique et d’Informatique 2019/2020
Département d’Informatique
TD/TP Programmation Orienté Objet – ACAD B

EXERCICE 3 DEVOIR MAISON

On a une Application qui met en œuvre les classes suivantes EnseignantPermanent,


EnseignantContractuel, Niveau, Classe, Séance, Salle, Collège, Salle et Matière, Date,
On Considère Les trois dernières classes : Salle, Matière et Date déjà définies.
1. Définir une énumération JOUR composée des jours de la semaine.
2. Définir une classe Séance caractérisée par un jour, un créneau horaire entier correspondant
au numéro de la séance, on dispose de 8 séances ; le numéro 1 correspond à la séance de 8 h,
le créneau 2 correspond à la séance de 9 h…,. La séance est caractérisée aussi par une salle
de type SALLE et une Matière. Il n’est pas demandé d’écrire la classe Matière. Rajouter la
méthode qui permet de comparer l’ordre entre deux séances, premier critère le jour et le
second le créneau horaire.
3. On considère une classe Niveau définie par un numéro (entier entre1 et 4) et la liste des
matières (Matière) correspondantes. Ecrire la classe Niveau en définissant seulement ses
attributs et en redéfinissant la méthode equals de telle sorte que deux niveaux soient égaux
s’ils ont les mêmes numéros
4. Définir les classes EnseignantPermanent et EnseignantContractuel. L’enseignant permanent
est caractérisé par un matricule, nom, un prénom, une adresse, la date de recrutement, le
diplôme une matière et la liste des classes où il intervient.
5. Un enseignant contractuel caractérisé par un matricule, un nom, un prénom, une adresse, un
diplôme et la date de début et fin de contrat, une matière et la liste des classes où il intervient.
On suppose que chaque enseignant ne peut enseigner qu’une matière. Donner le squelette de
ces classes en rajoutant le constructeur et to String pour une seule de ces deux classes
6. Soit la classe Classe définie par un niveau, un code automatique composé du numéro de
niveau suivi de la chaine ‘’AM ‘’ et d’un numéro séquentiel, exemple 1AM1, 1AM2 et
2AM1. On rajoute à cette classe la liste des enseignants et la liste des séances appelée
EmploiDuTemps. Donner le constructeur. Rajouter, dans l’endroit adéquat, la méthode
booléene intervienTousNiveaux() qui retourne vrai si l’enseignant intervient dans tous les
niveaux.
7. Définir la classe modèle appelée Collège, caractérisée par une liste d’enseignants, une liste de
classes et une liste de salles. Rajouter les méthodes qui permettent de réaliser :
a) Retourne le nombre de classes du collège.
b) Retourne la liste des enseignants permanents,
c) Afficher la liste des enseignants qui interviennent dans tous les niveaux
d) Affiche le nombre de classes par niveau
e) Retourne la liste des séances (trié) d’un enseignant donné.
f) Étant donné un jour j, donne la liste des créneaux libres pour une classe
donnée.
g) Affiche le volume horaire hebdomadaire pour chaque enseignant permanent.

Page 5 sur 5

Vous aimerez peut-être aussi