DDG
DDG
DDG
Programmation Orientée-Objet
Le language JAVA
Maher HENI
henimaher@gmail.com
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
2
Maher HENI Cours POO/JAVA
Introduction à Java
3
Introduction à Java
Progression
Cours POO/JAVA
Maher HENI
4
Introduction à Java
Origine du langage
Développé par SunSoft pour réaliser le développement de
systèmes embarqués
Projet « Oak »
Cours POO/JAVA
Quelques liens
– http://www.javasoft.com/
– http://www.sunsoft.com/
– http://www.developer.com/directories/pages/dir.java.htm/
(anciennement www.gamelan.com)
Maher HENI
– http://www.javaworld.com/
– http://tips.iworld.com/ sélectionnez « Java »
5
Introduction à Java
– Pointeurs
– Surcharge des opérateurs
– …
de 30 à 35 %
6
Introduction à Java
systèmes répartis
– Classes d’accès aux ressources d’un serveur Web
7
Introduction à Java
8
Introduction à Java
9
Introduction à Java
10
Introduction à Java
Le JDK
Il contient :
– Un ensemble de classes de base regroupées en packages
Cours POO/JAVA
Il est gratuit
11
Introduction à Java
– …
L’offre actuelle
– Jbuilder 4 (Inprise)
– Visual J++ (Microsoft)
– Visual Age (IBM)
Maher HENI
12
Introduction à Java
13
Introduction à Java
JDBC
– Accès aux bases de données relationnelles
Beans
– Composant Java
Sécurité
Cours POO/JAVA
– Support de CORBA
14
Introduction à Java
Hello Word
class Hello {
int k = 5;
public static void main (String argv[])
{
Hello hello = new Hello();
for (int I = 0; I < hello.k; I++)
hello.SayHello();
Cours POO/JAVA
}
public void SayHello()
{
System.out.println("Hello Java World !!! ");
}
}
Edit Hello.java
Maher HENI
Javac Hello.java
Java Hello
15
Import java.util.Scanner;
16
Maher HENI Cours POO/JAVA
La syntaxe
17
La syntaxe
Package
Classe
Attributs
Maher HENI
Méthodes
18
La syntaxe
class Test {
19
La syntaxe
– D’un type
– D’un nom
« void » est le mot-clé signifiant que la méthode ne renvoie
pas de valeur
class Test {
int calculer (int taux, float delta) {
Maher HENI
20
La syntaxe
Bloc d’instructions
d’instructions
{
int i = 0;
if (i==0)
System.out.println ("Valeur de i : " + i);
Maher HENI
21
La syntaxe
Instructions possibles
Appel de méthode
Affectation
Cours POO/JAVA
22
La syntaxe
class Test {
int calculer (int taux, float delta) {
return taux * delta;
}
}
Maher HENI
23
La syntaxe
{
int compteur;
int indice = 0;
Voiture golf;
Voiture twingo = new Voiture();
Maher HENI
24
La syntaxe
{
{
int compteur;
…
// compteur est accessible
}
25
La syntaxe
Les mots réservés (if, class, int…) ne peuvent pas être utilisés
minuscules
– Chaque mot qui compose le nom commence par une majuscule
26
La syntaxe
Point d’entrée
class Test {
27
La syntaxe
Type caractère
char 16 bits non signé UNICODE2
Maher HENI
Type booléen
boolean 1 bit deux valeurs possibles : true ou false
28
La syntaxe
29
La syntaxe
L’affectation
class Test {
int calculer () {
int i = 0;
int j = 6;
i = (j + 5) * 3;
return i + j;
}
}
Maher HENI
30
La syntaxe
x = y * z ; //x vaut 6
x += 2 ; //x vaut 8
y = x / 4 ; //y vaut 2
y =x % 2 ; //y vaut 0
Opérateurs unaires
int x, y;
Cours POO/JAVA
x = 3;
y = -x ; //y vaut -3
y = ++x ; //y vaut 4, x vaut 4
a=a/b a/=b
La pré et la post-incrémentation diminuent le
nombre de lignes de byte code générées 32
La syntaxe
Opérateurs de comparaison
{
boolean droitDeVote;
int age;
33
La syntaxe
Opérateurs logiques
S’appliquent au type boolean
– ! (not) , && (and) , II (or)
– &, I
Retournent un type boolean
& renvoie « true » si les deux expressions renvoient
Cours POO/JAVA
« true »
&& a le même comportement mais n’évalue pas le
seconde expression si la première est « false »
| renvoie « true » si l’une des deux expressions
renvoie « true »
Maher HENI
34
La syntaxe
35
La syntaxe
36
La syntaxe
Test conditionnel
class Test {
public static void main (String args[]) {
int compteur = 0;
boolean debut;
if (compteur == 0) {
Cours POO/JAVA
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");
Maher HENI
}
}
37
La syntaxe
Boucles while
class Test {
public static void main (String args[]) {
int i;
do {
System.out.println("Entrez un nombre < 10");
c= lireUnInt();
Cours POO/JAVA
} while (c>10);
38
La syntaxe
Boucles for
class Test {
public static void main (String args[]) {
int i;
// i est accessible
// j n’est pas accessible
Maher HENI
}
}
39
La syntaxe
Switch
class Test {
public static void main (String args[]) {
char c = (char)System.in.read();
switch(c) {
case ‘o’ : case ‘O’ :
System.out.println("Oui");
break;
Cours POO/JAVA
40
La syntaxe
Commentaires (1/2)
L’utilisation de commentaires est fortement
recommandé
« new »
Un tableau est détruit lorsqu’il n’est plus référencé
Les tableaux multi-dimensionnels sont des tableaux
de tableaux
Maher HENI
42
La syntaxe
43
La syntaxe
Initialisation dynamique :
int[] param = new int[10];
param[i]= i;
44
Maher HENI Cours POO/JAVA
– 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
Maher HENI
Simulateur
Abstraction Voiture de circulation
Cours POO/JAVA
Voiture
Abstraction
Boîte Moteur
Maher HENI
Conception
de voiture
47
Les concepts Objet
48
Les concepts Objet
Classes
abstraites Moyen de transport
<<extends>>
Cours POO/JAVA
Classes
concrètes Tracteur Train Voiture
Maher HENI
Monde réel
49
Les concepts Objet
50
Les concepts Objet
51
Les concepts Objet
52
Les concepts Objet
}
}
…………
// Utilisation d’un objet
Voiture clio = new Voiture();
clio.accelerer(20);
Maher HENI
Passage du paramètre
53
Les concepts Objet
54
Les concepts Objet
<-possède
Voiture 0..* +propriétaire
Personne
4
Maher HENI
Roue Carroserie
55
Les concepts Objet
L’héritage
Mécanisme provenant d’une relation de
Généralisation/Spécialisation
Une sous-classe hérite des attributs, méthodes et
associations de ses super classes
MoyenDeTransport
Cours POO/JAVA
couleur
vitesse
demarrer()
arreter()
Maher HENI
Voiture Moto
typeCarrosserie typeDePot
marcheArriere() faireUneRoueAvant() 56
Les concepts Objet
instruction
implémentatio instruction
instruction
instruction
interface
n instruction
instruction
57
Les concepts Objet
Voiture
Demarrer()
Feu
changer (Vert)
Velo
Maher HENI
Demarrer()
58
Les concepts Objet
Voiture - Embrayer
Demarrer()
Feu
changer (Vert)
Velo
- Pédaler
Maher HENI
Demarrer()
59
Les concepts Objet
Résumé
nécessite de l’expérience
60
Classes,méthodes, attributs
Cours POO/JAVA
Maher HENI
61
Classes,méthodes, attributs
(new)
62
Classes,méthodes, attributs
64
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 () {
Cours POO/JAVA
………
65
Classes,méthodes, attributs
Le passage de paramètres
66
Classes,méthodes, attributs
Surcharge (1/3)
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 d’une méthode
Exemple
Cours POO/JAVA
Surcharge (2/3)
Surcharge (3/3)
Short 10 0 10 1 2 4 5
Cours POO/JAVA
Char 11 10 0 1 2 4 5
Int 12 11 11 0 1 5 4
Long 12 11 11 10 0 6 5
Float 15 14 13 12 11 0 1
Maher HENI
double 16 15 14 13 12 10 0
69
Classes,méthodes, attributs
Constructeurs
Exemple de constructeurs
class Date {
int _jour = 1;
int _mois = 1;
int _an = 2000;
Date() {
_an = 1999;
Cours POO/JAVA
………
Maher HENI
71
Classes,méthodes, attributs
Création d’objets
…………
Voiture clio = new Voiture("ClioRT"); // Création de l’objet
Voiture renault = clio; // Ajout d’une référence sur l’objet
renault.demarrer();
72
Classes,méthodes, attributs
73
Classes,méthodes, attributs
« this »
class Versement {
void valider() {……}
void effectuer(Compte s, Compte d, float montant) {
s.debiter(montant);
d.crediter(montant);
this.valider();
Maher HENI
}
}
74
Classes,méthodes, attributs
class Personne {
String _nom ;
String _prenom;
float _taille;
_prenom = prenom;
}
75
Classes,méthodes, attributs
« null »
(NullPointerException)
On peut tester une référence pour savoir si elle vaut
« null »
Personne moi = new Personne();
……
Maher HENI
if (moi != null) {
System.out.println("J’existe toujours ! ");
}
76
Classes,méthodes, attributs
……
if (moi instanceof Personne) {
System.out.println("Je suis bien une personne! ");
}
77
Classes,méthodes, attributs
Méthodes « static »
class MathUtil {
final static double _PI = 3.14 ;
static double PI() {
return _PI;
}
return x * x;
}
double x = MathUtil.PI();
79
Héritage, polymorphisme,
encapsulation
Cours POO/JAVA
Maher HENI
80
Héritage, polymorphisme, encapsulation
Héritage (1/2)
« final »
81
Héritage, polymorphisme, encapsulation
Héritage (2/2)
class Felin {
boolean a_faim = true;
void parler() { }
void appeler() {
System.out.println("minou minou,…");
if (a_faim) parler();
}
}
Cours POO/JAVA
82
Héritage, polymorphisme, encapsulation
// des lions
83
Héritage, polymorphisme, encapsulation
84
Héritage, polymorphisme, encapsulation
Polymorphisme (1/2)
85
Héritage, polymorphisme, encapsulation
Polymorphisme (2/2)
class Cirque {
Felin f_list[] = new Felin[3];
Cirque() {
f_list[0] = new Lion();
f_list[1] = new Chat();
f_list[2] = new Tigre();
}
Cours POO/JAVA
void appeler() {
for (int i = 0; i<3 ; i++) {
Felin f = f_list[i];
f.parler();
}
}
}
Maher HENI
86
Héritage, polymorphisme, encapsulation
Super (1/2)
class Chat {
Chat() {
super(4);
race = "goutière"; } }
87
Héritage, polymorphisme, encapsulation
89
Héritage, polymorphisme, encapsulation
« Thread » ou « System »
90
Héritage, polymorphisme, encapsulation
import java.util.*;
Maher HENI
91
Héritage, polymorphisme, encapsulation
92
Héritage, polymorphisme, encapsulation
La variable CLASSPATH
Classes publiques
Le mot-clé « public » permet de définir une classe
comme publique
Visibilité - Encapsulation
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)
Maher HENI
95
Héritage, polymorphisme, encapsulation
Règles de visibilité
public
Cours POO/JAVA
protected
private
Maher HENI
friendly
(par défaut)
96
Héritage, polymorphisme, encapsulation
Règles de visibilité
97
Héritage, polymorphisme, encapsulation
public estOuverte() {
Maher HENI
98
Maher HENI Cours POO/JAVA
Les interfaces
99
Les interfaces
Définition
System.out.println(x);
System.out.println(y);
}
}
100
Les interfaces
interface Printable {
void print();
interface Persistent {
void save();
interface SGBD extends Persistent {
void connect();
101
Les interfaces
Interfaces et types
102
Les interfaces
Variables d’interfaces
interface MyInterface {
int MIN = 0;
int MAX = 100;
…… }
int i = MyInterface.MAX;
Maher HENI
103
Les interfaces
Personne Persistent
Maher HENI
extends
implements
Client
104
Les interfaces
Compte
credit()
Client debit() Banque
balance() ……
…… 0..* 0..*
save()
load()
Maher HENI
105
Les interfaces
Client Banque
…… ……
106
Les interfaces
ICompteClient ICompteBanque
implements implements
Compte
credit() save()
credit() load()
debit()
debit()
0..* 0..*
balance()
save()
Maher HENI
load()
Client Banque
…… ……
107
Les interfaces
save()
load()
Client Banque
…… ……
108
Maher HENI Cours POO/JAVA
return obj._nom.equals(this._nom);
}
}
class Personne extends NamedObject {………}
– Option : java-nosyncgc
– Permet de contrôler le déclenchement du ramasse-miettes
112
Les classes de base
114
Les classes de base
Exemples
115
Les classes de base
La classe java.lang.String
return nom;
}
}
116
Les classes de base
String : concaténation
int area = 33;
int prefixe = 1;
int suffixe = 02030405;
117
Les classes de base
String : manipulation
length() : cette méthode permet de connaître le
nombre de caractères d’une chaîne
– Ex : for (int i = 0; i < monTexte.length(); i++) {......}
indexOf(char c, int i) : retourne la position du
caractère “c” à partir de la position “i”
Cours POO/JAVA
– Ex : if ( mot1.equals(mot2)) {......}
118
Les classes de base
La classe java.lang.StringBuffer
119
Les classes de base
La classe java.util.Vector
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
Cours POO/JAVA
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 :
Maher HENI
120
Les classes de base
// 0123456789
Cours POO/JAVA
// 01234056789
vInt.removeElementAt(0);
// 1234056789
Maher HENI
vInt.removeAllElements();
121
Les classes de base
Int size()
– Retourne la taille courante
122
Les classes de base
L’interface java.util.Enumeration
Objet permettant de parcourir les éléments d’un conteneur
– Une énumération ne stocke aucune information
– Ne contient qu’une position courante dans le conteneur
– Interface unique pour le parcours de tous les types de conteneurs
– Ne fonctionne que pour un seul parcours
Cours POO/JAVA
Deux méthodes :
– Boolean hasMoreElements() : teste s’il reste des éléments
Maher HENI
123
Les classes de base
Enumeration : exemple
Vector vInt = new Vector();
for (int i = 0; i<10 ; i++) {
Integer elt = new Integer(i);
vInt.addElement(elt);
}
// 0123456789
Cours POO/JAVA
124
Les classes de base
classe « Voiture »
125
Les classes de base
package simulateur;
class Voiture {
private Personne _proprio;
126
Les classes de base
La classe java.util.Hashtable
Tableau associatif permettant :
– D’indexer un objet par une clé
– De retrouver rapidement un objet à partir d’une clé
Les clés des références sont des objets
– Chaînes de caractères, numéros d’identification …
Cours POO/JAVA
La classe java.util.Hashtable
valeurs
128
Les classes de base
Hashtable : un exemple
Hashtable deptable = new Hashtable();
129
Les classes de base
Choisir un conteneur
Parcourir 10 7 3
Cours POO/JAVA
Insérer ou 3 10 9
enlever
Rechercher 3 2 10
(5 si trié)
Maher HENI
130
Maher HENI Cours POO/JAVA
Les exceptions
131
Les exceptions
Exemple (1/2)
class Equation {
double _a;
double _b;
double c;
// Constructeur
Equation(double a, double b, double c) {
_a = a;
Cours POO/JAVA
_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();
Maher HENI
133
Les exceptions
Exemple (2/2)
class PasDeSolution extends Exception {
... ...
// Méthode appelante
……
try {
Equation ed = new Equation(1,0,1); // x2 + 1 = 0
double resultat = eq.solution();
……
} Branchement
catch(PasdeSolution p) { vers le catch
Maher HENI
System.out.println(p.toString);
}
134
Les exceptions
Throw et throws
Le mot-clé “Throws”
Throws s’utilise au niveau de la
signature d’une méthode pour préciser que celle-ci
est susceptible de soulever une exception
public double solution() throws PasDeSolution {
……
Maher HENI
135
Les exceptions
try {
double resultat = eq.solution();
} catch(PasdeSolution p) {
System.out.println(p.toString); }
136
Les exceptions
Finaly
137
Les exceptions
Throwable
Error Exception
138
Les exceptions
Exception
ConnectionException
Cours POO/JAVA
InvalidPassword InvalidLogin
Maher HENI
139
Les exceptions
l’exception
La classe Throwable prend une String à sa
construction. Cela permet d’enrichir les traces avec
des messages spécifiques, récupérés avec
getMessage()
Maher HENI
140
Maher HENI Cours POO/JAVA
Les entrées-sorties
141
Les entrées-sorties
Description
InputStreamReader OutputStreamWriter
142
Les entrées-sorties
143
Les entrées-sorties
C
a
Fichier n Filtre
a
l
Cours POO/JAVA
144
Les entrées-sorties
...etc
146
Les entrées-sorties
...etc
147
Les entrées-sorties
La classe java.io.PrintWriter
try{
FileWriter fos = new FileWriter("text.txt");
PrintWriter p = new PrintWriter(fos,true);
} catch(IOException e) {}
148
Les entrées-sorties
La classe java.io.BufferedReader
……
} catch(IOException e) {}
149
Les entrées-sorties
La classe java.io.File
Principales méthodes :
– Boolean isDirectory() – String[] list (FilenameFilter filter)
– Boolean isFile() – Int length()
– String getAbsolutePath() – Boolean delete()
– Boolean renameTo(File dest) – Boolean exists()
Maher HENI
La classe java.io.RandomFile
La classe RandomAccessFile permet la lecture et l’écriture à
n’importe quelle position dans le fichier
L’octet est l’unité de mesure des positions et des
déplacements dans le fichier
Constructeurs (throws IOException) :
– Public RandomAccessFile (File file, String mode)
Cours POO/JAVA
(Interface DataOutput)
– Seek(long) : décalage en octets
151