Академический Документы
Профессиональный Документы
Культура Документы
Correction TD : Héritage
Exercice 1:
Le programme Erreur ci-dessous définit les classes E1, E2, E3, E4, E5 et Erreur. Pour
chacune des 5 instructions d'affichage dans la méthode main, indiquez si l'instruction est
correcte ou fausse. Compilez et corrigez le programme pour vérifier vos réponses.
/////////////////////////////////////Correction ////////////////////////////////////////
Exercice 1
1. System.out.println(x.a)
Correct, car une variable d'instance a est déclarée dans la classe de x (E1).
2. System.out.println(y.c)
Faux, car la classe de y (E2) ne dispose pas de la variable d'instance c qui est déclarée
dans une sous-classe (E3).
3. System.out.println(z.b)
Correct, car la variable d'instance b est héritée de la super-classe (E2) de z (qui est de
type E3).
4. System.out.println(v.e)
Faux, car la classe de v (E4) ne dispose pas de la variable d'instance e qui est déclarée
dans une classe parallèle (E3).
5. System.out.println(w.a)
Correct, car la variable d'instance a est héritée d'une super-classe (E1) de w (qui est
de type E5).
Exercice 2 :
Une entreprise a un certain nombre d’employés. Un employé est connu par son nom, son
matricule (qui l’identifie de façon unique) et son indice salarial. Le salaire est calculé en
multipliant cet indice par une certaine valeur qui peut changer en cas d’augmentation générale
des salaires, mais qui est la même pour tous les employés.
1. Ecrivez la classe des employés avec les informations utiles et des méthodes pour afficher
les caractéristiques d’un employé et pour calculer son salaire.
2. Certains employés ont des responsabilités hiérarchiques. Ils ont sous leurs ordres d’autres
employés. Ecrivez une sous-classe des employés qui représente ces responsables en
enregistrant leurs inférieurs hiérarchiques directs dans un tableau. Ecrivez une méthode qui
affiche les inférieurs directs (placés directement sous leurs ordres) et une autre qui affiche
les employés inférieurs directs ou indirects (c’est à dire les subordonnés des subordonnés).
On suppose que la hiérarchie de l’entreprise en pyramidale.
3. Les commerciaux ont un salaire composé d’un fixe et d’un intéressement proportionnel à
leurs ventes. Ecrivez une sous-classe des commerciaux qui contient l’information sur leurs
ventes du dernier mois, une méthode pour mettre à jour cette information et redéfinissez la
méthode de calcul de leurs salaires.
4. Ecrivez une classe représentant tout le personnel de l’entreprise, avec une méthode calculant
la somme des salaires à verser.
Exercice N2
class Employe2{
String nom;
int matricule;
int indiceSalarial;
static int valeur = 12;
Employe2(String n, int m, int i){
nom = n;
matricule = m;
indiceSalarial = i;
}
void ecrire(){
System.out.println(nom + " " + matricule + " " + indiceSalarial);
}
int salaire(){
return indiceSalarial *valeur;
}
void afficheSubordonnesDirects(){
Super.ecrire();
System.out.println(" subordonnés: ");
for (int i = 0; i<subordonnes.length; i++){
System.out.println(" ");
subordonnes[i].ecrire();
System.out.println();
}
}
void ecrire(){
System.out.println (nom + " " + matricule + " " + indiceSalarial);
System.out.println (" " + titre);
}
}
class Commercial extends Employe2{
int venteDuMois;
Commercial(String n, int m, int i){
super(n,m,i);
}
void enregistreVentes(int i){
venteDuMois = i;
}
int salaire(){
return (indiceSalarial *valeur)+(venteDuMois/12);
}
}
class Personnel{
Employe2[] tabEmp = new Employe2[100];
int nbEmp = 0;
Responsable[] tabResp = new Responsable[10];
int nbResp = 0;
Employe2 chercherEmploye(int matr){
for (int i=0; i<nbEmp; i++){
if (tabEmp[i].matricule == matr){
return tabEmp[i];
}
}
return null;
}
void ajouterEmploye(Employe2 e){
if (chercherEmploye(e.matricule) == null){
tabEmp[nbEmp] = e;
nbEmp++;
}
}
void ajouterResponsable(Responsable r){
if (chercherEmploye(r.matricule) == null){
ajouterEmploye(r);
tabResp[nbResp] = r;
nbResp++;
}
}
void affichePersonnel(){
Exercice 3 :
Il s’agit dans cet exercice de proposer une conception modélisant une boîtes aux lettres en Java
orienté-objet.
Une boîtes aux lettres recueille des lettres, des colis et des publicités.
Les trois méthodes principales liées à la boîte aux lettre sont les suivantes :
3. une méthode afficher() affichant le contenu de la boîte aux lettre (on indiquera alors quels
courriers sont invalides).
Sur papier, commencez par dessiner une hiérarchie de classes permettant de mettre en oeuvre
la conception suggérée en tenant compte des contraintes mentionnées. Vous spécifierez dans
votre diagramme les classes, les attributs et les entêtes des méthodes (sans les corps). Les
contraintes suivantes devront être respectées :
1. Votre conception doit être faite de sorte à ce qu'aucune des méthodes requises n'ait
besoin de faire de test sur la nature de l'objet auquel elle s'applique.
2. Les classes doivent fournir toutes les méthodes qui leur sont nécessaires.
3. Une classe ne comportera que les méthodes/attributs qui lui sont spécifique.
4. Les modificateurs d'accès devront être clairement spécifiés.
5. Vos classes doivent éviter de dupliquer inutilement des méthodes ou des attributs et elle
seront compatibles avec le programme principal fourni dans le fichier Poste.java.
Avec le programme principal fourni, vous devriez avoir une exécution telle que (le prix indique
le coùt d'affranchissement):
Lettre
(Courrier invalide)
Poids : 800.0 grammes
Express : non
Destination :
Prix : 0.0 CHF
Format : A4
Publicité
Poids : 1500.0 grammes
Express : oui
Destination : Les Moilles 13A, 1913 Saillon
Prix : 15.0 CHF
Publicité
(Courrier invalide)
Poids : 3000.0 grammes
Express : non
Destination :
Prix : 0.0 CHF
Colis
Poids : 5000.0 grammes
Express : oui
Destination : Grand rue 18, 1950 Sion
Prix : 25.0 CHF
Volume : 30.0 litres
Colis
(Courrier invalide)
Poids : 3000.0 grammes
Express : oui
Destination : Chemin des fleurs 48, 2800 Delemont
Prix : 0.0 CHF
Volume : 70.0 litres
////////////////////////////////correction///////////////////////////////////////////////////////////////
/* Classe pour représenter le courrier
*/
class Courrier {
// retourne le montant n'ecessaire pour affranchir le courrier
// en mode d'exp'edition normal
@Override
public String toString() {
String s = "";
if (!valide())
{
s+= "(Courrier invalide)\n";
}
s+= " Poids : " + poids + " grammes\n";
s+= " Express : " + (express ? "oui" : "non") + "\n";
s+= " Destination : " + adresse + "\n";
s+= " Prix : " + affranchir() + " CHF\n";
return s;
}
// red'efinit affranchirNormal()
public double affranchirNormal() {
double montant = 0;
if (format.equals("A4")){
montant = 2.0;
} else {
montant = 3.5;
}
montant += getPoids()/1000.0;
return montant;
}
@Override
public String toString() {
String s = "Lettre\n";
s += super.toString();
s += " Format : " + format + "\n";
return s;
}
}
/* Une classe pour repr'esenter les publicit'es
*/
// redéfinit affranchirNormal()
public double affranchirNormal() {
return getPoids()/1000.0 * 5.0;
}
@Override
public String toString() {
String s = "Publicité\n";
s += super.toString();
return s;
}
// redéfinit affranchirNormal();
public double affranchirNormal() {
// affranchit les colis selon une formule pr'ecise
return 0.25 * volume + getPoids()/1000.0;
}
@Override
public String toString() {
String s = "Colis\n";
s += super.toString();
s += " Volume : " + volume + " litres\n";
return s;
}
}
class Boite {
// constructeur
public Boite(int max) {
contenu = new Courrier[max];
index = 0;
}
// la méthode demand'ee
public double affranchir() {
double montant = 0.0;
for(int i=0; i < index; ++i){
Courrier c = contenu[i];
montant += c.affranchir();
}
return montant;
}
Colis colis1 = new Colis(5000, true, "Grand rue 18, 1950 Sion", 30);
Colis colis2 = new Colis(3000, true, "Chemin des fleurs 48, 2800
Delemont", 70); //Colis invalide !
boite.ajouterCourrier(lettre1);
boite.ajouterCourrier(lettre2);
boite.ajouterCourrier(pub1);
boite.ajouterCourrier(pub2);
boite.ajouterCourrier(colis1);
boite.ajouterCourrier(colis2);