Prsentation PowerPoint - PowerPoint PPT Presentation

1 / 151
About This Presentation
Title:

Prsentation PowerPoint

Description:

D velopp par SunSoft pour r aliser le d veloppement de syst mes embarqu s ... Version actuelle : 1.2. Il contient : Un ensemble de classes de base regroup es en ... – PowerPoint PPT presentation

Number of Views:81
Avg rating:3.0/5.0
Slides: 152
Provided by: den887
Category:

less

Transcript and Presenter's Notes

Title: Prsentation PowerPoint


1
Intervenants Denis Marchal - Frédéric Moreau
Le langage JAVA
Année scolaire 2004-2005
2
Sommaire
  • Introduction à Java
  • La syntaxe
  • Les concepts Objet
  • Classes, méthodes, attributs
  • Héritage, polymorphisme, encapsulation
  • Les interfaces
  • Les classes de base
  • Les exceptions
  • Les entrées-sorties

3
Introduction à Java
4
Origine du langage
Introduction à Java
  • Développé par SunSoft pour réaliser le
    développement de systèmes embarqués
  • Projet Oak 
  • Évolution gérée par JavaSOFT (SunSoft)
  • Quelques liens
  • http//www.javasoft.com/
  • http//www.sunsoft.com/
  • http//www.developer.com/directories/pages/dir.jav
    a.htm/ (anciennement www.gamelan.com)
  • http//www.javaworld.com/
  • http//tips.iworld.com/ sélectionnez  Java 

5
Java est simple
Introduction à Java
  • Simplicité relative par rapport au C
  • Certains concepts du C à lorigine de nombreux
    bugs ont été supprimés
  • Pointeurs
  • Surcharge des opérateurs
  • Des études comparatives de développementsmontrent
    une diminution du coût de développement de 30 à
    35

6
Java est un langage objet
Introduction à Java
  • Java reprend des caractéristiques de différents
    langages à objets
  • La syntaxe du C
  • La gestion dynamique de la mémoire SmallTalk
  • Certains concepts de ADA et Objective C
  • Toute ligne de code JAVA se trouve
    obligatoirement dans une méthode à lintérieur
    dune classe
  • Java est un langage intermédiaire entre les
    langages statiques (C) et les langages
    interprétés (SmallTalk)
  • Nombreuses classes permettant le développement
    de systèmes répartis
  • Classes daccès aux ressources dun serveur Web

7
Java est robuste
Introduction à Java
  • Le compilateur Java est très strict
  • Contrôle de typage  fort 
  • Le compilateur vérifie que les erreurs sont
    traitées par le développeur
  • Si une erreur retournée par une méthode nest pas
    traitée, le programme ne compilera pas
  • La gestion de la mémoire nest pas à la charge du
    développeur
  • Garbage Collector ( ramasse-miettes)
  • Pas de pointeurs
  • Un débordement dindex dans un tableau provoque
    une erreur
  • La mémoire nest pas écrasée

8
JAVA est portable
Introduction à Java
  • Un code source Java est compilé pour générer un
    code assembleur virtuel le byte code
  • Ce code est conçu pour
  • Etre rapidement interprété
  • Etre optimisable au moment de son exécution
  • Etre facilement traduit en instructions
    assembleur lors de son exécution
  • Etre compact
  • en moyenne, une instruction byte code 1,8
    octet, RISC 4 octets
  • Etre vérifiable
  • Le byte code est exécuté par un logiciel la
    Machine virtuelle
  • La machine virtuelle est dépendante de la
    plate-forme

9
Java est performant !
Introduction à Java
Prog.java
Prog.java
Prog.java
Prog.class
Prog.class
Compilateur
MVJIT
MV
Code binaire
Code binaireen mémoire
Systèmedexploitation
Systèmedexploitation
Systèmedexploitation
10
JAVA est sécurisé
Introduction à Java
  • Le compilateur interdit toute manipulation en
    mémoire
  • Le Verifier contrôle que le byte code chargé dans
    la machine virtuelle est conforme
  • Le ClassLoader est responsable du chargement des
    classes dans le  SandBox . Il vérifie que la
    classe chargée nen écrase pas une autre en
    mémoire
  • Le SecurityManager contrôle les opérations
    dentrée/sortie locales et sur le réseau (Applet
    uniquement)
  • ?La portabilité de Java permet de déplacer
    dynamiquement du code Java sur un réseau

11
JAVA supporte le multi-threading
Introduction à Java
  • La gestion des multi-threads est intégrée dans
    lelangage et dans la Machine Virtuelle
  • Grande simplification
  • Java permet de synchroniser les threads

Multi-processus
Multi-thread
Mémoire
Mémoire
P1
P2
T1
T2
Synchronisation
Inter-process
12
Le JDK
Introduction à Java
  • Le JDK Java Development Kit
  • Ancienne version 1.0.2
  • Version actuelle 1.2
  • Il contient
  • Un ensemble de classes de base regroupées en
    packages
  • Interface utilisateur, conteneurs, gestion des
    threads, réseau
  • Des exécutables machine virtuelle, compilateur
  • Des bibliothèques permettant de coupler du Java
    et du C
  • Peut être téléchargé sur http//www.javasoft.com/
  • Il est gratuit

13
Les environnements de développement
Introduction à Java
  • Ils offrent des fonctions avancées
  • Éditeur évolué (couleur, autocorrection,
    présentation)
  • Assistance syntaxique
  • Générateur de code
  • Débugage
  • Environnement dexécution
  • Loffre actuelle
  • Jbuilder 4 (Inprise)
  • Visual J (Microsoft)
  • Visual Age (IBM)
  • Visual Cafe Pro

14
Les classes de base
Introduction à Java
  • AWT Abstract Window Toolkit
  • Classes dIHM boutons, listes, gestion
    générique de la géométrie, traitement des
    événements par abonnement, copier/coller,
    glisser/déplacer
  • Réseau
  • Sockets (serveurs, clients), Web (URL), Applet
  • Entrée-sortie
  • Fichier, Pipe, accès direct
  • Classes de base
  • Conteneurs, date, Chaîne de caractéres
  • RMI
  • Remote Method Invocation
  • Middleware objet 100 java

15
Les classes de base
Introduction à Java
  • JDBC
  • Accès aux bases de données relationnelles
  • Beans
  • Composant Java
  • Sécurité
  • Cryptage, identification, signature
  • Internationalisation
  • Format de date/heure
  • messages localisés
  • caractères UNICODE 2
  • JavaIDL
  • Support de CORBA

16
Hello Word
Introduction à Java
  • class Hello
  • int k 5
  • public static void main (String argv)
  • Hello hello new Hello()
  • for (int I 0 I lt hello.k I)
  • hello.SayHello()
  • public void SayHello()
  • System.out.println("Hello Java World !!! ")
  • Edit Hello.java
  • Javac Hello.java
  • Java Hello

17
La syntaxe
18
Constitution dun programme
La syntaxe
  • Un programme Java utilise un ensemble de classes
  • Les classes sont regroupées par package
  • Une classe regroupe un ensemble dattributs et de
    méthodes

Package
Classe
Attributs
Méthodes
19
Déclaration dune classe
La syntaxe
  • Le nom de la classe est spécifié derrière le mot
    clé  class 
  • Le corps de la classe est délimité par des
    accolades
  • On définit dans le corps les attributs et les
    méthodes qui constituent la classe

class Test lt corps de la classe gt
20
Définition dun méthode
La syntaxe
  • Une méthode est constituée de
  • Dun nom
  • Dun type de retour
  • De paramètres (éventuellement aucun)
  • Dun bloc dinstructions
  • Un paramètre est constitué
  • Dun type
  • Dun nom
  •  void  est le mot-clé signifiant que la méthode
    ne renvoie pas de valeur

class Test int calculer (int taux, float
delta) lt corps de la méthode gt
21
Bloc dinstructions
La syntaxe
  • Un bloc dinstructions est délimité par des
    accolades
  • Il contient un ensemble dinstructions
  • Toute instruction est terminée par un point
    virgule
  • Un bloc dinstructions peut contenir dautres
    blocs dinstructions

int i 0 if (i0)
System.out.println ("Valeur de i " i)
22
Instructions possibles
La syntaxe
  • Déclaration dune variable
  • Appel de méthode
  • Affectation
  • Instruction de boucle (while, for)
  • Instruction de test (if, switch)

23
Corps dune méthode
La syntaxe
  • Le corps dune méthode est un bloc dinstructions
  • Le mot clé  return  permet de renvoyer une
    valeur à lappelant de la méthode
  • Il doit renvoyer une valeur du même type que le
    type de retour de la méthode

class Test int calculer (int taux, float
delta) return taux delta
24
Déclaration dune variable
La syntaxe
  • Une variable possède un type et un nom
  • Le type peut être un type de base ou une classe
  • Linitialisation dune variable peut se faire au
    moment de la déclaration

int compteur int indice 0 Voiture
golf Voiture twingo new Voiture()
25
Portée dune variable
La syntaxe
  • La portée dune variable sétend jusquà la fin
    du bloc dans lequel elle est définie

int compteur // compteur est
accessible // compteur nest plus
accessible
26
Nom de classes, de variables et de méthodes
La syntaxe
  • Un nom peut être constitué de lettres, de
    chiffres et du caractère souligné
  • Il ne peut pas commencer par un chiffre
  • Le caractère est utilisable mais à éviter
  • Les mots réservés (if, class, int) ne peuvent
    pas être utilisés
  • Les développeurs ont défini un consensus de
    nommage
  • Les mots du langage sont en minuscule
  • Les noms de classe commencent par une majuscule
  • Les noms de méthodes et de variables comment par
    une minuscules
  • Chaque mot qui compose le nom commence par une
    majuscule

27
Point dentrée
La syntaxe
  • Une application possède un point dentrée fourni
    par la méthode  main  (sauf les applets)
  • Attention à la casse, Java est sensible aux
    majuscules/minuscules

class Test public static void main (String
args)) // corps de la méthode main

28
Les différents types de base (1/2)
La syntaxe
  • Types arithmétiques
  • Type caractère
  • Type booléen

29
Les différents types de base (2/2)
La syntaxe
  • Les types de base sécrivent en minuscules (int,
    float..)
  • Le type  int  est codé sur 4 octets ?
    portabilité
  • Le type  char  est codé sur 2 octets pour
    supporter les jeux de caractères Unicode
  • Une chaîne de caractères est déclarée avec le
    mot-clé  String 
  • Ce nest pas un type de base
  • Il se manipule comme un type de base
  • Ce nest pas équivalent à un tableaux de
    caractères

String s "Hello World"
30
Laffectation
La syntaxe
  • Lopérateur     permet daffecter la valeur de
    lexpression qui est à droite à la variable qui
    est à gauche

class Test int calculer () int i
0 int j 6 i (j 5) 3 return i j

31
Les opérateurs arithmétiques
La syntaxe
  • Sappliquent sur les types entiers ou réels
  • , - , , / , (modulo) , , - , , /
  • Les opérateur et peuvent être utilisés sur
    des variables de type  String 
  • En terme de performance, il est recommandé
    dutiliser la notion raccourcie

int x, y, z y 2 z 3 x y z //x
vaut 6 x 2 //x vaut 8 y x / 4 //y
vaut 2 y x 2 //y vaut 0
32
Opérateurs unaires
La syntaxe
  • Sappliquent à un seul opérande de type entier ou
    réel
  • -, --, ,
  • La pré et la post-incrémentation diminuent le
    nombre de lignes de byte code générées

int x, y x 3 y -x //y vaut -3 y x
//y vaut 4, x vaut 4 y x-- //y vaut
4, x vaut 3
33
Opérateurs de comparaison
La syntaxe
  • Sappliquent sur des entiers, booléens, réels
    , !, lt, gt, gt
  • Ces opérateurs retournent une valeur du type
    boolean

boolean droitDeVote int age
droitDeVote (age gt 18)
34
Opérateurs logiques
La syntaxe
  • Sappliquent au type boolean
  • ! (not) , (and) , II (or)
  • , I
  • Retournent un type boolean
  • renvoie  true  si les deux expressions
    renvoient  true 
  • a le même comportement mais névalue pas le
    seconde expression si la première est  false 
  • renvoie  true  si lune des deux expressions
    renvoie  true 
  • a le même comportement mais névalue pas le
    seconde expression si la première est  true 

35
Les conversions de type (1/2)
La syntaxe
  • Il y a 4 contextes possibles de conversion (cast)
  • Conversion explicite
  • Affectation
  • Appel de méthode
  • Promotion arithmétique
  • Certaines conversions provoquent une perte de
    valeur
  • Float en int, int en short, short en byte
  • Le type boolean ne peut pas être converti en
    entier

36
Les conversions de type (2/2)
La syntaxe
  • double f 3.14
  • int i,j
  • short s
  • i (int)f // float ? int (conversion
    explicite)
  • float ff (float)3.14
  • i s // short ? int (affectation)
  • // appel de la méthode int obj.m(int i)
  • obj.m(s) // short ? int (appel de méthode)
  • // division dun entier et dun flottant
    lentier i est
  • // converti en flottant, puis la division
    flottante est calculée
  • f i / (double)j // f vaut 0.3333

37
Test conditionnel
La syntaxe
  • class Test
  • public static void main (String args)
  • int compteur 0
  • boolean debut
  • if (compteur 0)
  • debut true
  • System.out.println("Début de la partie")
  • else if (compteur 10)
  • System.out.println("Fin de la partie")
  • else
  • System.out.println("Partie en cours")

38
Boucles while
La syntaxe
  • class Test
  • public static void main (String args)
  • int i
  • do
  • System.out.println("Entrez un nombre lt 10")
  • c lireUnInt()
  • while (cgt10)
  • while (cgt0) afficher (c--)
  • public static int lireUnInt()
  • public static void afficher (char c)

39
Boucles for
La syntaxe
  • class Test
  • public static void main (String args)
  • int i
  • for (i0 i lt5 i)
  • System.out.println (i)
  • for (j0 j lt5 , j)
  • System.out.println (i)
  • // i est accessible
  • // j nest pas accessible

40
Switch
La syntaxe
class Test public static void main (String
args) char c (char)System.in.read() s
witch(c) case o case O
System.out.println("Oui") break case
n case N System.out.println("Non")
break default System.out.println("Mauv
aise réponse") break
  • Le  switch  ne sapplique quau type entier ou
    caractère.

41
Commentaires (1/2)
La syntaxe
  • Lutilisation de commentaires est fortement
    recommandé
  • /ceci est un commentaire sur plusieurs lignes
    /
  • //ceci est un commentaire sur une ligne
  • Javadoc (fourni dans le JDK) génère la
    documentation des classes en au format HTML
  • / début de commentaire Javadoc
  • _at_author exemple de tag auteur
  • / fin de commentaire Javadoc

42
Les tableaux description
La syntaxe
  • Nombre fixe déléments. Taille fixée à la
    construction
  • Les éléments sont de même type (type de base ou
    classe)
  • Les tableaux sont alloués dynamiquement par
     new 
  • Un tableau est détruit lorsquil nest plus
    référencé
  • Les tableaux multi-dimensionnels sont des
    tableaux de tableaux

43
Les tableaux syntaxe
La syntaxe
  • 2 syntaxes pour lallocation
  • Une méthode peut renvoyer un tableau

int monTableau new int10 int
monTableau new int10
classe Test int construireTableau (int
dimension) int tab new intdimension r
eturn tab
44
Les tableaux initialisation
La syntaxe
  • Lattribut  length  renvoie la dimension du
    tableau
  • Lindice des éléments du tableaux varie de 0 à
     tableau.length 1 
  • Initialisation statique
  • Initialisation dynamique

int monTableau 1, 2, 3
int param new int10 for (int i 0 i lt
param.lenght i) parami i
45
Les concepts Objet
46
Les concepts de base
Les concepts Objet
  • Les concepts de base de lobjet sont simples et
    peu nombreux
  • Objet et Classe
  • Encapsulation
  • Généralisation/Spécialisation
  • Polymorphisme
  • Ces concepts impactent directement sur la
    qualité, les délais et les coûts de développement
    et de la maintenance des logiciels
  • Il existe de nombreux autres concepts, mais non
    fondamentaux
  • Les concepts de base sont simples, mais leur
    utilisation sur un projet demande de lexpérience

47
Quest-ce quun objet ?
Les concepts Objet
  • Cest une abstraction dune entité du monde réel

Monde réel
Modèle
Simulateurde circulation
Voiture
Abstraction
Voiture
Abstraction
Boîte
Moteur
Conception de voiture
48
La généralisation / spécialisation (1/2)
Les concepts Objet
  • Généralisation recherche des similitudes
  • Identifier les objets du monde réel connus par le
    système
  • Regrouper les objets en classes
  • Généraliser les classes en super classes
  • Règle dor en cas de doute sur la pertinence
    dune classe, il est préférable de ne pas la
    définir
  • La généralisation est caractérisé par
    lexpression  est un type de 

49
La généralisation / spécialisation (2/2)
Les concepts Objet
Classesabstraites
Moyen de transport
ltltextendsgtgt
Classesconcrètes
Monde réel
50
Attribut, Opération, Identité ?
Les concepts Objet
  • Attribut valeur portée par un objet
  • Opération service rendu par lobjet
  • Synonyme Méthode, Service
  • Identité un objet doit être identifiable
  • Concept équivalent pour les SGBDR clef primaire

51
Attribut, Opération, Identité (2/2)
Les concepts Objet
  • Une classe décrit les Attributs, les Opérations
    et lIdentité de ses objets

Instance de
Instance de
52
Accès aux attributs et invocation des méthodes
Les concepts Objet
  • Laccès aux attributs et aux méthodes définis
    dans la classe se fait à partir dun objet
  • Un objet est une instance de classe
  • Il possède des valeurs propres pour les attributs
    définis dans la classe

Voiture clio // Déclaration dune variable
clio new Voiture() // Création de lobjet
clio.couleur  rouge  // Accès à lattribut
clio.demarrer() // Appel de la méthode
53
Définition dune méthode ltgt invocation dune
méthode
Les concepts Objet
class Voiture // Définition de la
classe float vitesse float
consommation void accelerer (float delta)
consommation consommation delta /
10 vitesse vitesse delta
// Utilisation dun objet Voiture
clio new Voiture() clio.accelerer(20)
Définition du paramètre
Passage du paramètre
54
Les Associations (1/2)
Les concepts Objet
  • Lassociation est le lien qui peut exister entre
    objets de différentes classes pour leur permettre
    de communiquer
  • Deux objets sont associés si
  • Un objet connaît lidentité et la classe dun (ou
    de plusieurs) autre objet
  • Il existe un type particulier dassociation nommé
    Agrégation ou Composition
  • Association se lisant  Est formée par
    lassemblage de  ou  Contient 

55
Les Associations (2/2)
Les concepts Objet
  • Lecture du modèle UML
  • Une personne peut posséder entre 0 et n voitures
  • Toute voiture possède un propriétaire
  • Une voiture est formée de 4 roues et dune
    carrosserie

lt-possède
Voiture
0..
propriétaire
4
Carroserie
56
Lhéritage
Les concepts Objet
  • Mécanisme provenant dune relation de
    Généralisation/Spécialisation
  • Une sous-classe hérite des attributs, méthodes et
    associations de ses super classes

57
Quest-ce que lencapsulation ?
Les concepts Objet
  • Un mécanisme permettant de masquer les choix
    dimplémentation
  • Permet de changer limplémentation sans incidence
    sur le reste du système si linterface nest pas
    modifiée
  • Un objet possède une interface publique et une
    implémentation privée
  • Chaque objet est un mini-serveur ? mise en place
    de systèmes distribués via CORBA ou DCOM

implémentation
interface
58
Quest-ce que la collaboration ?
Les concepts Objet
  • Un objet utilise les services dautres objets
  • Les objets collaborent
  • Chaque objet est mini-serveur et client dautres
    objets

Voiture
Demarrer()
Feu
changer (Vert)
Velo
Demarrer()
59
Quest-ce que le polymorphisme ?
Les concepts Objet
  • Propriété pour un même message de déclencher des
    méthodes différentes

- Débrayer- Passer la première- Accélérer-
Embrayer
Voiture
Demarrer()
Feu
changer (Vert)
Velo
  • Pédaler

Demarrer()
60
Résumé
Les concepts Objet
  • Les concepts fondamentaux
  • Classe, Objet
  • Généralisation/Spécialisation (héritage)
  • Encapsulation
  • Polymorphisme
  • Ces concepts ont un impact direct sur
  • La qualité du système
  • Le coût de développement et de maintenance
  • Le délai du développement et de maintenance
  • Si les concepts de base sont simples, leur
    utilisation nécessite de lexpérience

61
Classes,méthodes, attributs
62
Déclarer une classe
Classes,méthodes, attributs
  • Une classe  public  est visible en dehors du
    package
  • Par défaut, elle nest pas visible
  • On ne peut pas mettre 2 classes publiques dans un
    fichier ? erreur de compilation
  • Une classe  final  ne peut pas être dérivée
    (pas de sous-classes)
  • Utile pour des raisons de sécurité et de
    performances
  • De nombreuses classes du JDK sont  final 
  • Une classe  abstract  ne peut pas être
    instanciée (new)

63
Déclarer un attribut (1/3)
Classes,méthodes, attributs
  • Lors de la création dun objet, les attributs
    sont initialisés par défaut
  • À zéro pour les valeurs numériques
  • À  null  pour les références
  • À  false  pour les booléens
  • Les attributs peuvent être initialisés
  • Lors de la déclaration
  • Dans le constructeur
  • Utiliser des règles de nommage cohérentes
  • Le noms des classes commence par une majuscule
  • Lidentification dun attribut ou dune méthode
    commence par une minuscule

64
Déclarer un attribut (2/3)
Classes,méthodes, attributs
  • La valeur dun attribut déclaré comme  static 
    est partagée par toutes les instances (objets) de
    la classe
  • La valeur dun attribut déclaré comme  final 
    est constante

65
Déclarer un attribut (3/3)
Classes,méthodes, attributs
class Date int _jour // initialisé à
0 int _mois 1 // initialisation
explicite int _an 2000 final static int
max_mois 12 //Constante void print ()
System.out.println(_jour "/"  _mois "/"
_an) Date d new Date() //
instantiation de lobjet d.print() // appel de
la méthode print
66
Le passage de paramètres
Classes,méthodes, attributs
  • Lors de lappel dune méthode prenant en
    paramètre des types de bases, les paramètres sont
    passés par valeur
  • La valeur des variables passées en paramètres est
    dupliquée
  • Ce sont ces valeurs dupliquées qui sont
    manipulées dans la méthode
  • Lors de lappel dune méthode prenant en
    paramètre des objets, les paramètres sont passés
    par référence
  • Ils peuvent être modifiés dans la méthode

67
Surcharge (1/3)
Classes,méthodes, attributs
  • Une méthode surchargée est une méthode qui peut
    être appelée avec plusieurs ensembles de listes
    de paramètres
  • Permet décrire plusieurs versions dune méthode
  • Exemple
  • void print ()
  • void print (int i)
  • int print (float f)
  • Le type du paramètre de retour nest pas pris en
    compte par le mécanisme de résolution de surcharge

68
Surcharge (2/3)
Classes,méthodes, attributs
  • A lappel, Java détermine quelle est la méthode
    dont la liste des paramètres est la plus proche
    des paramètres effectivement envoyés par
    lappelant
  • Si aucune signature de méthode ne correspond au
    valeurs envoyées, la machine virtuel Java est
    capable de convertir une valeur envoyée dans le
    type du paramètre
  • Java détermine le coût des conversions possibles
    et choisit le coût le moins élevé. Si le coût
    global de conversion dépasse 10, Java refuse
    lappel

69
Surcharge (3/3)
Classes,méthodes, attributs
Coût des conversions
vers
de
70
Constructeurs
Classes,méthodes, attributs
  • Cest une ou plusieurs méthode(s) permettant
    dinitialiser les objets
  • Le constructeur est appelé lors de la création de
    lobjet
  • Le constructeur a le même nom que la classe
  • Il na pas de valeur de retour (void est un type
    de retour)
  • Le constructeur peut être surchargé
  • Java fournit un constructeur par défaut (sans
    paramètres) si aucun constructeur nest défini
    explicitement

71
Exemple de constructeurs
Classes,méthodes, attributs
class Date int _jour 1 int _mois
1 int _an 2000 Date() _an
1999 Date (int jour, int mois, int an)
_jour jour _mois mois _an
an Date d new Date(10,12,2000) //
instantiation de lobjet
72
Création dobjets
Classes,méthodes, attributs
  • Allocation de lespace mémoire pour stocker les
    variables dinstances
  • Utilisation de lopérateur  new 
  • Appelle du constructeur adéquat
  • Retourne une référence sur lobjet créé

class Voiture // Définition de la
classe String _type Voiture (String type)
_type type void demarrer ()
Voiture clio new Voiture("ClioRT") //
Création de lobjet Voiture renault clio //
Ajout dune référence sur lobjet renault.demarrer
()
73
Le Garbage Collector (ramasse-miettes)
Classes,méthodes, attributs
  • Il prend en charge la gestion de la mémoire
  • Il alloue lespace mémoire lors de la création
    des objets
  • Il libère la mémoire occupé par un objet dès
    quil ny a plus aucune référence qui pointe vers
    cet objet
  • Il est capable de compacter la mémoire pour
    éviter la fragmentation
  • Cest un  Thread  de la machine virtuel Java

74
 this 
Classes,méthodes, attributs
  •  this  référence sur lobjet courant
  • Représente linstance courante en train de
    sexécuter

class Compte void crediter(float montant)
void debit(float montant)
class Versement void valider() void
effectuer(Compte s, Compte d, float montant)
s.debiter(montant) d.crediter(montant) t
his.valider()
75
Utilisation de  this  dans un constructeur
Classes,méthodes, attributs
class Personne String _nom String
_prenom float _taille Personne(String nom,
String prenom) _nom nom _prenom
prenom Personne(String nom, String prenom,
float taille) this(nom, prenom) _taille
taille
76
 null 
Classes,méthodes, attributs
  • La valeur  null  peut être assignée à nimporte
    quelle référence sur un objet
  • Une méthode peut retourner  null 
  • Lappel dune méthode sur une référence dobjet
    valant  null  provoque une erreur dexécution
    (NullPointerException)
  • On peut tester une référence pour savoir si elle
    vaut  null 

Personne moi new Personne() if (moi !
null) System.out.println("Jexiste toujours !
")
77
Opérateurs sur les références
Classes,méthodes, attributs
  • Egalité de deux références
  • Compare si 2 références pointent vers le même
    objet
  • Différence de deux références !
  • Compare si 2 références pointent vers des objets
    différents
  • Type dinstance de la référence instanceof
  • Permet de savoir si lobjet référencé est une
    instance dune classe donnée ou dune de ses
    sous-classes

Personne moi new Personne() if (moi
instanceof Personne) System.out.println("Je
suis bien une personne! ")
78
Méthodes  static 
Classes,méthodes, attributs
  • Le mot-clé  static  permet de définir une
    méthode comme statique
  • Une méthode statique ne peut accéder quaux
    attributs de la classe déclarés comme  static 
  • Lappel dune méthode statique ne se fait pas sur
    un objet, mais sur une classe
  • Exemple Math.cos(3.14)
  • Lutilisation dune méthode statique ne nécessite
    pas la création dun objet

79
Exemple de méthode  static 
Classes,méthodes, attributs
class MathUtil final static double _PI 3.14
static double PI() return
_PI static double Carre(double x)
return x x static double Demi(double
x) return x / 2 double i
MathUtil.Carre(5) double x MathUtil.PI()
80
Héritage, polymorphisme, encapsulation
81
Héritage (1/2)
Héritage, polymorphisme, encapsulation
  • Toute classe Java est une sous-classe de la
    classe  Object 
  • Java ne permet pas lhéritage multiple
  • La classe dérivée peut changer limplémentation
    dune ou plusieurs méthodes héritées
    redéfinition
  • Il est possible de faire en sorte que lon ne
    puisse pas hériter dune classe en particulier
    utilisation du mot-clé  final 
  • Il est possible de faire en sorte quune méthode
    ne puisse pas être redéfinie utilisation du
    mot-clé  final 

82
Héritage (2/2)
Héritage, polymorphisme, encapsulation
class Felin boolean a_faim true void
parler() void appeler()
System.out.println("minou minou,") if
(a_faim) parler() final class Chat
extends Felin String race void parler()
System.out.println("miaou! ") final class
Lion extends Felin void parler()
System.out.println("roar! ") void chasser()

83
Conversion entre classes
Héritage, polymorphisme, encapsulation
  • Si une variable référence un objet dune classe,
    elle peut référencer un objet de nimporte
    laquelle de ses sous-classes

class Felin class Lion extends Felin
Lion lion new Lion() Felin
felin felin lion // OK conversion implicite
les lions // sont des félins lion
felin // ERREUR tous les félins ne sont
pas // des lions
84
Conversion ascendante, conversion descendante
Héritage, polymorphisme, encapsulation
class Felin class Lion extends Felin
Felin felin new Felin() Lion lion
new Lion() felin lion // Conversion
ascendante felin.parler() //  roar ! 
felin.chasser() // Méthode introuvable lion
felin // ERREUR conversion explicite
nécessaire lion (Lion)felin // Conversion
descendante explicite lion.parler() //  roar
!  lion.chasser() // OK Chat chat new
Chat() felin chat // Conversion ascendante
lion (Lion)felin // ERREUR java ClassException
85
Polymorphisme (1/2)
Héritage, polymorphisme, encapsulation
  • Une méthode polymorphe est une méthode déclarée
    dans une super-classe et redéfinie dans une
    sous-classe
  • Une méthode Java st par défaut polymorphe
  • Les méthodes  final  ne peuvent pas être
    redéfinies
  • Permet à la machine virtuel doptimiser le
    byte-code
  • Est utilisé pour des raisons de sécurité

86
Polymorphisme (2/2)
Héritage, polymorphisme, encapsulation
class Cirque Felin f_list new
Felin3 Cirque() f_list0 new
Lion() f_list1 new Chat() f_list2
new Tigre() void appeler() for (int i
0 ilt3 i) Felin f f_listi
f.parler()
87
Super (1/2)
Héritage, polymorphisme, encapsulation
  • Le mot-clé  super  permet daccèder aux
    méthodes et aux attributs de la super-classe
  •  super  est utilisé dans le constructeur de la
    classe dérivée pour appeler celui de la
    super-classe
  • Cela permet de factoriser du code
  •  super()  doit être la première instruction du
    constructeur

class Felin int _nbPattes Felin(int
nbpattes) _nbPattes nbPattes class
Chat Chat() super(4) race
"goutière"
88
Méthodes et classes abstraites
Héritage, polymorphisme, encapsulation
  • Une méthode abstraite est une méthode dont on
    donne la signature sans en décrire
    limplémentation
  • Le mot-clé  abstract  permet dindiquer quune
    méthode doit être redéfinie dans une sous-classe
  • Une classe abstraite ne peut pas être instanciée
  • Le mot-clé  abstract  permet de bloquer
    linstanciation
  • Une classe possédant une méthode abstraite est
    abstraite

abstract class Felin abstract void parler()
class Chat extends Felin void
parler() System.out.println("miaou ! ")
Felin f new Felin() // Ne compile pas
89
Les packages définition (1/2)
Héritage, polymorphisme, encapsulation
  • Un package est une bibliothèque de classes
  • On regroupe les classes dun même domaine dans un
    package
  • Les packages sont organisés hiérarchiquement
  • La notion de package apporte un niveau
    dencapsulation supplémentaire

90
Les packages définition (2/2)
Héritage, polymorphisme, encapsulation
  • Les classes du JDK sont classées dans des
    packages
  • Java importe automatiquement le package
     java.lang  qui contient des classes comme
     Thread  ou  System 

java
awt
lang
util
net
event
String.classThread.class
Date.classVector.class
Socket.classURL.class
Button.classList.class

91
Les packages utilisation (1/2)
Héritage, polymorphisme, encapsulation
  • Il y a 2 manières dutiliser une classe stockée
    dans un package
  • Utilisation du nom complet
  • Importer une classe ou toutes les classes du
    package

java.util.Date dateDuJour new
java.util.Date() System.out.println(dateDujour)
import java.util.Date Date dateDuJour new
Date() System.out.println(dateDujour)
import java.util. Date dateDuJour new
Date() System.out.println(dateDujour)
92
Les packages utilisation (2/2)
Héritage, polymorphisme, encapsulation
  • Le mot-clé  package  permet de définir un
    nouveau package
  • La hiérarchie des packages correspond à la
    hiérarchie des répertoires

//fichier Compte.java dans le répertoire Finance
package finance public class Compte
//Fichier Client.java dans le répertoire de
lapplication import finance. public class
Client Compte c new Compte()
93
La variable CLASSPATH
Héritage, polymorphisme, encapsulation
  • Le compilateur utilise la variable
    denvironnement CLASSPATH pour localiser les
    classes dun package sur le disque
  • Cette variable doit référencer tous les
    répertoires ou fichiers dans lesquels sont
    susceptibles de se trouver des classes Java
  • On a le droit de placer les classes dans des
    archives (zip, jar, cab)
  • Dans ce cas, la variable CLASSPATH doit
    référencer le fichier
  • La hiérarchie des classes des packages doit être
    respectée

94
Classes publiques
Héritage, polymorphisme, encapsulation
  • Le mot-clé  public  permet de définir une
    classe comme publique
  • Seules les classes  public  sont accessibles
    depuis lextérieur du package
  • Chaque fichier java doit contenir au maximum une
    classe  public 
  • Cette classe doit porter le nom du fichier dans
    lequel elle est définie (en respectant les
    majuscules/minuscules)
  • Les classes  non public  ne sont utilisables
    quà lintérieur du fichier dans lequel elles
    sont définies

95
Visibilité - Encapsulation
Héritage, polymorphisme, encapsulation
  • Permet de distinguer les services offerts
    (interface) de limplémentation
  • Lencapsultation des classes Java est définie au
    niveau du package
  • ILencapsulation agit au niveau des classes et
    non des objets
  • Un attribut  private  dans un objet sera
    accessible depuis une autre objet de la même
    classe
  • Il y a 4 niveaux de visibilité public, private,
    protected, friendly (valeur par défaut)

96
Règles de visibilité
Héritage, polymorphisme, encapsulation
97
Règles de visibilité
Héritage, polymorphisme, encapsulation
  • Pour une bonne encapsulation, il est préférable
    de définir les attributs comme  private 
  • On définit alors des méthodes publiques 
    (accesseurs) permettant de lire et/ou de modifier
    les attributs
  • Si un accesseur retourne une référence sur un
    objet, rien nempêche la modification de cet
    objet à travers cette référence ? cela brise
    lencapsulation

class Personne private Vector children new
Vector() public Vector getChildren() return
children Personne moi new
Personnes() Vector v moi.getChildren()
v.addElement(new Personne("Paul")
Rupture delencapsulation
98
Encapsulation des constantes
Héritage, polymorphisme, encapsulation
class EtatPorte // Classe non
publique public final static EtatPorte OUVERTE
newEtatPorte() public final static EtatPorte
FERME newEtatPorte() // Empeche la création
dun nouvel objet private EtatPorte()
public class Porte // Classe publique private
EtatPorte etat EtatPorte.FERMEE public void
ouvrir() etat EtatPorte.OUVERTE public
estOuverte() return (etat
EtatPorte.OUVERTE)
99
Les interfaces
100
Définition
Les interfaces
  • Une interface définit un ou plusieurs services
    offerts
  • Elle est composée dun ensemble de méthodes
    abstraites et de constantes ( static  et
     final )
  • Une classe peut implémenter une ou plusieurs
    interfaces
  • Elle doit fournir une implémentation pour chaque
    méthode

interface Printable void print() class
Point extends Object implements Printable
private double x, y void print()
System.out.println(x) System.out.println(y)

101
Héritage multiple dinterface
Les interfaces
  • Une interface peut hériter dune ou plusieurs
    autres interfaces
  • Java supporte lhéritage multiple dinterface
  • Une classe peut implémenter plusieurs interfaces

interface Printable void print() interface
Persistent void save() interface SGBD
extends Persistent void connect() class
Point implements Printable , SGBD private
double x, y void print() void save()
void connect()
102
Interfaces et types
Les interfaces
  • Une interface définit un nouveau type
  • Des objets différents peuvent répondre au même
    message à condition quils implémentent la même
    interface
  • Lopérateur  instanceof  peut être utilisé pour
    savoir si un objet implémente une interface donnée

Point point new Point() if (point
instanceof Printable) point.print()
103
Variables dinterfaces
Les interfaces
  • Les variables déclarées dans une interface sont
    des constantes
  • Les mots clés  static  et  final  ne sont pas
    nécessaires
  • Les variables des interfaces doivent
    obligatoirement être initialisées

interface MyInterface int MIN 0 int MAX
100 int i MyInterface.MAX
104
Quand utiliser les interfaces ?
Les interfaces
  • Pour définir des services techniques
  • Pour contourner le fait que Java ne supporte pas
    lhéritage multiple
  • Interface vs Héritage
  • On utilise lhéritage quand un objet est un
    sous-type dun autre
  • On utilise une interface pour décrire le fait
    quune classe implémente un service particulier

Personne
Persistent
extends
implements
Client
105
Conception par contrat (1/4)
Les interfaces
  • Exemple on définit les classes  Client ,
     Banque  et  Compte 

0..
0..
106
Conception par contrat (2/4)
Les interfaces
  • Le  Client  et la  Banque  ont des points de
    vue différents sur un  Compte . Ils nutilisent
    pas les mêmes méthodes
  • ? On définit des contrats différents

implements
implements
0..
0..
107
Conception par contrat (3/4)
Les interfaces
  • La méthode  balance  peut être mise en facteur

implements
implements
0..
0..
108
Conception par contrat (4/4)
Les interfaces
  • Les méthodes  save  et  load  sont des
    services techniques transversaux

implements
implements
0..
0..
109
Les classes de base
110
La classe  Object  définition
Les classes de base
  • Classe mère de toutes les classes
  • Permet dutiliser les classes conteneurs et le
    polymorphisme
  • La méthode  toString()  retourne une
    description de lobjet
  • La méthode  equals(Object)  teste légalité
    sémantique de deux objets
  • Le méthode  getClass()  retourne le descripteur
    de classe. Il permet de
  • connaître la classe dun objet
  • connaître le nom de la classe, ses ancêtres
  • découvrir la structure des objets (JDK 1.1)

111
La classe  Object  exemple
Les classes de base
class NamedObject extends Object protected
String _nom public String toString() return
"Objet " _nom " de la classe "
getClass().getName() public boolean
equals (NamedObject obj) return
obj._nom.equals(this._nom) class Personne
extends NamedObject Personne moi new
Personne("Marcel Dupond") Personne lui new
Personne("Marcel Dupond") System.out.println(mo
i) if (moi lui) if (moi.equals(lui))

Objet Marcel Dupondde la classe Personne
Test des références false
Test des valeurs true
112
La finalisation dun objet
Les classes de base
  • Tout objet qui nest plus référencé est détruit
    par le ramasse-miettes
  • Il ny a pas de delete en java
  •  finalize()  est appelé avant que le
    ramasse-miettes ne libère la mémoire occupée par
    lobjet
  • Permet de libérer des ressources allouées par
    lobjet
  • On peut forcer lappel au ramasse-miettes en
    invoquant
  • System.gc() déclencher le ramasse-miettes
  • System.runFinalisation() déclencher la
    finalisation des objets
  • Vous pouvez lancer la machine virtuelle en
    bloquant le déclenchement automatique du
    ramasse-miettes
  • Option java-nosyncgc
  • Permet de contrôler le déclenchement du
    ramasse-miettes

113
Les classes  Wrapper  description
Les classes de base
  • Les types de base Java ne sont pas des objets
  • Il est parfois indispensable de les manipuler
    comme des objets
  • Les classes Wrapper représentent un type de base
  • Récupérer les valeurs min et max
  • Créer une instance à partir dun type de base ou
    dune chaîne
  • Conversions entre types de base et chaînes
  • Conversions entre chaînes et types de base
  • Utiliser des types de base dans des conteneurs
  • Boolean, Integer, Float, Double, Long, Character
  • Attention ne supporte pas dopérateurs (, -,
    )
  • Elles sont dans le package java.lang

114
 Wrapper  vs  types de base 
Les classes de base
  • Avantages des type de bases
  • Plus léger en mémoire
  • Supporte un certain nombre dopérateurs
  • Autorise certaines conversions automatiques de
    types
  • Avantages des Wrappers
  • Est passé par référence
  • Dispose de méthodes de conversions statiques vers
    les autres types
  • Peut être géré par les objets container

115
Exemples
Les classes de base
  • Convertir une chaîne en entier
  • Convertir un entier en chaîne

static int convertir(String s) try
return Integer.parseInt(s)
catch(Exception e) return 0
static String convertir(int i) Interger j
new Integer(i) return j.toString()
116
La classe java.lang.String
Les classes de base
  • Contient une chaîne de caractères
  • Classe connue par le compilateur Java
  • Une chaîne constante sera convertie en objet de
    la classe String
  • String msg Hello Java World !
  • Un objet de la classe String ne peut pas être
    modifié
  • Ne brise pas lencapsulation

class Personne String nom public String
getNom() return nom
117
String concaténation
Les classes de base
int area 33 int prefixe 1 int suffixe
02030405 // Chaque concaténation crée un
nouvel objet // lancien est détruit par le
Garbage Collector String numTel "(" area
")" // (33) numTel prefixe // (33)1
numTel "-" // (33)1- numTel
suffixe // (33)1-02030405 // Un seul objet
est créé numtel "(" area ")" prefixe
"-" suffixe // Conversion dun entier en
chaîne String un 1 ""
118
String manipulation
Les classes de base
  • length() cette méthode permet de connaître le
    nombre de caractères dune chaîne
  • Ex for (int i 0 i lt monTexte.length() i)
    ......
  • indexOf(char c, int i) retourne la position du
    caractère c à partir de la position i
  • if (monTexte.indexof(, 5) ltgt -1 ) ......
  • substring(int i, int j) extrait de la chaîne
    les caractères de la position i à la position
    j
  • String nouveauMot ancienMot.substring(2,5)
  • equals() retourne un booléan signifiant si les
    deux chaînes sont identiques
  • Ex if ( mot1.equals(mot2)) ......

119
La classe java.lang.StringBuffer
Les classes de base
  • Cest une chaîne de caractères modifiable et de
    taille variable
  • Son utilisation est moins simple que  String 
  • pas dutilisation possible de lopérateur
  • append(p) ajoute p en fin de la chaîne
    courante
  • p peut être de nimporte quel type de base
  • length() retourne la longueur de la chaîne
  • setLength() change la longueur de la chaîne
  • Si elle est étendue, les nouveaux caractères sont
    initialisés à 0

120
La classe java.util.Vector
Les classes de base
  • Tableau de références à taille variable
  • On ne peut y stocker que des références sur les
    objets
  • Impossible de stocker directement un type de base
    dans une collection de type Vector utiliser
    pour cela les classes wrapper
  • Souvent utilisé pour coder une relation 1-n entre
    deux classes
  • Possibilité de savoir si un objet est présent
    dans le tableau et quelle est sa position
  • Vous pouvez
  • Insérer ou supprimer des références
  • Parcourir le contenu

121
Vector insérer, supprimer
Les classes de base
Vector vInt new Vector() for (int i 0
ilt10 i) Integer elt new Integer(i)
vInt.addElement(elt) // 0123456789
Interger i new Integer(0) vInt.addElementAt(i,
5) // 01234056789 vInt.removeElementAt(0)
// 1234056789 vInt.removeAllElements()
122
Vector modifier, rechercher ...
Les classes de base
  • Object elementAt(int index)
  • Retourne lélément pointé par index
  • Void setElementAt(Object obj, int index)
  • Place obj à la position index
  • Boolean contains(Object elem)
  • Retourne true si elem est dans le tableau
  • Int indexOf(Object elem)
  • Int indexOf(Object elem, int index)
  • Retourne la position de lobjet ou -1 si lobjet
    nest pas dans le tableau
  • Lobjet est recherché par référence
  • Int size()
  • Retourne la taille courante

123
Linterface java.util.Enumeration
Les classes de base
  • Objet permettant de parcourir les éléments dun
    conteneur
  • Une énumération ne stocke aucune information
  • Ne contient quune position courante dans le
    conteneur
  • Interface unique pour le parcours de tous les
    types de conteneurs
  • Ne fonctionne que pour un seul parcours
  • Cest une interface, pas une classe
  • Elements() appliquée sur un Vector retourne une
    Enumeration
  • Deux méthodes
  • Boolean hasMoreElements() teste sil reste des
    éléments
  • Object nextElement() récupère lélément courant
    etpasse au suivant

124
Enumeration exemple
Les classes de base
Vector vInt new Vector() for (int i 0
ilt10 i) Integer elt new Integer(i)
vInt.addElement(elt) // 0123456789 //
Première façon de parcourir le vector for (int
i 0 iltvInt.size() i) System.out.println(v
Int.elementAt(i)) // Seconde façon de
parcourir le vector // la plus élégante for
(Enumeration e vInt.elements()
e.hasMoreElements()) System.out.println(e.nextE
lement())
125
Quand utiliser une Enumeration ?
Les classes de base
  • Utilisez une Enumeration pour parcourir une
    association 1..
  • Permet de ne pas briser lencapsulation
  • Dans lexemple suivant
  • la classe  Personne  possède une méthode
    publique pour parcourir la collection de voitures
  • Lajout ou la suppression dune voiture dans
    cette collection doit se faire en manipulant une
    instance de la classe  Voiture 

possède -gt
0..
proprietaire
126
Quand utiliser une Enumeration ?
Les classes de base
public class Personne private Vector
_voitures new Vector() public Enumeration
voitures() return _voitures.elements()
void addVoiture(Voiture v) _voitures.addElement
(v) void remVoiture(Voiture v)
_voitures.removeElement(v) ...... package
simulateur class Voiture private Personne
_proprio public void setProprietaire
(Personne p) if (_proprio ! null)
_proprio.remVoiture(this) _proprio p if
(_proprio ! null) _proprio.addVoiture(this)
public Personne getProprietaire() return
_proprio
127
La classe java.util.Hashtable
Les classes de base
  • Tableau associatif permettant
  • Dindexer un objet par une clé
  • De retrouver rapidement un objet à partir dune
    clé
  • Les clés des références sont des objets
  • Chaînes de caractères, numéros didentification
  • Elles sont recherchées par valeurs (méthodes
    equals)
  • Les clés doivent implémenter la méthode
    ObjecthashCode()
  • Une clé ne peut identifier quune seule valeur
  • Naccepte pas les doublons
  • Pour stocker des relations n-n, il suffit de
    stocker des instances de Vector dans une
    Hashtable
  • Très performant pour laccès aux valeurs

128
La classe java.util.Hashtable
Les classes de base
  • Object put(Object key, Object value) insère un
    élément
  • Object remove(Object key) supprime la clé
  • Object get(Object key) retourne la valeur
    associée à la clé
  • Boolean containsKey(Object key) teste si la clé
    existe
  • Keys() retourne une Enumeration sur les clés
  • Elements() retourne une Enumeration sur les
    valeurs

129
Hashtable un exemple
Les classes de base
Hashtable deptable new Hashtable() //
Stockage dobjets de type Departement en
utilisant // une clé de type String
deptable.put("Ain", new Departement(1))
deptable.put("Aisne", new Departement(2))
deptable.put("Allier", new Departement(3))
Departement dep (Departement)deptable.get(("Aisn
e") // Parcours de toutes les clés de la
hashtable for (Enumeration noms
deptable.keys() noms.hasMoreElements())
String nom (String)noms.nextElements()
Departement dep2 (Departement)deptable.get(nom)
System.out.println(nom " "  dep2)
130
Choisir un conteneur
Les classes de base
  • Le choix dun conteneur dépend du type daccès

131
Les exceptions
132
A quoi servent les exceptions ?
Les exceptions
  • Le mécanisme des exceptions Java permet de
    traiter les erreurs déxécution
  • Il permet aussi de gérer toutes les situations
    hors contrat définit par le concepteur
  • Le travail du concepteur
  • Définir les ensembles dinstructions à risque
  • Implémenter les gestionnaire dexceptions pour
    chaque cas
  • Le travail de la machine virtuelle Java
  • Distinguer un résultat valide dun code erreur
  • Propager jusquau gestionnaire de ce cas
    exceptionnel les informations qui lui sont
    nécessaires (code erreur, données de contexte)

133
Exemple (1/2)
Les exceptions
class Equation double _a double _b double
c // Constructeur Equation(double a, double
b, double c) _a a _b b _c
c // Calcul du delta public double delta()
return _b_b 4_a_c // Solution
public double solution() throws PasDeSolution
double discr delta() if (discrlt0) throw
new PasDeSolution() return (_b
Math.sqrt(discr))/(2_a)
134
Exemple (2/2)
Les exceptions
class PasDeSolution extends Exception //
Retourne la description du problème String
toString() return "Léquation na pas de
solution" ... ... // Méthode
appelante try Equation ed new
Write a Comment
User Comments (0)
About PowerShow.com