UML est un ensemble de diagramme permettant de représenter la conception d’un logiciel
Nous verrons comment représenter les dépendances entre classes à l’aide d’un diagramme de classe.
Ensemble de boîtes de la forme
Notez :
+
pour publique et -
pour privéPour former un diagramme de classe, ces boîtes sont reliées entre elles par des flèches. Dans ce cours, nous ne verrons que les flèches de type association.
Une association entre A
et B
indique que :
A
contient une ou plusieures références vers la B
et/ou
B
contient une ou plusieures références vers la A
On donne, en annotant la flèche, les informations :
A
dans B
et de B
dans A
(multiplicité)Attention, les multiplicités sons à l’inverse des diagrammes entité-relation des bases de données.
B
se trouve le nombre de références vers des instances de B
dans une instance de A
.B
dans A
et au moins une référence vers A
dans B
on utilise just un traitExemple :
Le système d’exception permet d’enrichir la « communication » entre une fonction et son appelant. Elle peut :
Les exceptions lancées sont propagées de fonction/méthode appelante en fonction/méthode appelante jusqu’à ce que :
main
; dans ce cas, un message (d’erreur) est affichéAutrement dit, les exceptions remontent la pile d’appel.
Exemple :
main
appelle la fonction traite
qui appelle la fonction faitLe
qui lève une exceptiontraite
n’attrape pas l’exception qui se propage à la fonction main
main
attrape l’exception et continueEn java :
public class Exn {
public static void main(String[] args) {
try {
traite();
}
catch (IllegalStateException e) {
System.out.println("Exception attrapée : "+e);
}
}
public static void traite() {
faitLe();
}
public static void faitLe() {
throw new IllegalStateException("Non, je ne veux pas !");
}
}
Une exception est un objet avec un type particulier. Dans ce cours, on utilisera les exceptions standard de Java dont :
IllegalArgumentException
pour les paramètres de méthode/fonction/constructeur invdalide (par exemple, donner un âge négatif)IllegalStateException
pour l’appel d’une méthode d’un objet alors que c’est interdit (par exemple, récupérer le haut d’une pile vide)AssertionError
pour un cas qui ne peut pas arriver, sauf bug du programmeLes exceptions sont construites avec leur constructeur (en général elles prennent un message en paramètre) et lancées directement:
throw new IllegalStateException("Empty Stack");
Quand on veut attraper une exception, ajoute un bloc try
… catch
. On peut spécifier un code spécifique pour chaque type d’exception lancé :
try {
...
}
catch (IllegalStateException | IllegalArgumentException e) {
...
}
catch (AssertionError e) {
...
}
throws
Certaines exceptions doivent être indiquée dans la signature d’une méthode qui les lance (par exemple IOException
pour indiquer une erreur d’entrée sortie).
void readManyThings(String file) throws IOException {
...
}
Cela a une conséquence : tout ce qui appelle la méthode readManyThings
doit
IOException
Remarque : un constructeur peut lancer une exception, cela annule dans ce cas la création de l’objet (sauf cas pathologique).
On ne lance pas ni n’attrape l’exception Exception
On peut déclarer des enum
s avec des champs et méthodes. Chaque élément de l’enum
appelle le constructeur avec des arguments différents.
public enum Mois {
JANVIER(31),
FEVRIER(28,true),
MARS(31),
AVRIL(30),
MAI(31),
JUIN(30),
JUILLET(31),
AOUT(31),
SEPTEMBRE(30),
OCTOBRE(31),
NOVEMBRE(30),
DECEMBRE(31);
private final int dayCount;
private final boolean affectedByBissectile;
private Mois(int dayCount) {
this(dayCount,false);
}
private Mois(int dayCount, boolean affectedByBissectile) {
this.dayCount = dayCount;
this.affectedByBissectile = affectedByBissectile;
}
public int dayCount(boolean bissectile) {
if (affectedByBissectile)
return bissectile?dayCount+1:dayCount;
else
return dayCount;
}
public int monthNumber() {
return ordinal()+1;
}
}