Title: ENSTA : cours IN204 Introduction JAVA et UML
1ENSTA cours IN204 Introduction à JAVA et UML
- Thierry Bommart
- DASSAULT AVIATION
- DGT/DPR/EOS
- thierry.bommart_at_dassault-aviation.fr
- 01.47.11.54.93
2Plan du cours 6
- Petit historique et vue d'ensemble
- Réflexivité
- Principe, Philosophie, Pratique.
- Sérialisation
- But, Principe, exemples
- Des conteneurs les Collections
- Principes, Implémentations, Exemples
- Sécurité et le Système des ClassLoaders
- principes, cas d'utilisation
3JAVA?
- Un développement
- collégial..
- pour un spectre d'applications
- .immense !
4Petit historique.
- Anciennement OAK,
- projet Green chez Sun, Décembre 90, de 3 à 30
pers. - sujet
- convergence entre les appareils domestiques
- à contrôle numériques et les ordinateurs
- Comment ?
- mettre ensemble des technologies existantes
5 6- Résultat
- Un PDA couleur, sparc, wireless et réseau,
PCMCIA, - audio codecs, mini Unix, flash RAM, . Et...
- un nouveau langage
- objet, dynamique, hautes performances,
- neutre architecturalement, multi-thread, garbage
collecté, - interprété, robuste, distribué, sûr, et petit.
- Une librairie de classes graphiques
- (esprit télécomande TV intéractive)
- Un protocole de téléchargement d'objets actifs
- mises à jour, show-me-more etc...
7un spectre d'applications immense !
Réflexion sérialisation collections sécurité
Cours 6
Cours 9
Exceptions threads
Cours 10
communications
Cours 12
IHM
Cours 13
Java2D, 3D infrastructure
8La Réflexivité
9- Introspection
- Un objet peut être exploré sans être connu à
priori - Le JDK offre une API complète
- Exemples dutilisation
- Débuggers,
- Environnements danalyse, espions
- Beans..
- Moyens
- La Classe dun objet quelconque EST un objet
- Les Champs dune classe SONT des objets.
- Les méthodes d'une classe SONT des objets
- manipulables !!
10Philosophie de la réflexivité
1
Java.lang.reflect
Votre programme
un ObjetQuelconque
Objets méthodes
)
(
(
)
Objets attributs
2
Objet Classe de ObjetQuelconque
11Manipulations de base
Dans un source Java if (monObjet instanceof
MaClasse) Vérifie si l'objet monObjet est bien
du type (ou sous-type de) MaClasse méthode de
java.lang.Object public final Class getClass()
Renvoie la classe de l'objet (un objet de la
classe Class !) méthode de java.lang.Class
public String getName() Renvoie le nom dune
Classe
12Accès aux champs dun objet
- méthodes de java.lang.Class
- public Field getDeclaredFields()
- throws
SecurityException - Retourne un tableau des champs non hérités.
- Que peut on faire avec un Objet Field ?
- demander son nom String getName()
- demander son type Class getType()
- demander ses modifieurs int getModifiers()
- accéder en lecture et en écriture au contenu du
champ - xxx getxxx ou Object get(Object obj)
- void setxxx ou void set(Object obj, Object
value)
13Accès aux méthodes
- public Method getDeclaredMethods()
- throws
SecurityException - Retourne un tableau des Méthodes non héritées.
- Que peut on demander à un objet méthode ?
- demander son nom String getName()
- demander son type de retour Class
getReturnType() - demander le type (et le nombre) de ses paramètres
- Class getParameterTypes()
- On peut linvoquer
14Accès aux constructeurs et aux interfaces
- méthodes de java.lang.Class
- public Class getInterfaces()
- Retourne un tableau des Interfaces publiques
directes. - public Constructor getConstructors()
- throws
SecurityException - Retourne un tableau des Constructeurs publics.
15- java.lang.reflect contient et définit les Classes
- Field
- Array (création dynamique de tableaux)
- Method
- accès à la réflexivité
- sous contrôle du security manager.
16La sérialisation
17Quest-ce que cest ?
- Linéarisation
- (écriture de graphes dobjets sur disques,
bandes, tableau doctets, net..)
Bandes
disques
réseau
Graphe d'objets
18Comment ?
- classes de flux
- ObjectOutputStream flux de sérialisation
- ObjectInputStream flux de désérialisation
- interface serializable doit être implantée
(vide) pour être sérialisé
19Que stocke-t-on ?
- le nom et une clé (checksum) de la classe
- tous les champs (de données) sérialisables
20Exemple de code écriture
- Try
- FileOutputStream out new
FileOutputStream("leFichier.data") - ObjectOutputStream s new ObjectOutputStream(out
) - s.writeObject("Today")
- s.writeObject(new Date())
- s.flush()
- catch..
21Exemple de code lecture
- Try
- FileInputStream in new FileInputStream("leFichi
er.data") - ObjectInputStream s new ObjectInputStream(in)
- String today (String)s.readObject()
- Date date (Date)s.readObject()
-
- catch (java.lang.ClassNotFoundException
exc). - catch (StreamCorruptedException exc) .
- catch (IOException exc) ...
22Cohérence du graphe d'objets
- Cohérence du graphe d'objets reconstruit lors de
la relecture - gt
- Parcours récursif des références de l'objet
"racine" vers les objets référencés et écriture
de ceux-ci.
23Attention.
- Si quelque chose change dans vos
classes.(attributs en /en -, compilateur) - gt
- JAVA refusera de recharger vos "vieux" objets
sérialisés -gt mécanisme de protection par le
"serialUID"
24Les Collections
25- Formellement
- Collection ensemble
- 2 types Set (ensemble) et Map (couples
clef-valeur) - Exemples de Set
- Lettres de lalphabet, Mots réservés de Java,
Composants dans un Container - Exemples de Map
- Adresse IP ? nom DNS, Key -gt database records,
dictionnaire mots -gt signification..) - Intérêt
- Encapsule à la fois les structures ET les
algorithmes qui les manipulent...
26Hiérarchie des Interfaces
Collection
Map
duplications autorisées
Set
List
SortedMap
duplications interdites
duplications autorisées Index de position
SortedSet
27(No Transcript)
28Interface Collection
- Opérations de base ajout/retrait (un retrait ne
retire quun élément) - boolean add(Object element)
- boolean remove(Object element)
- Requêtes
- int size()
- boolean isEmpty()
- boolean contains(Object element)
- Iterator iterator() pour parcourir la collection
29- Autres opérations groupe
- 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
- (RuntimeException et pas Exception)
30- Iterator
- boolean hasNext()
- Object next()
- void remove() (enlève le dernier élément next())
- Exemple ditération
Collection collection Iterator iterator
collection.iterator() while(iterator.hasNext())
Object element iterator.next() if(removalCheck(
element)) Iterator.remove()
31Interface 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
32Exemple.
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
33Interface 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 changements sur les sous-listes (add, remove,
set..) ont un effet sur la liste dorigine.
34- ListeIterator nouveau type qui étend Iterator
avec parcours bidirectionnel
Exemple List list ListIterator iterator
list.listIterator(list.size()) while(iterator.has
Previous()) Object element iterator.previous()
// traitement de element...
35Deux 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
36Interface 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()
37Le tri
- 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
38- 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 objet1, Object objet2)
- Même signification que compareTo , méthode de
java.lang.Comparable
39Exemple
class Restaurant . // .. public class
GuideMichelin implements Comparator public
int compare(Object rest1, Object rest2) double
iqual1 (Restaurant)rest1.formuleMagique() doub
le iqual2 (Restaurant)rest2.formuleMagique() r
eturn (int) (iqual1 - iqual2)
.... //ailleurs ... List listeRestos
... GuideMichelin guide new GuideMichelin
() Collections.sort(listeRestos, guide)
cast
40Le Système des ClassLoaders
41Sécurité en Java
- Système des ClassLoaders ()
- Vérification des fichiers class avant exécution
- Mécanismes de sécurité dans la JVM
- Security manager () et lAPI Java.
- (1) et (2) customisables souplesse (au prix
dune certaine complexité).
42- Quest-ce quun ClassLoader ?
- Un programme java ensemble de classes chargées
à la demande... - QUI charge ?
- Le(s) ClassLoader(s)
- Un ClassLoader est écrit en JAVA
- Vous pouvez créer le vôtre.
43- Plusieurs ClassLoaders par défaut (JDK 1.2)
- bootstrap class loader
- Sert à charger au minimum les classes de l'API
java. - Localisation des données binaires laissée libre à
l'implémentation - Standard extensions class loader
- Sert à charger les extensions dans lib/ext
- user defined class loader
- Créé automatiquement
- Charge les classes en exploitant le CLASSPATH
- Hiérarchie
- ClassLoaders chaînés dans une relation de
délégation.
44Classloaders chaînés
bootstrap class loader
Charge les classes du runtime dans rt.jar
Standard extensions class loader
Charge les classes des jar dans lib/ext du JRE
user class loader
Charge les classes dans le chemin spécifié dans
la propriété java.class.path
network class loader
45- Etanchéité
- Plusieurs classes chargées par des classLoader
différents résident dans des espaces de noms
différents. - runtime package
- Ensemble de types qui appartiennent au même
package ET chargés par le même classLoader. - Exemple (sécurité)
- Aucun accès aux classes protected entre
java.lang.Virus (chargé par un userClassLoader)
et java.lang.Object (chargé par bootstrap
ClassLoader)) pas le même runtime package
46Namespace 1
Namespace 2
Avion
. . . Avion . . Moteur . .
. . . Voiture . . Moteur . .
Voiture
Moteur
Moteur
Types dans la zone des méthodes
Classloader 1
Classloader 2
47- Pourquoi écrire un autre ClassLoader ?
- Celui par défaut ne charge les classes QUE depuis
le système de fichier local. - Il peut être intéressant de charger des
classes... - depuis le réseau,
- en les trustant grâce à une clef
- en les décryptant, ou décompressant à la volée
- créées dynamiquement en fonction des besoins.
- Bref tous les cas où on crée du bytecode java
qui doit être intégré à votre application. - Deux exemples connus de ClassLoaders
customisés Appletviewer, Navigateurs.