Vous êtes sur la page 1sur 4

Programmation Orientée Objet avec JAVA

TP N°4
Héritage et Polymorphisme
Gestion des Exceptions

Partie I : Compréhension du cours

1- Supprimez dans le code qui suit les lignes qui provoquent une erreur et indiquez si l’erreur se
produit à la compilation ou à l’exécution. Quel est le résultat de l’exécution qui s’affiche à l’écran après
suppression des instructions à problèmes ?

class A { public class Question1 { B a2 = new A();


public void a(){ public static void main(String[] args){ B b2 = new B();
System.out.println("a de A"); A a1 = new A(); B c2 = new C();
} A b1 = new B(); c2.a();
public void b(){ A c1 = new C(); c2.b();
System.out.println("b de A"); a1.b(); c2.c();
} b1.a(); c2.d();
} b1.b(); ((A)b2).c();
class B extends A{ c1.a(); ((B)c2).c();
public void b(){ c1.c(); ((B)c2).d();
System.out.println("b de B"); ((B)a1).c(); ((C)b2).c();
} ((B)b1).d(); ((C)c2).d();
public void c(){ ((B)c1).c();
System.out.println("c de B"); ((C)b1).c(); C c3 = new C();
} ((C)c1).d(); c3.a();
} c3.b();
c3.c();
c3.d();
class C extends B{ }
public void c(){ }
System.out.println("c de C");
}
public void d(){
System.out.println("d de C");
}}

1
Exercice 2 : Qu'affiche le programme suivant ?

class A {
public String f() { return ("A");}
public String f(B obj) { return ("A et B");}
public String f(A obj) { return ("A et A");}
}

class B extends A {
public String f() { return ("B");}
public String f(B obj) { return ("B et B");}
public String f(A obj) { return ("B et A");}
}

public class Test {


public static void main (String [] args){
A a1 = new A();
A a2 = new B();
B b = new B();
System.out.println(a1.f()); //A
System.out.println(a2.f()); //B
System.out.println(b.f()); //B
System.out.println(a1.f(a1)); // A et A
System.out.println(a1.f(a2)); //A et A
System.out.println(a2.f(a1)); //B et A
System.out.println(a2.f(a2)); //B et A
System.out.println(a2.f(b)); //B et B
System.out.println(b.f(a2));} //B et A
}

Partie II : Héritage et polymorphisme

1- On modélise une application devant servir à l’inventaire d’une bibliothèque. Elle devra traiter des
documents de nature diverse : des livres, des dictionnaires, des périodiques et des CDs. Tous les
documents possèdent un identifiant unique (le numéro d’enregistrement par ordre de création), un titre et
une date d’emprunt (potentiellement nulle).
A chaque livre est associé, en plus, un auteur, un éditeur et un nombre de pages. Les dictionnaires sont des
livres et ont pour attributs supplémentaires une langue, et un nombre de tomes. Les périodiques auront
comme propriétés le numéro de volume et la périodicité. Les CDs le nom de l’artiste.
On veut manipuler tous les articles de la bibliothèque au travers d’une même représentation : celle d’un
document.

Définissez les classes Document, Livre, Periodique, Dictionnaire, et CD. Définissez un constructeur pour
chacune des classes permettant d’initialiser toutes ses variables d’instance.
Redéfinissez la méthode toString() dans la classe Document, ainsi que dans les classes Livre, Dictionnaire,
Periodique et CD, et qui renvoie une chaîne de caractère décrivant un document, un livre, un dictionnaire,
un périodique ou un CD.

2
Définissez une classe ListeDeDocuments permettant de créer une liste vide de documents (qui sera
représenté comme un tableau), puis y adjoindre des fonctions permettant d’ajouter ou supprimer un
document (la suppression prenant en argument l’identifiant du document).

Dans la classe ListeDeDocuments définissez une méthode tousLesAuteurs() qui affiche le nombre
d’ouvrages(livre et dictionnaires), puis la liste des identifiants des documents de la liste, avec pour chacun
l’éventuel auteur.
Ajoutez alors dans la classe ListeDeDocuments une méthode tousLesDocuments() qui affiche
consécutivement la description de tous les documents.

Définissez une classe Bibliotheque réduite à une méthode main permettant de tester les classes
précedentes.

Terminer le diagramme des classes de votre application ci-dessous

Partie III : Classes et Interfaces


1) Le grand Arbre de la vie divise les Animaux en Oiseaux et Mammifères. Des oiseaux sont les Perroquets
et les Perruches ; des Mammifères sont les Chevaux et les Hommes.
- Les Hommes et les Perroquets peuvent parler.
- Les Hommes et les Perruches peuvent siffler.
- Les Hommes et les Chevaux peuvent marcher et courir.

Définir des classes pour chacune de ces espèces, et des interfaces pour chacun de ces comportements.
Ensuite implémenter les différentes méthodes des interfaces dans chacune des classes de sorte
qu’a l’écran s’affiche le son produit par le comportement correspondant (par exemple un Cheval
qui court fait “tagada tagada”, un Perroquet qui parle fait “Coco est content” etc.).

Enfin, programmer une classe contenant la méthode main qui déclare des objets pour Monsieur Dupont,
son cheval, son perroquet et ses deux perruches, et fait entendre un échantillon du boucan produit par
tout ce petit monde.

3
Partie IV-Exceptions
Exercice 1 : [Utilisation des Exceptions]
La méthode parseInt de la classe Integer est spécifiée ainsi :
public static int parseInt(String s)
throws NumberFormatException
Parses the string argument as a signed decimal integer. The characters in the string must all be
decimal digits, except that the first character may be an ASCII minus sign '-' ('\u002D') to indicate a
negative value. The resulting integer value is returned, exactly as if the argument and the radix 10
were given as arguments to the parseInt(java.lang.String, int) method.
Parameters:
s - a String containing the int representation to be parsed
Returns:
the integer value represented by the argument in decimal.
Throws:
NumberFormatException - if the string does not contain a parsable integer.

Utilisez cette méthode pour faire la somme de tous les entiers donnés en argument de la ligne de
commande, les autres arguments étant ignorés.

Exercice 2 [Création des Exceptions]

Ecrire une classe Entreprise. Une entreprise a un nombre d’employés, un capital, un nom, une mission, et
une méthode public String mission() qui renvoie la mission de l’entreprise et qui déclare le lancement de
l’exception SecretMissionException. On aura également une méthode public int capital() qui renvoie le
capital et qui déclare le lancement de l’exception
NonProfitException.

Ecrire une classe EntrepriseSecrete qui hérite d’Entreprise et dont la méthode mission lance l’exception
SecretMissionException.

Ecrire une classe EntrepriseSansProfit qui hérite d’Entreprise et dont la méthode capital lance l’exception
NonProfitException.

Ecrire une classe Entreprises qui contient :


une méthode statique public static void toutesLesEntreprises(Entreprise[] e) qui prend en entrée
un tableau d’entreprises et affiche la mission et le capital de toutes les entreprises (quand cela est
possible).
La méthode main qui pour tester la méthode Ecrire la méthode toutesLesEntreprises sur les
entreprises :
Entreprise Micro = new Entreprise("Microsoft", "Destroy the world", 1000, 1900);
Entreprise Ford = new Entreprise("Ford", "Conquer the world", 2000, 1500);
Entreprise CIA = new EntrepriseSecrete("CIA", "Spy Bill Gates", 23000, 35500);
Entreprise CroixRouge =new EntrepriseSansProfit("CroixRouge", "look after yours health", 20, 500);

Exercice 3 [Utilisation des exceptions dans les constructeurs]


Toutou est une classe avec deux attributs privés String nom et int nombrePuces.
Ecrire un constructeur public Toutou (String n, int np) qui propage des exceptions de type
IllegalArgumentException lorsque le nom n est null ou lorsque le nombre de puces np est négatif. Utiliser
ce constructeur dans une méthode main pour contrôler les appels new Toutou ("milou", 4) et new Toutou
("medor", -11) et afficher les erreurs éventuelles lors de l’exécution des constructeurs.
4

Vous aimerez peut-être aussi