Programmation Orientée Objet en Java
Une brève histoire de Java
(cid:1) Inventé par Sun 1990s: répondre à 5 objectifs
(cid:1) utiliser une méthodologie orientée objet, (cid:1) permettre à un même programme d'être exécuté sur
plusieurs systèmes d'exploitation différents, plusieurs systèmes d'exploitation différents, (cid:1) pouvoir utiliser de manière native les réseaux
informatiques,
(cid:1) pouvoir exécuter du code distant de manière sûre, (cid:1) être facile à utiliser et posséder les points forts des
langages de programmation orientés objet comme le C++.
2
Java (cid:1) Langage orienté objet
(cid:1) Notions de classes, héritage, …
(cid:1) Beaucoup d’outils disponibles (packages)
(cid:1) JDK (Java Development Kit)
(cid:1) Historique
(cid:1) Sun Microsystems (cid:1) Sun Microsystems (cid:1) 1991: conception d'un langage indépendant du
hardware
(cid:1) 1994: browser de HotJava, applets (cid:1) 1996: Microsoft et Netscape commencent à
soutenir
(cid:1) 1998: l‘édition Java 2: plus stable, énorme librairie
3
Java c'est quoi ?
(cid:1) Java est un environnement de programmation objet développé par Sun,
adapté à la distribution d'applications sur Internet.
(cid:1) 4 éléments :
(cid:1) Java est un langage de programmation objet
(cid:1) Une machine virtuelle
(cid:1) Des bibliothèques de classes ou des packages : API Application
Programming Interface (2500 classes dans Java 1.4)
(cid:1) Ensemble d'outils : java, javac, jdb javadoc, jar, ...
execution compilation debugger documentation archivage
4
Les outils pour Java (cid:1) Le Java Development Kit de Sun (incluant une
machine virtuelle Java), disponible sur www.sun.com
(cid:1) Outils
(cid:1) java : JVM, interpréteur pour les programmes java
(cid:1) javac : Compilateur Java
(cid:1) appletviewer : JVM pour l'exécution des applets appletviewer : JVM pour l'exécution des applets
(cid:1) jar : Création et manipulation d 'archive java
(cid:1) javadoc : Générateur de documentation Java au format HTML
(cid:1) javap : désassembleur de classes Java compilées
(cid:1) jdb : débogueur Java en ligne de commande
(cid:1) javah : génère le header C ou C++ pour créer un pont compatible entre
java et C/C++
5
Java : principe fondateur de sa portabilité "write once, run everywhere"
6
Langages compilés et limitations
fichier source du programme
Compilation
Légende
Indépendant de la machine
Dépendant de la machine
Exécutable
ExécutableExécutable
Exécutable
Exécutable
Unix
Linux
Windows
MacOS
PalmOS
Architecture 1 Risc 6000
Architecture 2 Intel x86
Architecture 3 Mac G5
Architecture 4 Intel xScale
7
Portabilité (cid:1) Notion de portabilité
Capacité d'un programme à être indépendant du système d'exploitation et de l'architecture machine
Impossible !
Programme portable
Unix
Linux
Windows
Architecture 1 Risc 6000
Architecture 2 Intel x86
8
Java et la portabilité
(cid:1) Solution proposée:
Construire une machine virtuelle: (cid:1) joue le rôle de plateforme virtuelle (cid:1) dépendante de l'architecture machine et du SE (cid:1) opère un langage machine virtuel indépendant de (cid:1) opère un langage machine virtuel indépendant de
l'architecture réelle et du SE réel
Code source Java
Programme Java
Machine virtuelle
SE / Architecture
9
Pseudo-Langage interprété Schéma du principe Java
fichier source du programme
Compilation
Programme Java Programme Java
Programme portable !
Machine virtuelle
Machine virtuelle
Machine virtuelle
Machine virtuelle
Machine virtuelle
Unix
Linux
Windows
MacOS
PalmOS
Architecture 1 Risc 6000
Architecture 2 Intel x86
Architecture 3 Mac G5
Architecture 4 Intel xScale
10
Compilation en Java → bytecode
(cid:1) En Java, le code source n’est pas traduit
directement dans le langage de l’ordinateur (cid:1) Il est d’abord traduit dans un langage appelé
« bytecode », langage d’une machine virtuelle « bytecode », langage d’une machine virtuelle (JVM ; Java Virtual Machine) définie par Sun (cid:1) Ce langage est indépendant de l’ordinateur
qui va exécuter le programme
11
La compilation fournit du bytecode
(cid:1) Programme Java
(cid:1) Compilateur: javac
Programme source PremiereAppli.java
(cid:1) Programme en bytecode, indépendant de l'ordinateur
compilateur
12
Bytecode PremiereAppli.class
Java Virtual Machine (cid:1) Les systèmes qui veulent pouvoir exécuter un
programme Java doivent fournir une JVM (cid:1) A l'heure actuelle, tous les systèmes ont une
JVM (Linux, Windows, MacOs,…) (cid:1) Il existe aussi depuis peu quelques JVM « en 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
JVM sous Lunix
JVM sous MacOs
JVM sous Windows
(cid:1) Si un système possède une JVM, il peut exécuter tous les fichiers .class compilés sur n'importe quel autre système
14
Le bytecode peut être exécuté par n'importe quelle JVM
Fichiers Fichiers .java
Fichiers Fichiers .class
JVM Linux
Compilateur Java
JVM Windows
15
Avantages de la JVM pour Internet
(cid:1) 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
(cid:1) 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
(cid:1) La JVM apporte donc (cid:1) 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
(cid:1) 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
(cid:1) Les techniques « Just In Time (JIT) » ou « Hotspot » réduisent ce problème : elles permettent de ne traduire qu'une seule fois en code natif et à la volée les instructions qui sont exécutées
16
Applications indépendantes et applets
(cid:1) Java permet de développer deux sortes de
programmes: (cid:1) Applets exécutées dans l’environnement/JVM d’un (cid:1) Applets exécutées dans l’environnement/JVM d’un navigateur Web et chargées par une page HTML (cid:1) Applications indépendantes avec ou sans interface graphique
17
Applet (cid:1) Objet de la classe Java Applet, référencé dans une page Web (écrite dans le langage HTML) (cid:1) 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 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" <APPLET code="HelloApplet.class" width=500 height=300> Votre navigateur ne peut exécuter une applet </APPLET> </BODY> </HTML>
Dimensions de l'emplacement réservé à l'affichage de l'applet
19
import java.awt.Graphics; import java.applet.Applet; public class HelloApplet extends Applet {
public void paint(Graphics g) { public void paint(Graphics g) { g.drawString("Hello world", 50, 25); }
Zone où commencera l'affichage : x = 50 pixels, y = 25 pixels
}
20
Représente l’emplacement de la page Web où l’applet s’affichera
Étapes pour l’exécution d’une applet
Client Client HTTP
1. Demande chargement page Web qui contient une applet Web qui contient une applet
2. Chargement de la page Web de la classe de l’applet
Serveur Serveur HTTP
Exécution de l’applet Dans la JVM du client
21
Remarques
(cid:1) Le navigateur a sa propre machine virtuelle (cid:1) Un programme Java spécial démarré par le navigateur va lancer certaines méthodes de la navigateur va lancer certaines méthodes de la classe Applet : init(), start(), stop(), destroy(),
paint()
(cid:1) init() est exécuté seulement quand l’applet est lancée pour la première fois (cid:1) paint() dessine l'applet dans la page Web
22
Exécution de l’applet
(cid:1) Soit:
(cid:1) A partir du navigateur (cid:1) A partir de l’appletviewer (cid:1) A partir de l’appletviewer (cid:1) Javac HelloApplet.java ->
HelloApplet.class
(cid:1) Appletviewer HelloApplet.html
23
Utilité des applets
(cid:1) Les applets permettent de faire des pages Web plus riches (grâce aux possibilités offertes par Java)
(cid:1) La page Web peut contenir (cid:1) La page Web peut contenir
– des animations ou des mises en forme complexes pour mettre en valeur certaines informations – des résultats de calculs complexes – des informations « dynamiques » (pas connues au moment où la page Web statique est créée) trouvées en interrogeant une base de données
24
Applications :la console vs G.U.I
Programme à interface console
Programme à interface graphique : GUI (Graphical User Interface)
L’utilisateur fournit des infos au clavier sous forme de lignes de texte. Le programme décide du séquencement des opérations. L’opérateur est sollicité au moment voulu.
L’interaction programme-opérateur se fait essentiellement via des composants graphiques. C’est la programmation évènementielle :le programme réagit à des évènements provoqués par l’utilisa- teur.
25
Application indépendante
Exécution de la classe de lancement de l’application
(dite classe principale ; main en anglais) ;
java lance l’interprétation du code de la méthode main() d’une classe bien déterminée méthode main() d’une classe bien déterminée Exemple: public class HelloWorld { public static void
main(String[] args) { System.out.println("Hello World!"); } }
26
Structure d’une application
(cid:1) Placer une classe
dans un fichier source (cid:1) Placer les méthodes
dans une classe
(cid:1) Placer les instructions (cid:1) Placer les instructions dans les méthodes
Fichier source
Fichier de classes
Méthode 1 instructions
Méthode 2 instructions
27
Mise en œuvre
28
Architecture générale d’un programme Java
(cid:1) Programme source Java = ensemble de fichiers « .java »
(cid:1) Chaque fichier « .java » contient une ou plusieurs Chaque fichier « .java » contient une ou plusieurs définitions de classes
(cid:1) Au plus une définition de classe public par fichier « .java » avec nom du fichier = nom de la classe publique
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: (cid:1) En écrivant le code dans un simple éditeur de texte
(cid:1) Compilation et exécution du code en ligne de commande DOS
(cid:1) En utilisant un environnement de développement (IDE)
(cid:1) Eclipse (cid:1) Netbeans (http://www.netbeans.com) (cid:1) Borland JBuilder (http://www.borland.com/jbuilder) (cid:1) IBM WebSphere Studio
(http://www.ibm.com/software/awdtools)
(cid:1) Sun ONE Studio (http://wwws.sun.com/software/sundev) (cid:1) Microsoft .Net Studio (http://msdn.microsoft.com/vstudio) (cid:1) … Crimson Editor
32
Les outils Java
33
Une première application Application HelloWorld
(cid:1) Créer un fichier texte : HelloWorld.java (cid:1) Règle de bonne pratique : 1 classe par fichier et 1 fichier
par classe
public class HelloWorld
public static void main (String[]args)
La première ligne du programme doit être la déclaration de la classe
Tout programme doit contenir une méthode main qui porte la signature ci-contre main qui porte la signature ci-contre
System.out.println("Hello the World");
Écrire à l’écran “Hello the World”
Fermer les accolades
{
}
{ {
}
• Compiler le programme : javac HelloWorld.java • Le compilateur génère le bytecode dans le fichier : HelloWorld.class • Exécuter l’application : java HelloWorld • « Hello the World » s’affiche à l’écran 34
Syntaxe de Java
(cid:1) Le code est écrit dans des blocs :
Publicité
(cid:1) délimités par { } (cid:1) qui peuvent être imbriqués
(cid:1) Les commentaires :
(cid:1) Sur une seule ligne : // mon commentaire (cid:1) Sur plusieurs lignes : /* */
(cid:1) Les constantes sont définies avec le mot clé final : leur valeur ne peut pas être modifiée: final double pi=3.14 ;
(cid:1) Types primitifs: int, long, float, double, char, String,
boolean,..
35
Types Primitifs de Java
36
Initialisation
37
Types de données primitifs
(cid:1) Explication:
(cid:1) byte : codé sur 8 bits (cid:1) 28 valeurs (cid:1) (–27) to (27–1) = -128 à 127 (cid:1) int : codé sur 32 bits (cid:1) 232 valeurs (cid:1) (–231) to (231–1)
(cid:1) Déclaration et initialisation :
int x=12; short x= 32; (short x=33000; // Hors limite)
(cid:1) int (cid:1) short (cid:1) long long x= 200L; // Nombre accolé à un L (cid:1) long long x= 200L; // Nombre accolé à un L (cid:1) byte (cid:1) double (cid:1) float (cid:1) char (cid:1) boolean
byte x=012; // Nombre commençant avec un 0 double x=23.2323; float x= 23.233F; // Nombre accolé à un F char c=‘a’; char c=‘\u0061’; char c=(char)97; boolean b=true;
38
Conversion (cid:1) Vérification de typage utilise toujours le type apparent
(cid:1) cast
(cid:1) (nom d’une classe) expression
(cid:1) Conversion implicite des valeurs d’un type en un autre
(cid:1) Seulement pour les types primitifs (cid:1) Seulement pour les types primitifs
(cid:1) Ordre croissant de généralité
(cid:1) byte -> short -> int -> long -> float -> double
(cid:1) i = l (cid:1) l = i (cid:1) int = char (cid:1) char = int
illegal legal legal illegal
39
Conversions de types
40
Conversions de types
41
Opérateurs
42
Opérateurs
43
Condition et test (cid:1) Une condition correspond à vrai ou faux (cid:1) E.g. (age < 50) (cid:1) Tester une condition: if condition A; else B;
(cid:1) si condition est satisfaite, alors on fait A; (cid:1) si condition est satisfaite, alors on fait A; (cid:1) sinon, on fait B (cid:1) E.g. if (age < 65)
System.out.println("jeune");
else
System.out.println("vieux");
44
Attention: un ; après le for( ), itère sur la condition, et ‘somme’ ne sera incrémentée qu’une seule fois
Attention: ‘i’ n’est déclarée ici qu’à l’intérieur de la boucle for
Boucle
(cid:1) Pour traiter beaucoup de données en série (cid:1) Schémas
(cid:1) Boucle for
int somme = 0; for (int i = 0; i<10; i++) somme = somme + i;
(cid:1) Boucle while
int somme = 0; int somme = 0; int i = 0; while (i<10) { somme = somme + i; i++;
(cid:1) Que font ces deux boucles?
}
Schéma d’exécution
somme=0;
i=0;
i<10? i<10? oui
non
somme=somme+i; i++;
i:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
somme: 0
0, 1, 3, 6, 10, 15, 21, 28, 36, 45, sortie
45
Boucle (cid:1) do A while (condition)
(cid:1) Faire A au moins une fois (cid:1) Tester la condition pour savoir s’il faut refaire A
int somme = 0; int i = 15; while (i<10) { somme = somme + i; i++; } }
somme = 0
int somme = 0; int i = 15; do { somme = somme + i;
i++;
}
while (i<10)
Schéma d’exécution somme=0;
i=15;
i<10? oui
non
somme=somme+i; i++;
Schéma d’exécution somme=0;
i=15;
somme=somme+i; i++;
somme = 15
46
i<10?
oui
non
Les tableaux en Java
47
Les tableaux (cid:1) On peut définir un tableau sur tous les types java ( types
primitifs, classes, interfaces, tableaux ).
(cid:1) Syntaxe de définition d'un tableau :
type [ ] nom;
(cid:1) Un tableau est un objet qui contient un attribut indiquant sa taille
: « length »
int [ ] tab = new int[50]; System.out.println("Taille du tableau " + tab.length );
48
Tableau
Attention: Array Array list String
a.length a.size() a.length()
(cid:1) Pour stocker une série de données de même nature (cid:1) Déclaration
int [] nombre; // une série de valeurs int dans le tableau nommé nombre String [][] etiquette; // un tableau à deux dimensions de valeurs String
(cid:1) Création
nombre = new int[10]; // crée les cases nombre[0] à nombre[9] nombre = new int[10]; // crée les cases nombre[0] à nombre[9] etiquette = new String[3][5]; // crée etiquette[0][0] à etiquette[2][4] int[] primes = {1, 2, 3, 5, 7, 7+4}; // déclare, crée de la bonne taille et initialise
(cid:1) Utilisation
nombre[0] = 4; for (int i=1; i<nombre.length; i++) nombre[i]=nombre[i]+1; etiquette[2][3] = "un texte"; String texte = etiquette[2][3];
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
(cid:1) Programme source Java = ensemble de fichiers « .java » (cid:1) Chaque fichier « .java » contient une ou plusieurs
définitions de classes définitions de classes
(cid:1) Au plus une définition de classe public par fichier « .java » avec nom du fichier = nom de la classe publique
public class NomDeClasse
(cid:1) Si plus d’une classe dans un fichier .java, javac génère des fichiers .class séparés pour chaque classe
58
2 classes dans 2 fichiers
/* Modélise un point de coordonnées x, y */ public class Point { private int x, y;
public Point(int x1, int y1) { x = x1; y = y1; }
public int getx(){return x;}
public double distance(Point p) { return Math.sqrt((x-p.x)*(x-p.x) + (y-p.y)*(y-p.y)); }
Fichier TestPoint.java
}
/* Pour tester la classe Point */ public class TestPoint {
public static void main(String[] args) {
Point p1 = new Point(1, 2);
int abs = p1.getx( );
Fichier Point.java
● C'est la méthode interprétée lors de l'exécution, l'entrée. ● Elle est static : ne nécessite pas de création d'objet pour être invoquable
Point p2 = new Point(5, 1); System.out.println("Distance : " + p1.distance(p2));//Afficher sur la sortie standard
}
}
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
Une classe est composée de deux parties :
•Les attributs (parfois appelés données membres) : il s'agit des données représentant l'état de l'objet
•Les méthodes (parfois appelées fonctions membres): il s'agit des opérations applicables aux objets
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
public void poserConge(String dateDebut, String dateFin){
//Traitements réalisés par la fonctionnalité poser congé
}
}
61
Déclaration de la classe
public class Chemise {
/*Déclaration des attributs*/
/*Déclaration des méthodes*/ /*Déclaration des méthodes*/
//commentaire sur une seule ligne
/*commentaires sur plusieurs lignes*/
}
• Le fichier .java doit avoir le même nom que la classe (Chemise.java)
• Le nom de la classe doit commencer par une majiscule
62
Notation Camel Case. Exemple: CompteBancaire, AgenceVoyage
Les constructeurs
Pour créer un objet à partir d'une classe, on utilise l'opérateur new.
public class Test{
public static void main(String[] args){
L’opérateur new fait appel au constructeur de la classe
Chemise maChemise; Chemise maChemise;
class Chemise{ class Chemise{
maChemise=new Chemise();
Chemise () {}
}
}
}
(cid:2)un constructeur porte le même nom que la classe dans laquelle il est défini (cid:2)un constructeur n'a pas de type de retour (même pas void)
63
Les constructeurs
(cid:3) Constructeur par défaut
Chemise(){}
Chemise(){
Le constructeur par défaut initialise les variables de la classe aux valeurs par défaut.
id=0; id=0; couleur=‘B’ prix=10.2f;
}
(cid:3) Constructeur surchargé
Chemise(int id, char couleur, float prix){
this.id=id; this.couleur=couleur; this.prix=prix;
64
}
Les constructeurs (cid:1) L'appel de new pour créer un nouvel objet déclenche, dans
l'ordre : (cid:1) L'allocation mémoire nécessaire au stockage de ce nouvel
objet et l'initialisation par défaut de ces attributs, (cid:1) L'initialisation explicite des attributs, s'il y a lieu, (cid:1) L'exécution d'un constructeur. (cid:1) L'exécution d'un constructeur.
(cid:1) Un constructeur est une méthode d'initialisation.
public class Application {
public static void main(String args[]) {
Personne jean = new Personne() jean.setNom("Jean") ;
} }
65
Le constructeur est ici celui par défaut (pas de constructeur défini dans la classe Personne)
Les constructeurs
• Si vous ne créez pas un constructeur dans votre classe, le compilateur va automatiquement vous créer un constructeur par défaut implicite
• Si le constructeur surchargé est créé, le constructeur par défaut implicite ne sera plus créer par le compilateur
• La plateforme java différencie entre les différents constructeurs déclarés au • La plateforme java différencie entre les différents constructeurs déclarés au sein d’une même classe en se basant sur le nombre des paramètres et leurs types.
On ne peut pas créer deux constructeurs ayant le même nombre et types des paramètres.
Chemise(int id) {
this.id=id
} Chemise(int id) {
this.id=id*2
}
Erreur de compilation
66
Les constructeurs
Personne.java
public class Personne {
public String nom; public String prenom; public int age; public int age; public Personne(String unNom,
String unPrenom, int unAge)
{
nom=unNom; prenom=unPrenom; age = unAge;
} } Va donner une erreur à la compilation
Définition d’un Constructeur. Le constructeur par défaut (Personne() )n’existe plus. Le code précédent occasionnera une erreur une erreur
public class Application {
public static void main(String
args[])
{
Personne jean = new Personne() jean.setNom("Jean") ;
} }
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; int quantite;
Publicité
Chemise () {}
Chemise(int id) {
this.id=id;
}
Utilisation: Utilisation:
Chemise ch1=new Chemise();
Chemise ch1=new Chemise(122);
Chemise(int id, char couleur) {
Chemise ch1=new Chemise(122, ‘B’);
this.couleur=couleur;
}
} 68
Destructeur
le programmeur java n’a pas à s’occuper lui-même de libérer la mémoire en supprimant les objets devenus inutiles, c’est le rôle du Garbage Collector
Le Garbage Collector est exécuté automatiquement dès que la mémoire disponible devient inférieure à un certain seuil. disponible devient inférieure à un certain seuil.
Le destructeur est une méthode spéciale qui sera appelée lorsque l'objet sera nettoyé de la mémoire par le Garbage Collector.
Java Destructor finalize()
69
Déclaration des variables
Syntaxe:
type nom_variable [=value];
int id = 0;
Quel nom choisir pour notre variable? Quel nom choisir pour notre variable?
Les noms des variables sont case-sensitive
Les white space ne sont pas permis
Évitez les mots réservés de java
• Le nom de la variable doit commencer par une lettre minuscule.
Notation Camel Case. Exemple: age, quantiteStock
70
Déclaration des variables
Constante
•On déclare une constante avec le mot final
Exemple:
final int MAX_STOCK=100;
•Le nom de la constante doit être en majuscule. •Si le nom est composé de plusieurs mots, on utilise _ pour la séparation des mots
Exemple:
final int TAILLE; final int MAX_STOCK; final int CAPACITE_DANS_STOCK;
71
Déclaration des variables
Les types entiers
byte
short short
int
long
Valeur minimale
Valeur maximale
Codé sur
- 128
- 32 768 - 32 768
127
32767 32767
- 2147 483 648
2 147 483 647
- 922337203685477 5808
922337203685477 5807
8 bits
16 bits 16 bits
32 bits
64 bits
72
Déclaration des variables
Les types réels
Valeur minimale
Valeur maximale
Codé sur
float
double double
1.4E45
4.9E3 4.9E3
3.4028235E38
1.7976931348623 1.7976931348623 157E308
4 octets
8 octets 8 octets
Exemple:
float f=1.2f double d=34.8d
73
Déclaration des variables
Le type caractère char
char sexe=‘M’;
Le type boolean
boolean abonne=true; boolean abonne=true;
Le type chaine de caractère String
String message = ‘’Bonjour les amis’’;
74
Déclaration des variables
Le tableaux
1er indice
int[] tab; tab = new int[5]; tab[0] = 10; // initialiser le premier élément tab[0] = 10; // initialiser le premier élément tab[1] = 20; // initialiser le second élément
0 1 2 3 4
indices
10 20
tab.length=5 tab.length=5
int[] tab = { 10, 20, 30, 40, 50}; //déclaration + initialisation
75
Déclaration des variables
Les valeurs par défaut des variables
Type
byte
short short
int
long
float
double
char
boolean
76
Valeur par défaut
0
0 0
0
0L
0.0f
0.0d
'\u0000'
false
Catégories des variables
Il existe deux sortes de variables :
•Une variable primitive contient des bits qui représentent sa valeur.
Exemple : int, foat , boolean.
•Une variable référence contient des bits qui indiquent comment accéder à l'objet.
Exemple : String, Chien, Joueur,...
77
Catégories des variables
Les variables primitives
78
Catégories des variables
Les variables primitives
•Déclaration d’une variable primitive réservation de l’espace mémoire.
int age; boolean abonne; boolean abonne; char sexe;
age
abonne
sexe
•La valeur affectée à la variable sera stockée dans l’espace mémoire réservé.
age=18; abonne=false; sexe=‘M’;
79
age
abonne
sexe
1818
false false
MM
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
String message;
message=‘’Bonjour’’; //équivalent à message=new String(‘’Bonjour’’);
message=‘’Hello’’;
81
message
refref refref
message
refref
message
refref
objet null
null null
objet String
Bonjour
objet String
Bonjour
Hello
Catégories des variables
Les variables références: Les tableaux
•Un tableau contenant des éléments de type primitif
int[] notes={10,12,15};
notes
reference
•Un tableau contenant des éléments de type objet
String[] animaux={‘’chat’’,’’poisson’’};
objet int [ ]
1010
int int
1212
int int
1515
int int
objet String
objet String
chat
poisson
animaux
reference
refref
refref
82
Catégories des variables
Récapitulation sur les types objets et les types primitifs
83
Déclaration des méthodes
Syntaxe:
Type_retour nom_method([arguments]) {
}
Exemple: Exemple:
void afficherInfoChemise (){
}
Le nom de la méthode doit commencer par un verbe
84
Classe chemise
public class Chemise{
int id; char couleur; float prix; String description; int quantite; void ajouterChemise (int nombre) { quantite += nombre;
} }
void dimunierChemise (int nombre) {
quantite - = nombre;
}
void afficherInfoChemise() {
System.out.println(id+ info);
}
}
85
Le mot-clé this
Le mot-clé this permet de désigner l’objet courant,
this permet d'accéder aux attributs et méthodes de l’objet courant
(cid:3) Pour manipuler un attribut de l’objet courant:
this.couleur this.couleur
(cid:3) Pour manipuler une méthode de la super-classe :
this.ajouterChemise (100)
(cid:3) Pour faire appel au constructeur de l’objet courant:
this()
86
La classe Montre, un peu de syntaxe
class UnNomdeClasse { /* le corps */ }
• class indique la définition d'une classe nommée
Montre.
• Un nom de classe commence par une majuscule
• Le mot-clé public indique que la classe est utilisable
public class Montre {
/*Définissons les attributs*/ private int heure , minute ; private int heure , minute ;
de « l'extérieur ».
• Les attributs sont typés (int) : • Les attributs sont typés (int) :
/* Définissons les méthodes*/ public int getHeure() { return heure;
} public int getMinute() { return minute;
} public void setMinute(int m) {
minute = m;
} public void setHeure(int h) {
heure = h;
} } 87
<Type> nomAttribut = valeurInit;
• La syntaxe générale pour définir une méthode :
<Type retour> nomMethode (<listeparamètres>)
• Les noms de méthodes et attributs commencent par une minuscule, la frontière des mot est marquée par une majuscule.
Publicité
• Tout ce qui est entre /* et */ est un commentaire
(pouvant aller sur plusieurs lignes).
• // commentaire jusqu'à la fin de la ligne
Surcharge (cid:1) Deux méthodes membres qui
(cid:1) appartiennent à la même classe (cid:1) portent un identificateur identique (même nom de
fonction)
(cid:1) possèdent des paramètres différents (cid:1) possèdent des paramètres différents
sont des méthodes surchargées
88
Surcharge (cid:1) Exemple:
Un point géométrique peut être défini par:
(cid:1) ses coordonnées données explicitement (cid:1) ses coordonnées données explicitement
Point (int i, int j) {
x=i;
y=j;
}
(cid:1) un autre Point
Point (Point p) {
x=p.x; y=p.y;
}
89
Surcharge (cid:1) Exemple (suite):
(cid:1) des coordonnées par défaut
Point () { x=0; x=0; y=0;
}
Soit:
Point (int i, int j) Point (Point p) Point ()
90
3 méthodes portant des signatures différentes
Surcharge (cid:1) Attention:
Pas de différenciation sur le type de retour
Exemple:
(cid:1) int f (int v)
et
(cid:1) double f (int v)
ne sont pas différentiable
91
Les attributs static
Variable d’instance:
Chaque instance de la classe possède ses propres valeurs des variables.
Class Etudiant{
String nom; String nom;
Etudiant [class]
Etudiant(String nom){
this.nom=nom;
}
}
Etudiant [instance]
Etudiant [instance]
nom
Ahmed
nom
Marwa
Etudiant etud1 = new Etudiant (“Ahmed"); Etudiant etud2 = new Etudiant (“Marwa");
92
Les attibuts static
Variable d’instance:
Utilisation
On invoque les variables d’instance avec le nom de l’instance
Class Etudiant{
String nom; String nom;
class Test{
public static void main(String[] args){ public static void main(String[] args){
Etudiant(String nom){
this.nom=nom;
}
}
}
}
Etudiant etudiant=new Etudiant();
System.out.println(etudiant.nom);
93
Les attibuts static
Variable de classe:
•n'appartient pas à une instance particulière, elle appartient à la classe. •est partagée par toutes les instances de la classe
Etudiant [class]
nbrEtudiants
123 0
Etudiant [instance] nom Ahmed
Etudiant [instance] nom Fatma
Etudiant [instance] nom Marwa
Class Etudiant{
String nom; String nom; static int nbrEtudiants;
Etudiant(String nom){
this.nom=nom; nbrEtudiants++;
}
}
Etudiant etud1 = new Etudiant (“Ahmed"); Etudiant etud2 = new Etudiant (“Marwa"); Etudiant etud3 = new Etudiant (“Fatma");
94
Les attibuts static
Variable de classe:
Utilisation
On invoque les variables static avec le nom de la classe
class Etudiant{
String nom; String nom; static int nbrEtudiants;
class Test{
public static void main(String[] args){
Etudiant(String nom){
this.nom=nom; nbrEtudiants++;
}
}
}
System.out.println(Etudiant.nbrEtudiants);
}
95
Les méthodes static
Le comportement d’une méthode statique ne dépend pas de la valeur des variables d'instance
class MaClassMath{
static int min(int a , int b){ static int min(int a , int b){
Utilisation: L'appel à une méthode statique se fait en utilisant le nom de la classe. utilisant le nom de la classe.
if(a<b){
return a;
}else{
return b;
}
}
}
96
class Test { public static void main ( String [] args ){
int x = MaClassMath .min (21 ,4);
} }
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.
•Les méthodes d’instances accèdent aux variables d’instance et méthodes d’instances •Les méthodes d’instances accèdent aux variables de classe (static) et méthodes de classe (static) • Les méthodes de classe (static) accèdent aux variables de classe (static) et méthodes de classe (static) • Les méthodes de classe (static) n’accèdent pas aux variables de d’instance et méthodes d’instance • Dans une méthode static on ne peut pas utiliser this
97
Un peu de syntaxe : construction et communication avec un objet
(cid:1) Construction
Point
p1 =
new
Point(1, 2);
Type
réf
allocation
dynamique
Constructeur, renvoie l’adresse.
• Communication
p1.distance(p2 );
réf de la cible message
type du message/
params. du
commande/requête
int abs = p1.getx( );
l’objet peut répondre au message
98
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) { public static void main(String[] args) {
Déclaration de référence Déclaration de référence
Personne qui; qui = new Personne(); qui.nom = "Pierre"; qui.anneeNaissance = 1980; System.out.println(qui.age());
Création d’une instance
Manipulation de l’instance référée par la référence
}
}
99
qui
nom: "Pierre"
anneeNaissance: 1980
Personne:
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; 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
(cid:1) Que faire du premier objet?
(cid:1) Aucune référence ne pointe vers lui (cid:1) L’objet est perdu et inutilisable (cid:1) Ramasse miette (garbage collector) va récupérer l’espace occupé par l’objet
(cid:1) Comparaison des références
(cid:1) (c1 == c2): est-ce que c1 et c2 pointent vers le même objet?
100
Illustration
1. Cercle c1, c2;
1
c1
c2
null
2. c1 = new Cercle(2.0, 3.0, 4.0);
2
3. c2 = c1;
3
c1
c2
x: 2.0 y: 3.0 r: 4.0
null
4. c2.r = c2.r – 1;
4
5. c1 = new Cercle(2.0);
5
6. c1.x = 2.0;
6
c1
c2
x: 2.0 y: 3.0 r: 3.0
x: 2.0 y: 0.0 r: 2.0
101
c1
c2
x: 2.0 y: 3.0 r: 4.0
null
c1 c1
c2
x: 2.0 y: 3.0 y: 3.0 r: 3.0
null
c1
c2
7. c2 = c1;
7
c1
c2
x: 2.0 y: 3.0 r: 3.0
x: 0.0 y: 0.0 r: 2.0
x: 2.0 y: 3.0 r: 3.0
x: 2.0 y: 0.0 r: 2.0
Manipulation des références (cid:1) Soit l'objet suivant:
Point
x
y
Programme
Espace des variables
Espace mémoire
Point p1, p2, p3; Point p1, p2, p3;
p1 = new Point (1,2);
p2 = new Point (3,4);
p3 = p2;
p2 = p1;
p1 p1
p2
p3
Point Point 1
Point 3
2
4
102
Création des objets
Plan de construction
17, Rue Carthage 17, Rue Carthage
9, Rue Hannibal
23, Rue des anges
Classe « Chemise