Les collections OFPPT/ EL KASSMI 1
Collections2 Les collections sont des objets qui permettent de gérer des ensembles d'objets. Ces ensembles de données peuvent être définis avec plusieurs caractéristiques : la possibilité de gérer des doublons, de gérer un ordre de tri, etc. ... Le framework collections fournit : Interfaces Implementation Algorithms2013 - 2014 OFPPT/ EL KASSMI 2013 - 2014 OFPPT/ EL KASSMI
Diagramme du framework32013 - 2014 OFPPT/ EL KASSMI
L’Interface collection4 Cette interface définit les méthodes fondamentales : int size(); boolean isEmpty(); boolean contains(Object element); boolean add(Object element); // Optional boolean remove(Object element); // Optional Iterator iterator(); Ces méthodes sont utilisé pour définir le comportement de base d’une collection Fournit un Iterator pour parcourir les éléments de la collection2013 - 2014 OFPPT/ EL KASSMI 2013 - 2014 OFPPT/ EL KASSMI
L’Interface Iterator5 Cette interface définit les méthodes fondamentales : Object next(); boolean hasNext(); void remove(); Ces méthodes permettent d'accéder au contenu de la collection l’ Iterateur utiliser pour savoir la position des éléments de la collections L’appel de la méthode next() permet de lire la collection Ensuite, vous pouvez l’utiliser ou de le supprimer2013 - 2014 OFPPT/ EL KASSMI 2013 - 2014 OFPPT/ EL KASSMI
Exemple6 public class SimpleCollection { public static void main(String[] args) { Collection c; c = new ArrayList(); System.out.println(c.getClass().getName()); for (int i=1; i <= 10; i++) { c.add(i + \" * \" + i + \" = \"+i*i); } Iterator iter = c.iterator(); while (iter.hasNext()) System.out.println(iter.next()); } }2013 - 2014 OFPPT/ EL KASSMI 2013 - 2014 OFPPT/ EL KASSMI
Interface List7 Collection List2013 - 2014 OFPPT/ EL KASSMI 2013 - 2014 OFPPT/ EL KASSMI
Interface List8 Les collections qui implémentent cette interface autorisent les doublons dans les éléments de la liste. Ils autorisent aussi l'insertion d'éléments null.2013 - 2014 OFPPT/ EL KASSMI
ArrayList, LinkedList92013 - 2014 OFPPT/ EL KASSMI 2013 - 2014 OFPPT/ EL KASSMI
ArrayList10 ArrayList (Les tableaux redimensionnables ) Accès rapide aux éléments. L’addition ou la suppression d’un objet est difficile. taille peut varier au fil de l’exécution. boolean add(Object) ; boolean addAll(Collection); boolean addAll(int, Collection)2013 - 2014 OFPPT/ EL KASSMI 2013 - 2014 OFPPT/ EL KASSMI
LinkedList11 LinkedList Accès séquentiel aux éléments. Simplifier l’ajout et la suppression.2013 - 2014 OFPPT/ EL KASSMI 2013 - 2014 OFPPT/ EL KASSMI
Interface Set12 Un ensemble (Set) est une collection qui n'autorise pas l'insertion de doublons. Collection Set2013 - 2014 OFPPT/ EL KASSMI
HashSet et TreeSet13 HashSet l'insertion d'un nouvel élément est rapide La recherche d'un élément est aussi rapide Les éléments d'un objet HashSet ne sont pas triés TreeSet l'insertion d'un nouvel élément est plus longue les éléments d'un objet TreeSet sont triés2013 - 2014 OFPPT/ EL KASSMI
Exemple14 pimport java.util.*; public class TestHashSet { public static void main(String args[]) { Set set = new HashSet(); set.add(\"CCCCC\"); set.add(\"BBBBB\"); set.add(\"DDDDD\"); set.add(\"BBBBB\"); set.add(\"AAAAA\"); Iterator iterator = set.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } OFPPT/ EL KASSMI } OFPPT/ EL KASSMI } 2013 - 2014 2013 - 2014
Exemple (suite)15 import java.util.*;public class TestTreeSet {public static void main(String args[]) { Set set = new TreeSet<String>(); set.add(\"CCCCC\"); set.add(\"BBBBB\"); set.add(\"DDDDD\"); set.add(\"BBBBB\"); set.add(\"AAAAA\"); (JDK 5.0) for (Object object : set) { System.out.println((String)object); } }}2013 - 2014 OFPPT/ EL KASSMI
Interface Map16 Des collections gérées sous la forme clé/valeur Map2013 - 2014 OFPPT/ EL KASSMI 2013 - 2014 OFPPT/ EL KASSMI
Interface Map17 Gère une collection d'objets sous la forme clé/valeur La clé doit être unique : une seule clé apparait une seule fois dans la Map Une clé peut être assigné à une seule valeur Les valeurs ne doivent pas être unique Object put(Object key, Object value)Méthodes Object get(Object key) Object remove(Object key) boolean containsKey(Object key) boolean containsValue(Object value) int size() boolean isEmpty()2013 - 2014 OFPPT/ EL KASSMI 2013 - 2014 OFPPT/ EL KASSMI
HashMap et TreeMap18 Map HashMap TreeMap2013 - 2014 OFPPT/ EL KASSMI
TreeMap et HashMap19 TreeMap Implémente l'interface SortedMap L’ordre est maintenu grâce à un objet de type Comparable. Hashtable Toutes les méthodes sont synchronized N'est pas possible d'utiliser la valeur null comme clé ou valeu.HashMapSimilaire à la classe Hashtable. Les trois grandes différences sont : Elle permet l'utilisation de la valeur null comme clé et comme valeur. Elle n'est pas thread-safe. Elle ne garantit aucun ordre lors du parcours des éléments de la collection.2013 - 2014 OFPPT/ EL KASSMI
Résumé OFPPT/ EL KASSMI20 2013 - 2014
Les classes utilitaires21 Collections • Trier une collection • Faire des recherches rapides sur une collection triée •… Arrays • Trier un tableau • Faire des recherches rapides sur un tableau trié • Transformer un tableau en une liste •…2013 - 2014 OFPPT/ EL KASSMI
Tri des collections22 L'ordre de tri est défini grâce à deux interfaces : Comparable (ordre naturel) définit la méthode : int compareTo(Object). Cette méthode doit renvoyer : · une valeur <0 si l'objet courant est inférieur à l'objet fourni · une valeur >0 si l'objet courant est supérieur à l'objet fourni · un null si l'objet courant est égal à l'objet fourni Comparator( un ordre quelconque) définit la méthode : int compare(Object, Object). Cette méthode doit renvoyer : • une valeur <0 si le premier objet est inférieur au second · une valeur >0 si le premier objet est supérieur au second · un null si les deux objets sont égaux2013 - 2014 OFPPT/ EL KASSMI
Les exceptions OFPPT/ EL KASSMI 23
Qu’est-ce qu’une exception en Java ?24 Une exception est un événement, se produisant lors de l’exécution d’un programme, qui interrompt l’enchaînement normal des instructions. Lorsqu’une erreur se produit dans une méthode, celle-ci crée un objet Exception qui contient des informations sur l’erreur survenue : le type de l’erreur : objet null, dépassement de tableau, etc. la trace d’exécution du programme : la stack trace L’action de créer un objet Exception et de le passer au système d’exécution est appelée lever/lancer une exception (throwing an exception)2013 - 2014 OFPPT/ EL KASSMI
Gestion d’une exception25 Lorsqu’une exception est levée, le système d’exécution tente de trouver un handler pour cette exception : == > c-à-d. une méthode pouvant la gérer. Pour cela, il cherchera dans les méthodes qui ont été appelées jusqu’à l’exception : the call stack (la pile d’appels)2013 - 2014 OFPPT/ EL KASSMI
Gestion d’une exception262013 - 2014 OFPPT/ EL KASSMI
Recherche dans la call stack27 Le système d’exécution va donc chercher dans la call stack une méthode contenant un bout de code capable de gérer l’exception levée. Ce bout de code est appelé exception handler. La recherche commence par la méthode où l’erreur est apparue. Cette recherche continue dans l’ordre inverse des méthodes contenues dans la call stack jusqu’à trouver un exception handler approprié. Un exception handler est approprié s’il est capable de gérer le type d’exception renvoyé. Si un exception handler approprié est trouvé, on dit qu’il attrape l’exception : catch the exception. Sinon, le programme s’arrête en affichant les informations associées à l’exception : type et stack trace (enchaînement des appels de méthode).2013 - 2014 OFPPT/ EL KASSMI
Gestion d’une exception282013 - 2014 OFPPT/ EL KASSMI
Le \"Catch\"29 Du code Java valide doit nécessairement inclure la gestion des exceptions et respecter ainsi le Catch :2013 - 2014 OFPPT/ EL KASSMI
Le \"Catch\"30 Tout code susceptible de renvoyer une exception doit être contenu soit : dans une instruction try/catch qui définit ainsi le handler approprié. dans une méthode spécifiant explicitement qu’elle peut renvoyer une exception : il faut inclure le mot clé throws, suivi du type d’exception renvoyée, dans la signature de la méthode. Exemple : public void setAge(int age) throws NegativeAgeException DU CODE NE RESPECTANT PAS CETTE RÈGLE NE COMPILE PAS !2013 - 2014 OFPPT/ EL KASSMI
Exemple31 Le constructeur de la classe java.io.PrintWriter est susceptible, par définition, de renvoyer une exception du type java.io.IOException. C’est pourquoi le code suivant ne peut pas être compilé. Il ne respecte pas le catch or specify requirement !2013 - 2014 OFPPT/ EL KASSMI
Solution 1 : gestion active avec try/catch322013 - 2014 OFPPT/ EL KASSMI
Solution 2 : gestion passive avec throws332013 - 2014 OFPPT/ EL KASSMI
Nature des exceptions en Java34 Hiérachie des exceptions : Les exceptions sont des objets comme les autres en Java (leur gestion mise à part) Il est donc possible de créer ses propres exceptions et de les lancer (throw) lors de l’exécution d’un programme. une exception est un objet qui hérite de la classe java.lang.Throwable Il existe deux sous-classes prédéfinies dans le JDK : java.lang.Error et java.lang.Exception les exceptions \"classiques\" sont des sous-classes de java.lang.Exception les exceptions sous-classes de java.lang.Error stoppent un programme lorsqu’elles sont lancées. (on ne s’en sert que très rarement).2013 - 2014 OFPPT/ EL KASSMI
Créer ses propres exceptions35 Création d’une nouvelle exception Pour créer sa propre classe d’exception, il suffit donc de créer une classe qui hérite de java.lang.Exception La plupart du temps, on crée une nouvelle exception pour gérer, par programmation (et non par message d’erreur), les utilisations incorrectes d’une méthode. et surtout prévenir l’utilisateur de la méthode que certaines utilisations sont incorrectes et qu’elles doivent être gérées explicitement.2013 - 2014 OFPPT/ EL KASSMI
Créer ses propres exceptions362013 - 2014 OFPPT/ EL KASSMI
Lancer une exception372013 - 2014 OFPPT/ EL KASSMI
Nouvelle utilisation de la méthode382013 - 2014 OFPPT/ EL KASSMI
La classe java.lang.Exception en détail39 Il est possible de personnaliser très simplement une exception grâce aux méthodes qui existent déjà dans la classe java.lang.Exception :2013 - 2014 OFPPT/ EL KASSMI
Personnalisation du message d’erreur40 La classe java.lang.Exception possède un constructeur qui permet d’initialiser le message qui sera obtenu :2013 - 2014 OFPPT/ EL KASSMI
Création d’un message d’erreur personnalisé412013 - 2014 OFPPT/ EL KASSMI
Instruction try/catch/finally42Le block finally est un block optionnel contenant des instructions quiseront toujours exécutées quelque soit le résultat du tryIl permet donc d’éviter d’écrire plusieurs fois le même code2013 - 2014 OFPPT/ EL KASSMI
Instruction try/catch/finally432013 - 2014 OFPPT/ EL KASSMI
Classes d’exceptions particulières44 La documentation de la classe java:lang:Integer indique que la méthode parseInt peut renvoyer l’exception java.lang.NumberFormatException . Pourtant le code suivant, qui semble ne pas respecter le catch, compile sans problème :2013 - 2014 OFPPT/ EL KASSMI
Classes d’exceptions particulières45 La documentation de la classe java:lang:Integer indique que la méthode parseInt peut renvoyer l’exception java.lang.NumberFormatException . Pourtant le code suivant, qui semble ne pas respecter le catch, compile sans problème :2013 - 2014 OFPPT/ EL KASSMI
Classes d’exceptions particulières46 En fait, il existe trois types d’exceptions différents :2013 - 2014 OFPPT/ EL KASSMI
Classes d’exceptions particulières472013 - 2014 OFPPT/ EL KASSMI
Classes d’exceptions particulières482013 - 2014 OFPPT/ EL KASSMI
Avantages liés aux exceptions49 Le principal avantage lié à l’utilisation du mécanisme d’exception est de permettre une séparation explicite entre la logique du programme et la gestion d’événements qui sortent de cette logique.Toutes ces instructions sont potentiellement source de problème ; ilfaut pouvoir les gérer.2013 - 2014 OFPPT/ EL KASSMI
Avantages liés aux exceptions502013 - 2014 OFPPT/ EL KASSMI
Search