Professional Documents
Culture Documents
Jacques Ferber
LIRMM Universit de Montpellier II
ferber@lirmm.fr
http://www.lirmm.fr/~ferber
1
Plan
Prsentation gnrale de Java
Syntaxe, expressions, instructions
Classes
Chanes de caractres, tableaux
Hritage
Collections et Vector
Packages et portes
Modifiers (static, etc..)
Exceptions
Page 2
Page 1
Le langage Java
Page 3
Ordinateur
Traduction
.exe
.c
.exe
Avantages
Rapidit
Inconvnient
Manque de portabilit
Rigidit
Jacques Ferber 2003
Page 4
Page 2
Avantages
Interprte
Souplesse
Portabilit
.exe
Inconvnient
Lenteur
.php
Page 5
Portabilit
Souplesse
Pas trop de perte d'efficacit
Ordinateur
Inconvnient
Efficacit moindre que compilation pure
Interprte
java
Ordinateur
Traduction
.java
Jacques Ferber 2003
javac
.class
Page 6
Page 3
Page 7
Caractristiques gnrales #2
Robuste
Scuris
Prise en charge par la smantique du langage et la machine
virtuelle (pas possible de passer outre)
Vrification du byte-code, class loader, scurity manager (accs
aux ressources)
Multi-thread
Permet de concevoir des programmes qui donnent l'impression de
s'excuter en parallle
Mcanismes de synchronisation (par moniteurs)
Mais quelques petites diffrences d'implmentation
Jacques Ferber 2003
Page 8
Page 4
Caractristiques du langage #3
Grande bibliothque de classes
Java 1.4 (1.3) 2723 (1840) classes rparties en 135(76)
packages reprsentant environ une vingtaines de
domaines
Graphisme (2D), interfaces, entres-sorties, collections,
introspection, applets, threads, gestion de zip, jar,..
Bases de donnes (JDBC), rseau (sockets, URL), rmi,
nommage de services (JNDI), CORBA (IDL)
son, gestion de la scurit, internationalisation
XML, expressions rgulires, crypto
+ d'autres bibliothques:
J2EE, JSP, Servlet,
Graphisme 3D
Page 9
Caractristiques #4
La JVM de Java permet l'implmentation de nombreux langages
qui ont accs aux bibliothques de Java:
Python (jython)
Lisp/Scheme
Java interprt (BeanShell)
Langage base de rgles (Jess)
Prolog
Smalltalk
Forth, Logo, langages fonctionnels, langages de scripts, etc.
Basic, Fortran
Cette liste n'est pas exhaustive voir:
http://www.robert-tolksdorf.de/vmlanguages.html
Page 10
Page 5
Types en Java
Types primitifs
Boolen: boolean
Nombres entiers: byte, short, int, long (de 1 8 octets)
Nombres flottants: float, double (de 4 8 octets)
Caractre: char (2 octets Unicode)
Objets
Instance de classes (voir plus loin)
Note: les chanes de caractre et les tableaux sont des
objets
Page 11
Littraux
Certaines valeurs ont une reprsentation textuelle,
qu'on appelle "littrale". Les types primitifs ont tous
une reprsentation littrale
Nombres
entiers: int a = 2356;
flottants: double d = 2.14E4;
Caractres
char c = 'A';
Boolens
boolean b = false;
Page 12
Page 6
Affectation et dclaration
Dclaration: sert indiquer qu'une variable est
utilise par le programme
int a;
<type> <var>
boolean b;
char c;
long a2 = a +1;
boolean b2 = b && (a2 <= 1000);
char c = 'A'+1;
Page 13
Expressions
Une expression sert calculer une valeur. On dit qu'une
expression retourne une valeur
toute expression a un type associ
le compilateur ne connat que les types, pas les valeurs
int a = 23 * 34; // met la valeur 34 dans la variable a
(a >10)
Comparateurs
<, >, <=, >=, ==, !=
Boolens
&&, ||, !
Arithmtiques
+, -, /, *, %
Page 14
Page 7
Cast
Des valeurs d'un certain type peuvent tre
transformes automatiquement en un autre type
int
long, int
double, float
double, char
int
int a1 = 34;
long a2 = a1 + 1;
// OK
int a3 = a2;
// OK
// OK
Page 15
while (<condit>)
<expr1>
do <expr1>
while (<condit>)
If (<condit>)
<expr1>
else
<expr2>
switch(expr){
case <const1> : <expr1>; break;
case <const1> : <expr1>; break;
default : <expr>
}
for (<init>;<tantque>;<incr>)
<expr1>
Commentaires:
//
jusqu' la fin de la ligne
/* */
entre les deux marques
Page 16
Page 8
Premier programme
Premier programme:
class Test {
public static void main(String[] args){
int r = 0;
for (int i=0;i<=10;i++){
r = r + i;
}
System.out.println("somme : "+r);
}
}
Page 17
L'approche objet
Page 18
Page 9
Page 19
Page 20
Page 10
Relation classe-instance
La classe est un modle d'objet - un objet est une instance de classe
La classe dcrit la structure et le comportement des objets
Les objets (instances) ne comportent que leur tat (valeur des attributs)
Attributs
Mthodes
Communications
Page 21
UML
Notation UML (Unified Modelling Language)
Issue des notations de OMT(Rumbaugh), OOD
(Booch) et Objectory (Jacobson)
Norme de l'OMG
Plusieurs types de diagrammes:
Diagrammes de classes
Diagrammes de squence
Diagrammes de collaboration
Diagrammes de cas d'utilisation
Diagrammes de dploiement
Diagrammes de composants
Diagrammes tats transitions
trs employ!!
moins employs
Page 22
Page 11
diagrammes de classe #1
Class1
Class3
-Attribut1
-Attribut2
+operation1() : int
+operation2()
-Attribut1
-Attribut2
+operation1() : int
+operation2()
r1
Association
r2
association
Class4
-Attribut1
-Attribut2
+operation1() : int
+operation2()
une classe
Class1
-Attribut1
-Attribut2
+operation1() : int
+operation2()
-r1
1
-r2
*
Class2
-Attribut3
-Attribut4
+operation3() : int
agrgation/composition
Page 23
Compte
-solde: long
-numero: long
class Compte {
long solde;
long numero;
Compte(long s, long num) {
solde = s;
numero = num;
}
+deposer(s:long): void
+retirer(s:long): void
+avoirSolde(): long
long avoirSolde(){return(solde);}
long avoirNumero(){return(numero);}
void deposer(long s){ solde=solde +s;}
void retirer(long s){solde=solde-s;}
}
Page 24
Page 12
Classe et instance
La classe dfinit un modle d'objet
Un objet est une "instance" (exemplaire) d'une classe
Compte
-numro
-solde
+deposer
+retirer
+avoirSolde
numro
solde
101
1000
numro
solde
102
2000
Page 25
Invocation de mthode
Invoquer une mthode (on dit aussi "envoyer un
message") consiste appliquer la mthode associe la
classe de l'objet receveur
<expr>.<nom methode>(<arg1>,..,<argn>)
Page 26
Page 13
Exemple #1.2
1050
2200
Page 27
String s1 = "bonjour";
String s2 = "les copains";
// concatnation
Char c = s3.charAt(3);
s2 = s1.substring(3,6);
// c = 'j'
// s2 = "jou"
Page 28
Page 14
Exemple #2.1
Une personne
Person
-birthdate
-firstname : string
-surname : string
+age() : int
Date
-dayr : int
-month : int
-year : int
Page 29
Exemple #2.2
class Date {
int year;
int month;
int day;
class Person {
Date birthdate;
String firstname;
String surname;
int age(Date today){
return today.getYear() birthdate.getYear()
}
Person(String p, String n, Date d){
firstname = p;
surname = p;
birthdate = d;
}
Date getDate(){return birthdate;}
class Test2 {
public static void main(String[] args){
Person p = new Person("Jean","Dupond", new Date(6,1,1966));
System.out.println("presentation de : "+p);
Date d = p.getDate();
}
}
Jacques Ferber 2003
Page 30
Page 15
Les tableaux
Caractristiques:
Les tableaux sont des objets qui contiennent des
rfrences vers d'autres objets
Comme en Lisp/Scheme ou en Smalltalk
Page 31
int b = Tperson[0].age();
// b = 37
Page 32
Page 16
Page 33
This
la pseudo-variable 'this' reprsente l'objet receveur
d'un message et donc l'objet en cours
identique au 'self' de Smalltalk, et au 'this" de C++ et
Simula.
class Truc {
int a, b;
Chose c;
void m(){.}
void p(Chose c){
this.m();
this.c = c;
m();
}
Truc(int a){
this.a = a;
}
}
Jacques Ferber 2003
class Chose {
Truc t;
Chose(Truc t){
this.t = t;
t.p(this);
}
}
Note:
p() this.p()
a this.a
Page 34
Page 17
Mcanisme:
les attributs et les mthodes sont "recopis" des super classes
vers les sous-classes
Page 35
Hritage
Vhicule
Vhicule terrestre
Voiture
Camion
Vhicule Arien
Moto
Avion
Hlicoptre
Ballon
Page 36
Page 18
// 25
Page 37
Compte
-solde: long
-numero: long
+deposer(s:long): void
+retirer(s:long): void
+avoirSolde(): long
void calculInterets(){
deposer(Math.round(avoirSolde()*taux));
}
void retirer(long s){
super.retirer(s);
super.retirer(1);
}
}
CompteCredit
-taux: double
+calculInterets(): void
+retirer(s long) oid
Page 38
Page 19
La classe Object
Racine de l'hritage: toutes les classes (mme les
chanes de caractres et les tableaux) en drivent
Mthodes importantes
boolean equals(Object o)
String toString()
Page 39
Page 40
Page 20
* biens
1
proprietaire
Personne
- nom
- ...
-
+prixAuM2()
Appartement
- etage
- ct
Page 41
Transformation UML
class Logement {
int prix;
int surface;
...
Personne proprietaire;
Classes
int prixAuM2() {
...
}
}
class Appartement extends
Logement {
int etage;
String position;
}
Page 42
Page 21
Page 43
Vhicule terrestre
Camion
Automobile
Ducati
Page 44
Page 22
Consquences
Vhicule (terrestre)
Camion
Automobile
Ducati
Harley
Page 45
Classes abstraites
Une classe abstraite est une classe qui ne peut pas
avoir d'instance
Comporte des mthodes abstraites ventuellement
En Java une mthode abstraite est une mthode qui n'a pas de
code. A distinguer des mthodes vides qui ne font rien
abstract void p(); // est abstraite
void p(){} // mthode vide, ne fait rien..
Page 46
Page 23
Page 47
Page 48
Page 24
Mauvaise classification
Compte
Courant
mauvais
Compte
Devise
Page 49
Bonne classification
Compte
Compte
Courant
classe abstraite
Compte
Devise
Page 50
Page 25
Page 51
Interfaces
Interface
aspect (rle?) qu'une classe peut jouer
l'interface dcrit le comportement d'une classe
une interface ne comprend aucun code
Page 52
Page 26
Exemple
Une personne et un ordinateur peuvent
tre considrs comme des joueurs
Ils doivent implmenter la mthode play()
Class5
Class6
interface
Player
+play()
Computer
Person
-memory
-firstname : string
-surname : string
+age() : int
+play()
+operation1() : int
+operation2()
+play()
Page 53
Le typage
Java est un langage fortement typ:
Toute variable a un type connu par le compilateur
Toute expression a un type connu par le compilateur
Vrification de type sont faites par le compilateur
Un type primitif
Une classe
Une interface
Un tableau de type
Une variable n'accepte un objet que si son type est >= au type
de l'expression:
a = e; // type(a) >= type (e)
Page 54
Page 27
Exemple de typage
Animal
+cri()
Mammifere
Oiseau
+cri() = "cuicui"()
Chien
Elephant
+cri()="wouah"()
+cri()="praaa"()
Canari
Corbeau
+cri()="croaa"()
Page 55
Cast
Permet d'indiquer au compilateur que le type n'est pas
celui qu'il croit
C'est un contrat entre le compilateur et le programmeur!!
(<t>) e // o <t> est un type.
l'expression a maintenant le type <t>
valable uniquement si <t> type(e)
Animal a = new Elephant(); // OK
Mammifere m;
m = a; // Erreur de compilation
m = (Mammifere) a;
// OK la compilation et l'excution
Oiseau o;
o = (Oiseau) a;
o = (Oiseau) m;
Page 56
Page 28
Collections et Vector
Les collections sont des objets qui servent
"contenir" d'autres objets
Implmentent les structures de donnes
classiques: listes, piles, ensembles, tables, etc.
Les collections font maintenant partie d'un
"framework" collection.
Collection
Set
Map
List
SortedMap
SortedSet
Jacques Ferber 2003
Page 57
La classe Vector
public class Vector extends AbstractList implements List {
// oprations de base
int size();
boolean isEmpty();
boolean contains(Object o); // appartenance
boolean add(Object o);
boolean remove(Object o);
Object elementAt(int i); // retourne le ime lment
Object firstElement();
Object lastElement();
boolean containsAll(Collection c);
// inclusion
boolean addAll(Collection c);// union
boolean removeAll(Collection c);
// diffrence
void clear();
Object[] toArray();
}
Jacques Ferber 2003
Page 58
Page 29
Page 59
Encapsulation
Dfinit une notion d'intrieur/extrieur
Tout ce qui est "interne" est invisible/inaccessible depuis
l'extrieur (sauf depuis des objets de la mme "famille")
Vue interne
Donnes prives
Mthodes publiques
Communications
Mthodes prives
Jacques Ferber 2003
Page 60
Page 30
Les packages
Constitue une unit de programme, pour structurer
logiquement et physiquement des bibliothques de
classes.
Permet la JVM de localiser les classes charger
Page 61
Page 62
Page 31
3. si pas trouve, aller rechercher dans le jar contenant toute la bibliothque des
classes initiales.
4. si pas trouve, erreur 'Class not found'
Il est possible de (re)dfinir ses propres class loader pour aller chercher les
classes o on le dsire
Jacques Ferber 2003
Page 63
Chargement de classes
Le processus de chargement de classes est totalement
indpendant de la compilation!!
Java prend la premire classe qu'il trouve
le mcanisme d'extension a t dfini pour qu'on puisse
se passer de ce $#@&! de CLASSPATH
Mais utiliser avec circonspection
Page 64
Page 32
L'accessibilit
Dtermine la visibilit d'une classe, d'une mthode ou d'un
attribut par rapport aux autres classes et aux packages
private: accessible uniquement depuis la classe
" " (rien): accessible depuis le package
protected: accessible depuis le package + toutes les sous-classes de la
classe
public : accessible depuis partout
Page 65
Page 66
Page 33
static
Permet d'associer des attributs et des mthodes une
classe
Une mthode statique ne peut accder qu' des
attributs et mthodes statiques
class Truc {
static int n=0;
int a;
.
Truc t = new Truc();
Truc(){
n++;
}
Truc.getN();
// OK
t.getN();
// Possible
Page 67
final
Sert indiquer qu'une classe, attribut ou mthode ne peut pas
tre redfinie:
Pour une classe: pas de sous-classes possibles
Pour une mthode: pas de redfinition de la mthode dans les sous-classes
Pour un attribut: pas de modification de la valeur de l'attribut constante
On utilise souvent le public static final <type> <var> = <expr> pour dfinir
des constantes accessibles de plusieurs parties du programme.
class Truc {
public static final int UNECONSTANTE = 34;
}
a = Truc.UNECONSTANTE * 2;
Page 68
Page 34
Les exceptions
try {
...
}
catch (<classe d'exception> <variable>){
...
}
catch ( . . . ) {
...
}
...
int i = 0;
try {
int a = 100/i;
}
catch(ArithmeticException e) {
System.out.println("on a une division par zro, mais on continue");
}
catch (Exception e){
System.err.println(erreur: +e.getMessage());
e.printStackTrace();
}
Jacques Ferber 2003
Page 69
Page 70
Page 35
class Test {
void p(int x) throws monException {
if (x < 0)
throw new MonException(valeur invalide);
else
.
class Toto {
}
void utilise(int a){
}
Test t = new Test();
try {
t.p(a);
} catch(MonException ex){
}
}
}
Page 71
classes anonymes
Possibilit de crer une classe anonyme et de l'instancier en mme
temps (analogue au lambda-expressions en Lisp)
Trs utilis dans le cadre de la gestion d'vnements (voir plus loin) et
donc l'utilisation de composants graphiques
Permet de crer une classe issue d'une interface
Attention: les variables locales externes l'objet doivent tre "final"
(pas de modifications des variables fermes). Mais les attributs ne
posent pas de problmes
interface Truc {
void m();
}
class Chose {
int b=80;
void p(final int a){
Truc t = new Truc(){
int c = a;
void m(){
super.m();
c++;
b++;
}};
t.m();
}
}
Page 72
Page 36