Introduction POO Java Syntaxe Classes et objets
Cours Java
Jean-Baptiste Mouret
mouret@[Link]
ISIR - Université Paris 6
[Link]
Cours 1 - ROB4
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Programmation orientée objet :
introduction
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Déroulement
10 cours/TD (2h), 10 TP (4h) : 60h
6 cours de Java
Interro (1h) au dernier cours de Java : 25%
4 cours de c++
Interro (1h) au dernier cours de c++ : 25%
TP notés (A,B,C,D,E) : 10%
Un micro-projet en Java (simulateur de Roomba) : 20%
Un micro-projet en C++ (simulateur dynamique) : 20%
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Programmation orientée objet
Programmation orientée objet = POO
« Manière de programmer »pour des logiciels :
complexes
extensibles
Concept large :
manière de penser, d’exprimer des concepts
manière d’organiser le code source
penser un logiciel « pour l’avenir »en plus du présent
Ô toute une philosophie avec un sens esthétique
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Langages objets
Langages orientés objets Langages non orientés
Modula 3 (le précurseur) objets
SmallTalk (pur objet) C
Java Assembleur
C++ LISP & Scheme (fonct.)
Python (scripts) Haskell (fonct.)
Ruby (scripts) Shell Unix
Eiffel (applications fiables) Pascal
C# (Microsoft .NET) Langages permettant la POO
Objective C (NEXT/Apple, Php, Ada, Objective Caml,
dérivé du C) Perl, Delphi
Ô Connaître les concepts de la POO est requis pour
programmer dans la plupart des langages modernes
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Programmation structurée (1)
Imaginons que l’on programme sur un logiciel de dessin de
schémas (i.e. Adobe Illustrator, Microsoft Visio, ...)
Plusieurs types de formes :
rectangles
cercles
flèches
lignes
courbes
annotation textuelle
Chaque forme à des caractéristiques :
Cercle : centre, rayon, couleur
Rectangle : centre, coté1, coté2
Flèche : point de départ, point d’arrivée
...
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Programmation structurée (2)
Regrouper les informations qui vont ensemble (exemple EN C) :
typedef s t r u c t {
int x ;
int y ;
} point_t ;
typedef s t r u c t {
point_t center ;
int radius ;
} circle_t ;
typedef s t r u c t {
point_t center ;
i n t c1 , c2 ;
} rect_t ;
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Programmation structurée (2)
Exemple de fonction : déplacer une forme (en C) :
void m o v e _ c i r c l e ( c i r c l e _ t ∗ c , i n t x , i n t y )
{
c−>p o i n t . x += x ;
c−>p o i n t . y += y ;
}
void move_rect ( r e c t _ t ∗ r , i n t x , i n t y )
{
r −>p o i n t . x += x ;
r −>p o i n t . y += y ;
}
Ô Ne diffère que par le type de forme
Ô Obligé à chaque ligne de préciser “c->” ou “r->” etc..
Ô On doit tout réécrire si on ajoute une forme
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Conclusion
Ce code va vite devenir difficile à écrire et à maintenir
Ce problème se pose pour la plupart des logiciels
complexes
La programmation objet essaye de remédier à ce type
problèmes
Ô Modéliser des concepts abstraits sous formes de familles
de classes d’objets
Forme = une classe « abstraite »
Cercle = une classe « plus concrête », dérivée de forme
Rectangle = une classe « plus concrête », dérivée de forme
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Java
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Historique
Proposé par Sun Microsystem en 1995
Maintenant « Open Source » (2006)
Objectifs initiaux :
simple, orienté objet et familier
robuste et sécurisé
neutre au niveau de l’architecture et portable
performant
interpété, multi-thread et dynamique
Langage généraliste (vs JavaScript, html, ...)
Ô « n’importe quel programme »
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Concept : la JVM
Java repose sur :
une machine virtuelle (Java Virtual Machine)
un compilateur vers le bytecode de la machine virtuelle
Développeur :
int a; 0010010
Sys te m. ou t. pr int ln
... aea 2100
for (int i = 0 ; . ..) 21321 a210
....
00131213131
0312aa e21312
12312332423
031231oo eu
Code
[Link] Compilateur Bytecode
(javac) (.class)
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Concept : la JVM
Utilisateur / client :
0010010
aea 2100
21321 a210
00131213131
0312aa e21312
12312332423
031231oo eu
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Particulartés principales
Machine virtuelle
Langage compilé (vs Python, Ruby, Perl, etc...)
Typage statique (vs Python, Ruby, Perl, etc...)
Langage orienté objet (cf 2ème partie du cours)
Ramasse miette Ô libération automatique de la mémoire
Exceptions Ô gestion des erreurs
Bibliothèque standard couvrant de nombreux domaines (vs
C)
Depuis Java 1.5 : generics (conteneurs capables de
contenir des objets de n’importe quel type « proprement »)
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Pourquoi utiliser Java ?
Portabilité très bonne (vs C#)
Plus moderne que le C (et le C++)
Code de plus haut niveau que le C/C++
ramasse-miette (garbage collector)
programmation objet
...
Bons outils (éditeurs, refactoring, ...)
Bonne bibliothèque standard
réseau
threads
conteneurs (listes, tables de hachage, ...)
Adapté au web :
coté serveur : JSP
coté client : applets java
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Pourquoi ne pas utiliser Java ?
Peu adapté à la programmation bas niveau & système
pas de timing précis (OS temps réel)
pas d’interaction fine avec le système (noyaux, drivers, etc.)
Plus lent que du C (mais plus beaucoup)
peu de contrôle fin de la performance
peu adapté au calcul de très haute performance
ex. simulation météo, mécanique des fluides, ...
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Applications codées en en java : exemple
Opéra Mini (tel. portable)
http ://[Link] (jsp)
Des milliers (millions ?) de programmes pour PC & tel.
portable
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Syntaxe de base
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Hello world
public class H e l l o W o r l d
{
public s t a t i c void main ( S t r i n g [ ] args )
{
System . o u t . p r i n t l n ( ‘ ‘ H e l l o w o r l d ’’ ) ;
}
}
Fichier
[Link] (nom de la classe)
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Compilation & execution
Compilation
javac [Link]
création [Link]
Execution
java HelloWorld
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Types de base
boolean (true ou false)
byte (8 bits)
short (16 bits),
int (32 bits)
long (64 bits)
float
double
char (16 bits, unicode)
cast (transtypage) : int b = (int) a ;
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Tableaux simples
déclaration : int[] mon_tableau ;
allocation : mon_tableau = new int[6] ;
affectation : int mon_tableau[] = {1, 2, 3, 4, 5, 6 }
taille du tableau : mon_tableau.length ;
les index commencent à 0 (comme en C)
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Syntaxe de base
Très proche du C :
Affectation : =
Arithmétique : +, -, *,/ ,%, ++, –, +=, -=, *=, /=,%=
Logique : ||, &&
Comparaison : <, >,<=, >=, ==, !=
Commentaires :
//
/* .... */
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Structure de contrôle
Comme en C.
i f ( condition1 ) switch ( e x p r e s s i o n )
{ {
instruction1 ; case const1 :
instruction2 ; instruction1 ;
// ... instruction2 ;
} break ;
else case const2 :
{ instruction1 ;
instruction3 ; break ;
instruction4 ; default :
// ... instruction1 ;
} }
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Boucles
Comme en c++ et en C99.
f o r ( i n t i = 0 ; i < 1 0 ; ++ i )
{
instruction1 ;
/ / . . . (10 i t e r a t i o n s )
}
while ( c o n d i t i o n ) do
{ {
instruction1 ; instruction1 ;
// ... // ...
} } while ( c o n d i t i o n ) ;
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Affichage
[Link](“hello world”) ;
[Link](42) ;
Syntaxe compliquée que nous decrypterons plus tard...
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
TD : implémenter
tab ← [1,5,3, 19, 9, 12, 13]
permut ← faux
Faire :
permut ← faux
pour i ← 0 à i = [Link] - 1 :
si tableau[i] > tableau[i + 1] :
echanger(tab[i], tab[i + 1])
permut ← vrai
tant que (permut = vrai)
afficher(tab)
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
public s t a t i c void main ( S t r i n g args [ ] )
{
i n t t a b [ ] = { 1 , 5 , 3 , 19 , 9 , 12 , 1 3 } ;
boolean permut ;
do
{
permut = f a l s e ;
f o r ( i n t i = 0 ; i < t a b . l e n g t h − 1 ; ++ i )
i f ( tab [ i ] > tab [ i + 1 ] )
{
i n t tmp = t a b [ i ] ;
tab [ i ] = tab [ i + 1 ] ;
t a b [ i + 1 ] = tmp ;
permut = t r u e ;
}
}
while ( permut ) ;
f o r ( i n t i = 0 ; i < t a b . l e n g t h ; ++ i )
System . o u t . p r i n t l n ( t a b [ i ] ) ;
}
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Classes et objets
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Pourquoi des objets ?
Les objets permettent de représenter « naturellement »la
réalité
on est entourés d’objets : autres humains, ordinateur, etc.
les humains réfléchissent facilement par objet
Les classes d’objet permettent de « ranger »la réalité
les « chaises »appartiennent à la classe « meuble »
classification en biologie (animaux, mammifères, insectes,
félins, ...)
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
En programmation
Beaucoup de programmes simulent la réalité :
jeu de voiture : on voudrait avoir des « objets »voiture,
arbre, circuit, etc.
banque : chaque client est un objet, avec l’état de ses
comptes, etc.
...
Plus la structure de notre programme ressemble à notre
réalité, mieux on arrive à réfléchir
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
En programmation
Les 20 dernières années ont montré que cette idée
permettaient de créer des logiciels
complexes
extensibles
divisés de manière assez naturelle
élégants
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Objet
Du point de vue d’un humain, un objet est :
une « chose »tangible ou visible : cette chaise, la voiture
devant la porte, votre enseignant, ...
quelque chose qui peut être compris intellectuellement
(concept) : le théorème de Pythagore, le langage Java,
mon ordinateur...
Ô un modèle d’une partie de la réalité
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Classe
Classe = le « type »des objets
Exemples :
toutes les objets « chaise »appartiennent à la même classe
(chaise)
toutes les « voitures »appartiennent à la classe « voiture »
tous les objets « robots »appartiennent à la classe
« chaise »
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Notation UML et vocabulaire
UML : Unified Modeling Language
On ne verra ici que les « diagramme de classes »
Rectangle Circle
side1 : int center : Point
side2 : int radius : int
Rectangle, Circle, Point = center : Point
classes (« types »)
1
Losange plein = 1
1 1
composition Point
« variables » : attributs x : int
y : int
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Objet
Classe = plan de construction
objet = une instance de classe
Création avec l’opérateur new :
C i r c l e c = new C i r c l e ( ) ;
Un objet possède son propre espace mémoire
Ô Ex. il existe un espace mémoire pour “radius” pour chaque
instance de Cercle
Accès aux attributs : .
System . o u t . p r i n t l n ( c . r a d i u s ) ;
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
En Java
/ / f i c h i e r P o i n t . j a v a ( une c l a s s e par f i c h i e r ! )
public class P o i n t
{
int x , y ;
}
/ / f i c h i e r Rectangle . j a v a
public class Rectangle
{
Point center ;
i n t side1 , s i d e 2 ;
};
/ / f i c h i e r C i r c l e . java
public class C i r c l e
{
Point center ;
int radius ;
};
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Méthodes et attributs
Données (side1, side2, center, ...) : attributs = états de
l’objet
« fonctions » : méthodes Ô manipuler les états
Chaque méthode peut accéder librement aux attributs de
l’objet
Rectangle Circle
side1 : int center : Point
side2 : int radius : int
center : Point
move(x : int,y : int)
move(x : int,y : int)
1
1 1
Point
x : int
y : int
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Constructeur
Méthode particulière pour la création des objets
Porte le même nom que la classe
Peut avoir des arguments
Utilisation typique : créer les attributs avec new
public class C i r c l e
{
/ / constructeur
Circle ()
{
/ / appel du c o n s t r u c t e u r de P o i n t
t h i s . c e n t e r = new P o i n t ( ) ; / / n o t e r l e t h i s
}
Point center ;
int radius ;
}
Circle c1 = new Circle() Ô appel du constructeur de Circle
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
This
this = le nom de l’objet courant
this est optionnel (sous-entendu)
/ / constructeur
Circle ()
{
/ / appel du c o n s t r u c t e u r de P o i n t
t h i s . c e n t e r = new P o i n t ( ) ; / / n o t e r l e t h i s
/ / eq . a :
c e n t e r = new P o i n t ( ) ; / / pas de t h i s
}
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Autres méthodes
public class C i r c l e
{
/ / constructeur
public C i r c l e ( )
{
c e n t e r = new P o i n t ( ) ;
Circle
}
-radius : int
/ / methode ( s ) -area : int
public void t r a n s l a t e ( i n t x , -center : Point
int y) +Circle(r : int,c : Point)
{ +Circle()
+move(x : int,y : Point)
t h i s . c e n t e r . x += x ; -compute_area()
t h i s . c e n t e r . y += y ;
}
// attributs
Point center ;
int radius ;
}
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Création et utilisation d’une classe
public class Exemple
{
public s t a t i c void main ( S t r i n g [ ] args )
{
C i r c l e c1 = new C i r c l e ( ) ; / / n o u v e l l e i n s t a n c e
C i r c l e c2 = new C i r c l e ( ) ; / / n o u v e l l e i n s t a n c e
Rectangle r = new Rectangle ( ) ;
c1 . t r a n s l a t e ( 2 , 3 ) ; / / appel de methode
}
}
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Références
Circle c1 = new Circle();
Ô new renvoie une référence vers un nouveau cercle
Ô un nouvel espace mémoire
Référence nulle : c1 = null ;
Ressemble aux pointeurs en C, différences :
pas d’arithmétique
soit null, soit un objet valide
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Références : exercice
C i r c l e c1 = new C i r c l e ( ) ;
c1 . r a d i u s = 1 ;
C i r c l e c2 = new C i r c l e ( ) ;
c2 . r a d i u s = 2 ;
System . o u t . p r i n t l n ( c1 . r a d i u s ) ; / / a f f i c h e ?
System . o u t . p r i n t l n ( c2 . r a d i u s ) ; / / a f f i c h e ?
c1 . t r a n s l a t e ( 2 , 2 ) ;
c1 = c2 ;
System . o u t . p r i n t l n ( c1 . r a d i u s ) ; / / a f f i c h e ?
c1 . r a d i u s = 4 2 ;
System . o u t . p r i n t l n ( c1 . r a d i u s ) ; / / a f f i c h e ?
System . o u t . p r i n t l n ( c2 . r a d i u s ) ; / / a f f i c h e ?
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Ramasse-miettes (garbage collector)
La JVM note toute les utilisations des références
Quand un objet n’est plus référencé (dans tout le
programme)
Ô destruction par le ramasse-miette
Conséquence : pas besoin de gérer la mémoire
void t e s t ( )
{
C i r c l e c1 = new C i r c l e ( ) ;
c1 . t r a n s l a t e ( 2 , 2 ) ;
} / / c1 n ’ e s t p l u s u t i l i s e
/ / −> d e s t r u c t i o n
Jean-Baptiste Mouret Cours Java
Introduction POO Java Syntaxe Classes et objets
Exercice (TD)
Jean-Baptiste Mouret Cours Java