en Java
Une brève histoire de Java
3
Java c'est quoi ?
4 éléments :
Java est un langage de programmation objet
Une machine virtuelle
Des bibliothèques de classes ou des packages : API Application
Programming Interface (2500 classes dans Java 1.4)
Ensemble d'outils : java, javac, jdb javadoc, jar, ...
5
Java : principe fondateur de sa portabilité
"write once, run everywhere"
6
Langages compilés et limitations
Légende
Indépendant de la
fichier machine
source du Dépendant de la
machine
programme
Compilation
7
Portabilité
Notion de portabilité
Capacité d'un programme à être indépendant du
système d'exploitation et de l'architecture machine
Impossible !
Programme
portable
Architecture 1 Architecture 2
Risc 6000 Intel x86
8
Java et la portabilité
Solution proposée:
Construire une machine virtuelle:
joue le rôle de plateforme virtuelle
dépendante de l'architecture machine et du SE
opère un langage machine virtuel indépendant de
l'architecture réelle et du SE réel
Programme Java
Machine virtuelle
SE / Architecture
9
Pseudo-Langage interprété
Schéma du principe Java
fichier source du
programme
Compilation Programme
portable !
Programme Java
Machine Machine
Machine virtuelle Machine virtuelle Machine virtuelle
virtuelle virtuelle
10
Compilation en Java → bytecode
11
La compilation fournit du bytecode
Programme Java
Programme source
PremiereAppli.java
Compilateur: javac
Bytecode
PremiereAppli.class
12
Java Virtual Machine
Les systèmes qui veulent pouvoir exécuter un
programme Java doivent fournir une JVM
A l'heure actuelle, tous les systèmes ont une
JVM (Linux, Windows, MacOs,…)
Il existe aussi depuis peu quelques JVM « en
dur », sous forme de processeurs dont le
langage natif est le bytecode ; elles sont
rarement utilisées (en raison de la portabilité)
13
Le bytecode peut être exécuté par
n'importe quelle JVM
Bytecode:
PremierAppli.class
Compilateur Java
JVM Windows
15
Avantages de la JVM pour
Internet
Grâce à sa portabilité, le bytecode d'une classe peut être chargé
depuis une machine distante du réseau, et exécutée par une
JVM locale
La JVM fait de nombreuses vérifications sur le bytecode avant
son exécution pour s’assurer qu’il ne va effectuer aucune action
dangereuse
La JVM apporte donc
– de la souplesse pour le chargement du code à exécuter
– mais aussi de la sécurité pour l'exécution de ce code
Les vérifications effectuées sur le bytecode et l'étape
d'interprétation de ce bytecode (dans le langage natif du
processeur) ralentissent l'exécution des classes Java
16
Applications indépendantes
et applets
17
Applet
Objet de la classe Java Applet, référencé dans
une page Web (écrite dans le langage HTML)
Le lancement d'une applet se fait quand la partie
de la page Web qui référence l'applet est affichée
par le client Web
18
Exemple de page Web qui
contient une applet
<HTML>
<HEAD>
<TITLE> Une applet </TITLE>
</HEAD>
<BODY>
<H2> Exécution d’une applet </H2>
<APPLET code="HelloApplet.class"
width=500 Dimensions de l'emplacement
réservé à l'affichage de l'applet
height=300>
Votre navigateur ne peut exécuter une applet
</APPLET>
</BODY>
</HTML>
19
import java.awt.Graphics;
import java.applet.Applet;
public class HelloApplet extends Applet {
public void paint(Graphics g) {
g.drawString("Hello world", 50, 25);
} Zone où commencera
} l'affichage : x = 50 pixels,
y = 25 pixels
Représente l’emplacement
de la page Web où l’applet
20 s’affichera
Étapes pour l’exécution d’une
applet
Exécution de l’applet
Dans la JVM du client
21
Remarques
Soit:
A partir du navigateur
A partir de l’appletviewer
Javac HelloApplet.java ->
HelloApplet.class
Appletviewer HelloApplet.html
23
Utilité des applets
24
Applications :la console vs G.U.I
25
Application indépendante
26
Structure d’une application
Placer une classe
dans un fichier source
Placer les méthodes
Fichier source dans une classe
Placer les instructions
Fichier de classes
dans les méthodes
Méthode 1
instructions
Méthode 2
instructions
27
Mise en œuvre
28
Architecture générale d’un programme Java
29
Structures d’un programme en Java
30
Structures d’un programme en Java
31
Comment développer une
application?
Deux façons d’écrire des programmes Java:
En écrivant le code dans un simple éditeur de texte
Compilation et exécution du code en ligne de commande DOS
33
Une première application
Application HelloWorld
Créer un fichier texte : HelloWorld.java
Règle de bonne pratique : 1 classe par fichier et 1 fichier
par classe
public class HelloWorld La première ligne du programme doit être la
{ déclaration de la classe
public static void main (String[]args) Tout programme doit contenir une méthode
{ main qui porte la signature ci-contre
System.out.println("Hello the World");
Écrire à l’écran “Hello the World”
}
} Fermer les accolades
35
Types Primitifs de Java
36
Initialisation
37
Types de données primitifs
Explication:
byte : codé sur 8 bits 28 valeurs (–27) to (27–1) = -128 à 127
int : codé sur 32 bits 232 valeurs (–231) to (231–1)
Déclaration et initialisation :
int int x=12;
short short x= 32; (short x=33000; // Hors limite)
long long x= 200L; // Nombre accolé à un L
byte byte x=012; // Nombre commençant avec un 0
double double x=23.2323;
float float x= 23.233F; // Nombre accolé à un F
char char c=‘a’; char c=‘\u0061’; char c=(char)97;
boolean boolean b=true;
38
Conversion
Vérification de typage utilise toujours le type apparent
cast
(nom d’une classe) expression
39
Conversions de types
40
Conversions de types
41
Opérateurs
42
Opérateurs
43
Condition et test
Une condition correspond à vrai ou faux
E.g. (age < 50)
Tester une condition:
if condition A; else B;
si condition est satisfaite, alors on fait A;
sinon, on fait B
E.g. if (age < 65)
System.out.println("jeune");
else
System.out.println("vieux");
44
Attention: Attention:
un ; après le for( ), itère sur la condition, et ‘somme’ ‘i’ n’est déclarée ici qu’à
ne sera incrémentée qu’une seule fois l’intérieur de la boucle for
Boucle
Pour traiter beaucoup de données en série Schéma d’exécution
Schémas
somme=0;
Boucle for
int somme = 0;
for (int i = 0; i<10; i++) somme = somme + i; i=0;
Boucle while
int somme = 0; i<10?
int i = 0; oui
while (i<10) { somme = somme + i; non somme=somme+i;
i++; i++;
}
Que font ces deux boucles?
i: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
47
Les tableaux
On peut définir un tableau sur tous les types java ( types
primitifs, classes, interfaces, tableaux ).
type [ ] nom;
48
Attention:
Array a.length
Array list a.size()
Tableau String a.length()
49
Tableaux : Déclaration
50
Tableaux : Dimensionnement
51
Tableaux : Initialisation
52
Tableaux en Java : Synthèse
53
Tableaux multidimensionnel
54
Précision sur « system.out. »
55
Mise en forme
56
Les classes en Java
Architecture générale d’un
programme Java
}
}
59
Classes en Java
On appelle classe la structure d'un objet, c'est-à-dire la déclaration de
l'ensemble des entités qui composeront un objet.
Un objet est donc « issu » d'une classe, c'est le produit qui sort d'un moule.
En réalité on dit qu'un objet est une instanciation d'une classe
objet = instance
60
Structure d'une classe
• Chaque classe peut avoir :
– des attributs : ce sont des variables déclarées dans le corps de la
classe
– des méthodes : c'est le comportement de la classe, les
fonctionnalités qu'elle propose
• La méthode comporte une signature :
– visibilité (public, protected, private ou defaut)
– type de retour (void pour indiquer qu'il n'y a pas de retour)
– nom de méthode
arguments
public– class Employe{
– Levée possible d'exception (throws)
int age = 23 ; //Attribut ou membre de classe
}
• Le fichier .java doit avoir le même nom que la classe (Chemise.java)
} }
}
un constructeur porte le même nom que la classe dans laquelle il est défini
un constructeur n'a pas de type de retour (même pas void)
63
Les constructeurs
Constructeur par défaut
Le constructeur par défaut initialise les
Chemise(){}
variables de la classe aux valeurs par
défaut.
Chemise(){
id=0;
couleur=‘B’
prix=10.2f;
}
Constructeur surchargé
Chemise(int id, char couleur, float prix){
this.id=id;
this.couleur=couleur;
this.prix=prix;
}
64
Les constructeurs
L'appel de new pour créer un nouvel objet déclenche, dans
l'ordre :
L'allocation mémoire nécessaire au stockage de ce nouvel
objet et l'initialisation par défaut de ces attributs,
L'initialisation explicite des attributs, s'il y a lieu,
L'exécution d'un constructeur.
Un constructeur est une méthode d'initialisation.
Chemise(int id) {
this.id=id
} Erreur de compilation
Chemise(int id) {
this.id=id*2
66
}
Les constructeurs
Personne.java Définition d’un
public class Personne Constructeur. Le
{ constructeur par défaut
public String nom; (Personne() )n’existe plus.
public String prenom; Le code précédent occasionnera
public int age; une erreur
public Personne(String unNom,
String unPrenom,
int unAge) public class Application
{ {
nom=unNom; public static void main(String
prenom=unPrenom; args[])
age = unAge; {
} Personne jean = new Personne()
} jean.setNom("Jean") ;
Va donner une erreur à la compilation
} }
67
Les constructeurs
Quel constructeur va choisir Java lorsque vous allez créer votre objet ?
class Chemise{
int id;
char couleur;
float prix;
String description;
int quantite; Utilisation:
69
Déclaration des variables
Syntaxe:
type nom_variable [=value];
int id = 0;
Constante
•On déclare une constante avec le mot final
Exemple:
final int MAX_STOCK=100;
71
Déclaration des variables
72
Déclaration des variables
Exemple:
float f=1.2f
double d=34.8d
73
Déclaration des variables
Le type boolean
boolean abonne=true;
74
Déclaration des variables
0 1 2 3 4 indices
int[] tab;
tab = new int[5]; 10 20
tab[0] = 10; // initialiser le premier élément
tab[1] = 20; // initialiser le second élément tab.length=5
75
Déclaration des variables
boolean false
76
Catégories des variables
77
Catégories des variables
Les variables primitives
78
Catégories des variables
Les variables primitives
•La valeur affectée à la variable sera stockée dans l’espace mémoire réservé.
79
Catégories des variable
Les variables références
80
Catégories des variables
Les variables références: String
•on crée une référence sur une String
•Lorsqu’on déclare une variable objet , on est en fait entrain de faire la réservation
de l’espace mémoire pour la référence
message objet null
String message;
ref null
81 Hello
Catégories des variables
Les variables références: Les tableaux
•Un tableau contenant des éléments de type primitif
notes objet int [ ]
int[] notes={10,12,15};
reference 10 12 15
String[] animaux={‘’chat’’,’’poisson’’};
animaux
83
Déclaration des méthodes
Syntaxe:
Type_retour nom_method([arguments])
{
Exemple:
void afficherInfoChemise (){
84
Classe chemise
public class Chemise{
int id;
char couleur;
float prix;
String description;
int quantite;
void ajouterChemise (int nombre) {
quantite += nombre;
}
void afficherInfoChemise() {
System.out.println(id+ info);
}
}
85
Le mot-clé this
88
Surcharge
Exemple:
un autre Point
Point (Point p) {
x=p.x;
89
y=p.y;
}
Surcharge
Exemple (suite):
Point () {
x=0;
y=0;
}
Soit:
Point (int i, int j)
Point (Point p)
Point ()
90
3 méthodes portant des signatures différentes
Surcharge
Attention:
Exemple:
int f (int v)
et
double f (int v)
Variable d’instance:
Etudiant [class]
Chaque instance de la classe possède
ses propres valeurs des variables.
Class Etudiant{
String nom;
Variable d’instance:
Utilisation
On invoque les variables d’instance avec le nom de l’instance
93
Les attibuts static
Variable de classe:
•n'appartient pas à une instance particulière, elle
appartient à la classe. Etudiant [class]
•est partagée par toutes les instances de la classe
nbrEtudiants
Class Etudiant{ 0
3
2
1
String nom;
static int nbrEtudiants;
Etudiant [instance]
Etudiant(String nom){ nom Etudiant [instance]
Ahmed
this.nom=nom; nom
Fatma
nbrEtudiants++;
}
Etudiant [instance]
} nom
Marwa
Etudiant etud1 = new Etudiant (“Ahmed");
Etudiant etud2 = new Etudiant (“Marwa");
94 Etudiant etud3 = new Etudiant (“Fatma");
Les attibuts static
Variable de classe:
Utilisation
On invoque les variables static avec le nom de la classe
class Etudiant{
String nom;
static int nbrEtudiants; class Test{
public static void main(String[] args){
Etudiant(String nom){
this.nom=nom; System.out.println(Etudiant.nbrEtudiants);
nbrEtudiants++;
} }
} }
95
Les méthodes static
96
Les méthodes static
Puisque les méthodes static appartiennent à la classe,
elles ne peuvent en aucun cas accéder aux variables
d'instances qui appartiennent aux instances de la classe.
97
Un peu de syntaxe : construction et
communication avec un objet
Construction
Point p1 = new Point(1, 2);
Type réf allocation Constructeur, renvoie
dynamique l’adresse.
• Communication
p1.distance(p2 );
98
l’objet peut répondre au message pas de params.
Exemple
public class Personne {
public String nom;
public int anneeNaissance;
public int age() {return 2008 - anneeNaissance; }
}
class Utilisation {
public static void main(String[] args) { Déclaration de référence
Personne qui;
Création d’une instance
qui = new Personne();
qui.nom = "Pierre"; Manipulation de l’instance
qui.anneeNaissance = 1980; référée par la référence
System.out.println(qui.age());
}
qui nom: "Pierre"
}
anneeNaissance: 1980
Personne:
99 age()
Manipulation des références
class Circle {
public double x, y; // coordonnées du centre
private double r; // rayon du cercle
public Circle(double r) {
this.r = r;
}
public Circle(double a, double b, double c) {
x = a; y = b; r = c;
}
}
// Dans une méthode, par exemple, main:
Circle c1, c2;
c1 = new Circle(2.0, 3.0, 4.0);
c2 = c1; // c2 et c1 pointent vers le même objet
c2.r = c2.r – 1; // l’objet a le rayon réduit
c1 = new Circle(2.0); // c1 point vers un autre objet, mais c2 ne change pas
c1.x = 2.0; // on modifie le deuxième objet
c2 = c1; // maintenant, c2 pointe vers le 2ième objet aussi
x: 2.0 c2
x: 0.0
c1 y: 3.0 y: 0.0
r: 3.0
6. c1.x = 2.0; 6 c2
r: 2.0
x: 2.0 x: 2.0
y: 0.0 c1 y: 3.0
r: 2.0 7. c2 = c1; 7 r: 3.0
c2
x: 2.0
101 y: 0.0
r: 2.0
Manipulation des références
Soit l'objet suivant: Point
x y
102
Création des objets
Plan de construction
Classe « Chemise »
Objet 1 Objet 2
Référence 1 Référence 2
103
Référence d’un objet
104
Notion de référence
Chemise maChemise;
maChemise=new Chemise();
maChemise
maChemise.couleur=‘R’;
}
}
Stack Heap
Création d’une variable maChemise de type Chemise
105
Notion de référence
Stack Heap
Stack Heap
Lier l’objet créé et la variable maChemise
maChemise est la référence de l’objet créé
107
Notion de référence
Stack Heap
}
0x99f311
}
id 0
taChemise couleur '\u0000’
Stack Heap
109
Passage de paramètres
113
114
Passage de paramètres
Types Références:
static void augmenteSurface(Pays p) {
p.surface=p.surface+1;}
et un appel de cette méthode :
Pays p1=new Pays();
augmenteSurface(p1);
System.out.println(p1.surface);
115
116
Passage de paramètres en Java
Si un objet o transmet sa variable d'instance v en paramètre à
une méthode m, deux situations sont possibles :
si v est une variable primitive alors elle est passée par valeur : il
est impossible de la modifier dans m pour que v en retour
contiennent cette nouvelle valeur.
si v est un objet alors il est passé par référence: m pourra
modifier l'objet en utilisant une méthode de l'objet passé en
paramètre.
Lorsqu'un objet est passé en paramètre, ce n'est pas l'objet lui
même qui est passé mais une référence sur l'objet. La référence
est bien transmise par valeur et ne peut pas être modifiée mais
l'objet peut être modifié via un message (appel d'une méthode).
Pour transmettre des arguments par référence à une méthode, il
faut les encapsuler dans un objet qui prévoit les méthodes
nécessaires pour les mises à jour.
117
Transmission de paramètres
Exemple
public class Essai {
public static void f1 (int x) {
x=2;
}
118
Transmission de paramètres
Transmission d'instance d'objet
Soit l'objet suivant
//Fichier Point.java
public class Point {
private int x, y; // coordonnées 2D du points
// Ficher Main.java
120