Éléments de programmation objet

UML

Présentation

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.

Diagramme de classe

Ensemble de boîtes de la forme

UML box

Notez :

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.

Association

Une association entre A et B indique que :

et/ou

On donne, en annotant la flèche, les informations :

Multiplicité

Attention, les multiplicités sons à l’inverse des diagrammes entité-relation des bases de données.

Exemple :

UML box

Exception

Définition

Le système d’exception permet d’enrichir la « communication » entre une fonction et son appelant. Elle peut :

Propagation

Les exceptions lancées sont propagées de fonction/méthode appelante en fonction/méthode appelante jusqu’à ce que :

Autrement dit, les exceptions remontent la pile d’appel.

Exemple :

En 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 !");
  }
}

Syntaxe

Une exception est un objet avec un type particulier. Dans ce cours, on utilisera les exceptions standard de Java dont :

Les 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 trycatch. On peut spécifier un code spécifique pour chaque type d’exception lancé :

try {
   ...
}
catch (IllegalStateException | IllegalArgumentException e) {
   ...
}
catch (AssertionError e) {
   ...
}

La clause 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

Remarque : un constructeur peut lancer une exception, cela annule dans ce cas la création de l’objet (sauf cas pathologique).

Règles de bonne pratique

On ne lance pas ni n’attrape l’exception Exception

Type énumérés avec champs

On peut déclarer des enums 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;
  }
}