Title: DEUG MIAS Option Info Introduction JAVA
1DEUG MIAS Option Info Introduction à JAVA
- Olivier Sigaud
- LIP6/AnimatLab
- olivier.sigaud_at_lip6.fr
- 01.44.27.88.53
2Plan du cours 8
- Exceptions
- Nature
- Emission / Capture dune exception
- Comment faire vos exceptions ?
- Des conteneurs les Collections
- Vector
- Set, Map, List
- Tri dans les collections
3Les Exceptions
4Prévoir les erreurs d'utilisation
- Certains cas d'erreurs peuvent être prévus à
l'avance par le programmeur. Deux exemples
typiques - Service de couche basse (I/O fichiers)
- Saisie de données par lutilisateur
- Le programmeur a trois options
- Planter le programme à lendroit où lerreur
est détectée - Manifester explicitement le problème à la couche
supérieure - Tenter une correction
5Les exceptions
- Exception situation particulière imposant une
rupture dans le cours dun programme erreur,
impossibilité - En JAVA, un objet Exception est une bulle
logicielle produite dans cette situation qui va
remonter la pile dexécution pour trouver une
zone de code apte à la traiter - Si cette zone nexiste pas, le programme sarrête
en affichant la pile dexécution. - Sinon, la zone de code sert à pallier au problème
(poursuite éventuelle, ou sortie commentée)
6Nature des exceptions
- En Java, les exceptions sont des objets ayant 3
caractéristiques - Un type
- Une chaîne de caractères (option) pour plus de
précision. - Un instantané de la pile dexécution au
moment de la création. - Les exceptions construites par l'utilisateur
étendent la classe Exception - RunTimeException, Error sont des exceptions et
erreurs standards gérées par Java (non
checkées )
7Arbre des exceptions
Throwable String (message d'erreur)
Error
Exception
OutOfMemoryError
RunTimeException
NullPointerException ClassCastException ...
VosExceptions...
8Emission d'une exception
- L'exception elle-même est levée par l'instruction
throw suivi de la création d'un objet du type de
l'exception - Une méthode susceptible de lever une exception
est identifiée par le mot-clé throws suivi du
type de l'exception Exemple - public void ouvrirFichier(String name) throws
FichierSansNomException -
- if (namenull) throw new FichierSansNomExceptio
n() - else
-
- ...
-
-
9Capture d'une exception
- Try et catch servent à capturer l'exception dans
la méthode appelante (attraper la bulle) - Exemple
- public void lireFichier(String name)
- try ouvrirFichier(name)
- catch(FichierSansNomException e)
- e.printStackTrace()
- System.exit(-1)
-
Si une erreur se produit ici.
Je la récupère là.
10Comment faire vos exceptions ?
- Rappel Faites les hériter de la classe
Exception et non pas de RunTimeException. - Sinon, les utilisateurs de votre code ne
prévoiront pas le traitement des erreurs (pas
derreur à la compilation...) - Cest une erreur de conception (Génie Logiciel)
11Créer une exception exemple
- Dans un fichier MonException.java
- class MonException extends Exception
-
-
- On peut difficilement faire plus simple !!!
12Exercice Vecteur et exception
- Dans la classe Vecteur développée lors des cours
précédents, ajouter une méthode Object get(int
index) dont le comportement est le suivant - Si l'index est à l'extérieur des bornes définies
pour la taille du vecteur, la méthode lève
l'exception NoSuchElementException - Sinon, elle renvoie l'objet stocké à la position
spécifiée par l'index
13Solution création de l'exception
- class NoSuchElementException extends Exception
-
14Solution suite
- /
- Renvoie le index_ième objet du vecteur
- _at_param index numéro de lObject cherché
- _at_return lObject trouvé ou null
- /
- public Object get(int index) throws
NoSuchElementException -
- if ((indexlt0) (indexgtsize)) throw new
NoSuchElementException() - else
- return dataindex
-
-
15Exercice (suite)
- Dans la classe Vecteur développée lors des cours
précédents, ajouter une méthode boolean add(int
index, Object o) dont le comportement est le
suivant - Si l'index est à l'extérieur des bornes définies
pour la taille du vecteur, la méthode lève
l'exception NoSuchElementException - S'il y a déjà un objet à l'index spécifié, la
méthode ne fait rien et renvoie false - Sinon, elle y place l'objet et renvoie true
16Solution méthode add()
- class Vecteur
- int size
- Object data
-
- public boolean add(int index, Object o) throws
NoSuchElementException - if ((indexlt0) (indexgtsize)) throw new
NoSuchElementException() - if (dataindex!null) return false
- else
- dataindexo
- return true
-
-
17Exercice (suite)
- Dans une classe Main, écrivez une méthode main()
qui - récupère un entier passé en argument au programme
et le stocke dans la variable "index", - crée un Vecteur doté de 10 cases, supposées
vides, - crée une Voiture de longueur 3.10m stockée dans
une variable v1 - tente de stocker v1 dans la case numéro index,
- Si la méthode add() réussit, récupère l'objet
dans une variable v2 de type Voiture.
18Solution classe Main
- class Main
- public static void main(String args)
- Vecteur v new Vecteur(10)
- int index args0.intValue()
- try
-
- Voiture v1 new Voiture(2.89)
- if (v.add(index,v1))
- Voiture v2 (Voiture) v.get(index)
-
-
- catch(NoSuchElementException e)
-
- System.out.println( lindex est erroné )
-
-
19La classe Vector
20Quid ?
- Fournit un tableau dobjets (de la classe Object)
dont la taille peut évoluer dynamiquement - Se crée avec une taille par défaut ou une taille
imposée - Alloue davantage de mémoire quand il se remplit à
coups de addElement() - Note a été considérablement étendu pour être
compatible avec les collections (Iterator,
Collection)
21Les Attributs
- capacityIncrement
- elementCount
- elementData
22Les Constructeurs
- Vector()
- Vector(Collection c)
- Vector(int initialCapacity)
- Vector(int initialCapacity, int
capacityIncrement)
23Les Ajouts
- add(int index, Object element)
- set(int index, Object element)
- add(Object element)
- addAll(int index, Collection c)
- addAll(Collection c)
- addElement(Object element)
- insertElementAt(Object element, int index)
- setElementAt(Object element, int index)
24Les suppressions
- remove(Object element)
- removeElement(Object element)
- removeAll(int index, Collection c)
- removeAllElements()
- remove(int initialCapacity)
- removeElementAt(int index)
- removeRange(int fromIndex, int toIndex)
25Les accès
- int size ()
- int capacity()
- boolean isEmpty()
- Object elementAt(int index)
- Object get(int index)
- Object firstElement()
- Object lastElement()
- Enumeration elements()
- int indexOf(Object element)
- int indexOf(Object element, int index)
- int lastIndexOf(Object element)
26Divers
- clear()
- Object clone()
- boolean isEmpty()
- boolean contains(Object element)
- boolean containsAll(Collection c)
- boolean retainAll(Collection c)
- List subList(int fromIndex, int toIndex)
- Object toArray()
- String toString()
27Les Collections
28Les Collections
- Formellement une collection est un ensemble
- 2 types Set (ensemble) et Map (couples
clef-valeur) - Exemples de Set
- Lettres de lalphabet, mots réservés de Java,
- Exemples de Map
- Adresse IP ? nom DNS,
- clef -gt enregistrement dans base de données,
- dictionnaire mots -gt signification
- Intérêt
- Encapsulent à la fois les structures ET les
algorithmes qui les manipulent...
29Fourni par Java
- Offert (1)
- Hiérarchie dinterfaces avec toutes les méthodes
possibles. - Offert (2)
- Implémentations performantes...
30Hiérarchie des Interfaces
Collection
duplications autorisées
Set
List
Map
duplications interdites
duplications autorisées Index de position
SortedMap
SortedSet
31Les implémentations
32Interface Collection
- Opérations de base
- ajout boolean add(Object element)
- retrait boolean remove(Object element)
- un retrait ne retire quun élément
- Requêtes
- int size()
- boolean isEmpty()
- boolean contains(Object element)
- Iterator iterator() pour parcourir la collection
33Iterator
- Méthodes
- boolean hasNext()
- Object next()
- void remove() (enlève le dernier élément next())
- Exemple
- Collection collection new ArrayList()
- Iterator iterator collection.iterator()
- while(iterator.hasNext())
- Object element iterator.next()
- if(removalCheck(element))
- iterator.remove()
-
34Autres opérations
- boolean containsAll(Collection collection)
- Optionnelles
- boolean addAll(Collection collection)
- void clear()
- void removeAll(Collection collection)
- void retainAll(Collection collection)
- Tout nétant pas implémenté
- UnsupportedOperationException
- Cest une RuntimeException et pas une Exception
35Interface Set
- Etend Collection mais duplications interdites
- (les implémentations concrètes utilisent la
méthode equals()) - Sous interface de Set
- SortedSet maintient un ordre dans ses éléments
- 2 implémentations concrètes
- HashSet ensemble simple
- TreeSet Collection ordonnée qui implémente
SortedSet
36Exemple.
import java.util. public class ExempleSet
public static void main(String args) Set set
new HashSet() set.add("Bernard")
set.add("Elisabeth") set.add("Gilles")
set.add("Elisabeth") set.add("Zebulon")
set.add("Clara") System.out.println(set) //
Bernard, Zebulon, Clara, Elisabeth,
Gilles Set sortedSet new TreeSet(set) System
.out.println(sortedSet) // Bernard,
Clara, Elisabeth, Gilles, Zebulon
37Interface List
- collection ordonnée, duplications autorisées,
opérations dindexation - Ajouts/retraits
- Insertion délément ou de collection,
consultation délément, retrait délément,
remplacement délément - Indexation
- Recherche délément avec retour dindex si
trouvé - Sous listes
- List sublist(int fromInInclus, int toInExclus)
- Les modifications des sous-listes (add, remove,
set) ont un effet sur la liste dorigine.
38ListeIterator
- Nouveau type qui étend Iterator avec parcours
bidirectionnel - Exemple
- List list
- ListIterator iterator list.listIterator(list.siz
e()) - while(iterator.hasPrevious())
- Object element iterator.previous()
- // traitement de element...
39Deux implémentations de List
- ArrayList
- Optimale pour gestion accès aléatoire, sans
ajout/retrait ailleurs quà la fin. - LinkedList
- Pour ajouts/retraits fréquents en milieu de
liste, accès séquentiels... - Six méthodes supplémentaires de gestion des
extrémités - addFirst(), addLast(), getFirst(), getLast(),
- removeFirst(), removeLast()
40Exemple de file dattente
LinkedList queue ... queue.addFirst(element) O
bject object queue.removeLast()
Exemple de pile FIFO
LinkedList stack ... stack.addFirst(element) O
bject object stack.removeFirst()
Vector et Stack sont des implémentations
historiques de List
41Usage de List
import java.util. public class ExempleList
public static void main(String args) List
list new ArrayList() list.add("Bernard")
list.add("Elisabeth") list.add("Gilles")
list.add("Elisabeth") list.add("Zebulon")
list.add("Clara") System.out.println(list)
// ---gt Bernard, Elisabeth, Gilles, Elisabeth,
Zebulon, Clara System.out.println("2 "
list.get(2)) // ---gt 2 Gilles System.out.printl
n("0 " list.get(0)) // ---gt 0 Bernard ...
42Usage de LinkedList
LinkedList queue new LinkedList() queue.addFirs
t("Bernard") queue.addFirst("Elisabeth") queue.a
ddFirst("Gilles") queue.addFirst("Elisabeth") qu
eue.addFirst("Zebulon") queue.addFirst("Clara")
System.out.println(queue) // ---gt Clara,
Zebulon, Elisabeth, Gilles, Elisabeth,
Bernard queue.removeLast() queue.removeLast() S
ystem.out.println(queue) // ---gt Clara,
Zebulon, Elisabeth, Gilles
43Interface Map
- Ensemble de relations clef - valeur, clef
unique - Opérations daltérations
- Object put(Object key, Object value)
- Object remove(Object key)
- void putAll(Map mapping)
- void clear()
- Requêtes
- Object get(Object key)
- boolean containsKey(Object key)
- boolean containsValue(Object value)
- boolean isEmpty()
- int size()
44Opérations de Map
- Conversion de groupes de clefs ou de valeurs sous
forme de Collections - public Set keySet() les clefs étant uniques, on
obtient un Set en retour - public Collection values() les valeurs pouvant
être répétées, on obtient une Collection en
retour - public Set entrySet() retourne un Set
déléments qui implémentent linterface - Map.entry un objet Couple
45Deux implémentations de Map
- HashMap
- Optimale pour insérer/retirer et tester la
présence déléments - TreeMap
- Parcours des couples clef-valeur suivant un
certain ordre - Il est plus rapide de tout entrer dans une
HashMap et de convertir en TreeMap
46Le tri dans les collections
47Le tri (1)
- Implantation du tri au cur du JDK 1.2
- Ex String et Integer implémentent linterface
java.lang.Comparable - Permet de décrire un ordre naturel
- Lors dun tri, appel de ...
- public int compareTo(Object element)
- lt 0 si this avant element
- gt 0 si this après element
- 0 si même position
48Le tri (2)
- Classe non prévue pour être Comparable ?
- Utilisation dun objet tiers qui prend en
charge la comparaison entre deux objets - Cet objet tiers doit implémenter
java.util.Comparator - public int compare(Object o1, Object o2)
- Même signification que compareTo(), méthode de
java.lang.Comparable
49Exemple (1)
public class GuideMichelin implements
Comparator public int compare(Object rest1,
Object rest2) double qual1 (Restaurant)rest1.e
valuation() double qual2 (Restaurant)rest2.eva
luation() return (int) (qual1 - qual2)
class Restaurant public Restaurant(String
s) public double evaluation() double
qualite return qualite
cast
50Exemple (2)
class Main public static void main(String
args) List listeRestos new
ArrayList() listeRestos.add(new
Restaurant( Tour dArgent )) listeRestos.add(n
ew Restaurant( Maxims )) listeRestos.add(new
Restaurant( Chez Mimile )) GuideMichelin
guide new GuideMichelin() Collections.sort(lis
teRestos, guide)
51Exercices
- Ecrire un programme qui remplit un ArrayList avec
10 nombres entiers aléatoires entre 0 et 100, les
trie puis les affiche dans l'ordre croissant - Ecrire un programme qui associe dix 10 nombres
entiers aléatoires entre 0 et 100 à dix chaînes
de caractères de "a" à "j" dans un TreeMap, trie
les couples selon les nombres, puis affiche les
chaînes dans l'ordre croissant des nombres
52Une overdose de Java ?