![Page 1: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/1.jpg)
Au programme du jour …. Livraison de code
Organisation des répertoires et packages
Ce que vous n’avez pas encore vraiment vu Constantes et variables de classe (static) Visibilité (public, private, protected) Héritage (extends) Exceptions
![Page 2: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/2.jpg)
Livraison d’un projet
![Page 3: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/3.jpg)
Usage de votre code Votre code est destiné à être utilisé VOUS DEVEZ Documenter votre code 2 documentations :
à destination des usagers de la classe : ils ne doivent pas connaître l’implémentation.
Ils doivent uniquement connaître : La façon d’installer et d’exécuter Les fichiers .class et leur emplacement Et la documentation de l’interface de la classe : javadoc
à destination des développeurs qui doivent faire évoluer votre code: ils doivent connaître l’implémentation.
Livraison des .java Et Documentation de l’implémentation de la classe : UML, cahier
des charges, spécifications détaillées, commentaires dans le code
![Page 4: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/4.jpg)
Livraison
Rappel Javadoc
![Page 5: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/5.jpg)
API Java : à quoi ça vous sert ?
Rechercher des informations
et
Comprendre un code existant
![Page 6: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/6.jpg)
API Java : Rechercher des informations sur les types de données que l’on
manipule ou que l’on souhaite manipuler ? ArrayList :
Peut on ajouter un élément à une position donnée ? Peut on enlever à une position donnée ? Qu’existe-t-il comme autre type de données du
même style ? Comment construit on une ArrayList ? Avec un
tableau est ce possible ?
![Page 7: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/7.jpg)
API Java : Comprendre un code existantString input = reader.getInput();if(input.startsWith("bye")) {
finished = true;}
Que fait startsWith("bye") ?Comment peut on trouver l’information ?Que fait getInput()?Comment peut on trouver l’information ?
![Page 8: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/8.jpg)
Comment chercher dans l’API ? Organisation par packages
Quels sont les packages que vous connaissez ? java.util java.lang
Où pouvez vous trouver la classe String ? La classe ArrayList ?
Quels sont les packages qui pourront vous servir ?
![Page 9: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/9.jpg)
Pourquoi trouve-t-on l’information ? Parce que les classes sont documentées Documentation standardisée avec
génération dans un format HTML Documentation accessible par un browser
web On documente : l’API des classes
Interface des classes : ensemble des méthodes et variables publiques
Public vs private : accessible ou non à l’extérieur de la classe
![Page 10: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/10.jpg)
Documenter quoi ? Interface vs implémentation
L’implémentation reste cachée La documentation inclut :
Le nom de la classe Une description textuelle générale de la classe La liste des constructeurs et des méthodes publiques :
les signatures Valeurs de retours et paramêtres Description textuelle (pré_conditions, post conditions,
objectifs…)
L’ interface de la classe UTILE pour son usage
![Page 11: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/11.jpg)
Javadoc et classe POUR UNE CLASSE
Class comment: /** * The Responder class represents a response * generator object. It is used to generate an * automatic response. * * @author Michael Kölling and David J. Barnes * @version 1.0 (1.Feb.2002) */
![Page 12: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/12.jpg)
JAVADOC et méthode
Commentaire pour une méthode /** * Read a line of text from standard input (the text * terminal), and return it as a set of words. * * @param prompt A prompt to print to screen. * @return A set of Strings, where each String is * one of the words typed by the user */ public HashSet getInput(String prompt) { ... }
![Page 13: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/13.jpg)
Comment générer la javadoc : page HTML javadoc ClasseATester.java
OPTION -help Donne en ligne les différentes options
Génération du fichier ClasseATester.html
pour en savoir plus http://java.sun.com/j2se/javadoc/
writingdoccomments/
![Page 14: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/14.jpg)
Livraison
Rappel sur les tests
![Page 15: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/15.jpg)
Un Main pour les Tests
Exemple : Pour tester la classe ClasseATesterEcrire le contenu du main dans une classe TestDEClasseAtester (condition réelle de l’usage) de sorte
qu’il y ait:
Création d’instances de cette classe : (Tests des constructeurs)Affichage des instances créées (Tests des constructeurs et de la méthode toString)Appels des méthodes en faisant varier la valeur des paramètres sur ces instances (Test des méthodes publiques)Affichage des retours des méthodes pour voir les tests
![Page 16: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/16.jpg)
Comment faire et utiliser des packages?
![Page 17: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/17.jpg)
Vous connaissez déjà…. Organisation par packages
Quels sont les packages que vous connaissez ? java.util java.lang
Où pouvez vous trouver la classe String ? La classe ArrayList ?
Quels sont les packages qui pourront vous servir ?
![Page 18: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/18.jpg)
Comment travaille-t-on avec des packages ?
Les classes d’un package (bibliothèque de classes) doivent être importées (comme des livres que l’on emprunte…) Utilisation de la clause import
Pour importer une seule classe : import java.util.ArrayList; Pour importer toutes les classes d’un package : import java.util.*;
Importation inutile pour les classes de java.lang (tout le monde a ces livres ).
Une fois importées les classes ont toutes la même visibilité En cas de conflit, mettre le nom complet de la classe
java.util.ArrayList Ex : la classe MaClasse existe dans 2 packages :
monnompackage et autrenompackage On peut les distinguer à l’aide des noms complets :
monnompackage.MaClasse ou autrenompackage.MaClasse
![Page 19: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/19.jpg)
Packaging de votre code Implication dans chaque classe de cette
bibliothèque package nompackage;
Instruction à ajouter au début des classes appartenant au package
Implication sur l’organisation des fichiers Mettre les classes à compiler sous un répertoire de nom
nompackage Compiler (placé au dessus du répertoire de nom
nompackage) javac nompackage/ClassePackagée.Java
Exécuter (placé au dessus du répertoire de nom nompackage)
java nompackage.ClassePackagee
![Page 20: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/20.jpg)
Packaging de votre code et compilation
ATTENTION
A LA COMPILATION D’UNE CLASSE
Les classes utilisées doivent être déjà compilées et visibles
ORDRE de Compilation important
VISIBILITE importante
Désignation des répertoires où sont stockés les classes possibles
VARIABLE D’ENVIRONNEMENT : CLASSPATHOPTION DE COMPILATION ET D’EXECUTION : -cpAUTRE OPTION PRATIQUE -d
![Page 21: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/21.jpg)
Packaging de votre code Pour une meilleure livraison
Pour regrouper les classes utilisées dans le même contexte
Une organisation des répertoires src : les classes doc : la documentation bin : les binaires tests : les tests
![Page 22: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/22.jpg)
Constantes et variables de classe
Ce que vous n’avez pas encore vraiment
vu
![Page 23: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/23.jpg)
Un nouveau mot clé : static Information attachée à la classe et non à une
instance Constantes – static + mot clé final + nommage
private static final int GRAVITY = 3; public static final int VAL_MAX=10;
Variables et méthodes de classes : static variable : ex : Stocker les instances créées dans une
classe Exemple du compte bancaire
Méthode : ex : la méthode main et la classe Math Pour une classe de Test
![Page 24: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/24.jpg)
Visibilité des méthodes et des variables d’instances
Ce que vous n’avez pas encore vraiment
vu
![Page 25: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/25.jpg)
PRIVATE vs PUBLIC La partie Implémentation : Ce qui ne concerne pas l’usage
Les variables d’instances (statut private) – on doit pouvoir librement changer le type d’une variable d’instances et éviter que l’utilisateur change ses valeurs sans contràole (accesseurs et modifieurs)
Les méthodes internes à la classes (statut private)- on doit pouvoir réutiliser un code commun mais éviter que l’utilsateur fasse des effets de bord sur notre code (ex décalage des valeurs d’un tableau)
Implémentation de la classe (Le corps de chaque méthode et constructeur (code source))
Elle concerne les développeurs Autre documentation : conception UML, etc
![Page 26: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/26.jpg)
Héritage
Ce que vous n’avez pas encore vraiment
vu
![Page 27: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/27.jpg)
Héritage
La classe ObjectLa classe Object
![Page 28: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/28.jpg)
La classe ObjectLa classe Object
La classe Object est la classe mère dont héritent toutes les autres classes
Toute classe définie en Java, que ce soit par l’utilisateur ou dans un package de l’API, hérite de la classe Object
Ainsi, toute classe hérite d’emblée des méthodes de la classe Object
![Page 29: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/29.jpg)
Méthodes de la classe Méthodes de la classe Object Object
int hashCode() renvoie un code utilisé pour stocker dans une Hashtable
boolean equals(Object o) attention, == teste les références. Mais compare les références des attributs (=> redéfinir)
Object clone() : crée une copie de l’objet. Mais copie les références des attributs (=> redéfinir)
String toString() renvoie une String décrivant l'objet. Par défaut, renvoie le type et l’adresse de stockage (=> redéfinir)
...
![Page 30: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/30.jpg)
Intérêt de la classe Intérêt de la classe ObjectObject
Certains traitements sont si génériques qu'ils peuvent s'appliquer à tous les objets
Par exemple, une liste peut contenir n'importe quel type d'objet et les compter, les trier, etc.
Donc il faut écrire la classe Liste pour manipuler des objets de la classe Object
On pourra alors stocker dans la liste n’importe quel type d’objet
![Page 31: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/31.jpg)
Exemple
La classe Point contient tout ce qu'il y a de commun à PointColore et Point3D
Point contient la gestion de l’abscisse et de l’ordonnée PointColore ne contient que ce qu'il y a de spécifique en
plus : la couleur Point3D: le troisième axe
Point
PointColore Point3D
![Page 32: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/32.jpg)
Objectif de l'héritageObjectif de l'héritage
On souhaite ne décrire qu'une seule fois le même traitement lorsqu'il s'applique à plusieurs classes
Evite de recopier (notamment les modifications) On crée une classe plus générique à laquelle s'applique
le traitement Toutes les classes plus spécifiques, héritant de
cette classe, héritent de ce traitement, elles peuvent l'exécuter
Le traitement n'est décrit qu'au niveau de la classe mère Les classes filles contiennent d'autres
traitements plus spécifiques
![Page 33: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/33.jpg)
Usage de l'héritageUsage de l'héritage
Une classe spécifique hérite des méthodes (public) et des attributs (protected) de sa classe mère.
On n'a pas besoin de les réécrire pour la classe fille.
On peut cependant redéfinir une méthode de la classe mère dans la classe fille (de même signature)
Le constructeur d'un objet doit toujours commencer par appeler le constructeur de sa classe mère (super())
![Page 34: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/34.jpg)
Rappel : la surchargeRappel : la surcharge
On appelle surcharge le fait d’avoir plusieurs méthodes qui ont le même nom au sein de la même classe
Les exemplaires de la méthode ont des paramètres différents
Ils peuvent avoir le même type de retour Par contre, impossible d’avoir des types de
retour différents pour les mêmes paramètres
![Page 35: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/35.jpg)
Usage de l'héritage Usage de l'héritage (suite)(suite)
Un objet de type PointColore peut utiliser toutes les méthodes de la classe Point
Il doit disposer d’une valeur pour tous les attributs de la classe Point
A tout moment, une méthode qui utilise un objet de type Point peut manipuler un objet de type PointColore en guise de Point (on ne pourra pas accéder à la couleur)
Cette dernière propriété est le polymorphisme.
![Page 36: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/36.jpg)
Exemple : une classe Exemple : une classe PointPoint
class Point {
protected int x,y;
public Point(int a, int b){x=a; y=b;}public Point(){x=0; y=0;}
public void moveTo (int a, int b){x=a; y=b;} public String toString()
{return ‘‘(‘‘ + x + ‘‘,‘‘ + y + ‘‘)‘‘);}
public void distanceToOrigin(){
return Math.sqrt(x*x +y*y);}
}
![Page 37: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/37.jpg)
Exemple : classe Exemple : classe PointCol (oré)PointCol (oré)
class PointColore extends Point{
protected String couleur;
public PointColore (int abs, int ordo, String c){super(abs,ordo);
couleur=c;}public PointColore (String c){couleur=c;} // appel implicite de super()public PointColore(){super(); couleur=« blanc »;}
public String getColor(){return couleur;}public String toString()
{return super.toString()+ ‘‘couleur ‘‘+
couleur;}
} ArrayList<Point> lesPoints;
![Page 38: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/38.jpg)
Ce que vous n’avez pas vraiment vu
Les wrappersLes wrappers
![Page 39: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/39.jpg)
Les classes Les classes « enveloppe » (1)« enveloppe » (1)
Problème : les types de base (int, float, double, boolean… ne sont pas des objets)
On ne peut pas les stocker tels quels dans les conteneurs
C’est à cela que servent les classes enveloppes (Wrappers)
![Page 40: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/40.jpg)
Les classes Les classes « enveloppe » (2)« enveloppe » (2)
Permettent de représenter des types de base sous forme d’objets
int entier => Integer n Integer n = new Integer(entier); entier = n. intValue(); double =>Double, boolean =>
Boolean… intValue(), doubleValue() ...
![Page 41: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/41.jpg)
Ce que vous n’avez pas vraiment vu
Les exceptionsLes exceptions
![Page 42: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/42.jpg)
Les exceptions que vous Les exceptions que vous connaissez déjàconnaissez déjà
Des exceptions logicielles rattrapables NumberFormatException ArrayIndexOutOfBounds
Des exceptions graves non rattrapables NullFormatPointerException
![Page 43: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/43.jpg)
E qu’on peut faire : les E qu’on peut faire : les rattraperrattraper
try<instruction>catch(<type-exception1 ex1) <instruction>catch(<type-exception2 ex2) <instruction>…finally<instruction>
![Page 44: Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de](https://reader035.vdocuments.pub/reader035/viewer/2022070309/551d9d81497959293b8bb2ae/html5/thumbnails/44.jpg)
E qu’on peut faire : les E qu’on peut faire : les déclarer et les leverdéclarer et les lever
void maMethode() throws E {...obj.m();...}
E doit être une sous classe d’Exception
Instruction throw new Exception(unmessage);