Vous êtes sur la page 1sur 82

Programmation Orientée Objet

JAVA
Dr. Ing. Mohamed KOUBAA
Email: mohamed.koubaa@enetcom.usf.tn
Historique…
} Java a été développé à partir de décembre 1990 par une équipe de Sun
Microsystems dirigée par James Gosling

} Au départ, il s’agissait de développer un langage applicable à de petits


appareils électriques (code embarqué)

} Syntaxe proche du C++

} Recompilation dès qu'une nouvelle puce arrive, complexité de


programmation pour l'écriture de logiciels fiables...

2 Dr. Ing. Mohamed KOUBAA [POO Java]


Historique…
} 1990 : Ecriture d'un nouveau langage plus adapté à la réalisation de logiciels
embarqués, appelé OAK
} Petit, fiable et indépendant de l'architecture
} Destiné à la télévision interactive
} Non rentable sous sa forme initiale

} 1993 : le WEB « décolle », Sun redirige ce langage vers Internet : les qualités
de portabilité et de compacité du langage OAK en ont fait un candidat
parfait à une utilisation sur le réseau. Cette réadaptation prit près de 2 ans.

} 1995 : Sun rebaptisa OAK en Java (nom de la machine à café autour de laquelle se
réunissait James Gosling et ses collaborateurs)

3 Dr. Ing. Mohamed KOUBAA [POO Java]


Procédural vs Objet
} Un programme est composé de
plusieurs procédures (ou fonctions) :
Ø qui effectuent un traitement sur Données
des données (procédure)
Ø qui retournent une valeur après
leur invocation (fonction)
Traitement 1
} Certains langages ne distinguent pas
procédures et fonctions.
Traitement 2
} Exemples de langages procéduraux ou
fonctionnels : Fortran, Lisp, C, …
Traitement 3

4 Dr. Ing. Mohamed KOUBAA [POO Java]


Procédural vs Objet
} Un programme est composé de
plusieurs objets qui contiennent : D
Ø des données "internes"
Ø des traitements manipulant ces T

données internes ou d'autres


données
D D

} Les données d'un objet sont appelés T


T
ses attributs et ses traitements sont
ses méthodes (ou opérations).
D
D
} Exemples de langages orientés-objet :
SmallTalk, C++, Java, … T
T

5 Dr. Ing. Mohamed KOUBAA [POO Java]


Notion d’Objet
Ø Approche procédurale :
} "Que doit faire mon programme ?"
Ø Approche orientée-objet :
} "De quoi doit être composé mon programme ?"
Ø Cette composition est conséquence d'un choix de modélisation fait
pendant la conception
Exemple: Gestion d'une bibliothèque

Germinal
E. Zola
Le Monde Alice Dupont Anne Durand
Directrice Lectrice

Le seigneur des anneaux Arsène Deschamps


Michel Martin Lecteur
J.R.R.Tolkien Bibliothécaire

6 Dr. Ing. Mohamed KOUBAA [POO Java]


Notion de Classe
} Des objets similaires peuvent être informatiquement décrits par une même
abstraction : une classe
Ø même structure de données et méthodes de traitement
Ø valeurs différentes pour chaque objet
Classe Lecteur
Classe Livre Classe Employé -nom, prénom
-titre, auteur -nom, prénom, statut
Classe Journal
-titre

Germinal
E. Zola
Le Monde Alice Dupont Anne Durand
Directrice Lectrice

Le seigneur des anneaux Arsène Deschamps


Michel Martin Lecteur
J.R.R.Tolkien Bibliothécaire

7 Dr. Ing. Mohamed KOUBAA [POO Java]


Encapsulation
} L'encapsulation est la pratique consistant à regrouper des
attributs au sein d'une même classe.

} Exemple : la classe Livre encapsule les attributs titre et


emprunteur

Ø Pour améliorer la lisibilité des programmes, les attributs


encapsulés sont souvent privés (inaccessibles aux autres
classes).
Ø Les données et méthodes accessibles sont dites publiques.

8 Dr. Ing. Mohamed KOUBAA [POO Java]


Points forts de Java
} Simple
} Apprentissage facile
} faible nombre de mots-clés
} simplifications des fonctionnalités essentielles
} Développeurs opérationnels rapidement

} Familier
} Syntaxe proche de celle de C/C++

9 Dr. Ing. Mohamed KOUBAA [POO Java]


Points forts de Java
} Orienté objet
} Java ne permet d'utiliser que des objets (hors les types de
base)
} Java est un langage objet de la famille des langages de classe
comme C++ ou SmallTalk
} Les grandes idées reprises sont : encapsulation, dualité classe
/instance, attribut, méthode / message, visibilité, dualité
interface/implémentation, héritage simple, redéfinition de
méthodes, polymorphisme
} Sûr
} Seul le bytecode est transmis, et «vérifié» par l’interpréteur
} Impossibilité d’accéder à des fonctions globales ou des
ressources arbitraires du système
10 Dr. Ing. Mohamed KOUBAA [POO Java]
Points forts de Java
} Fiable
} Gestion automatique de la mémoire
(ramasse-miette ou "garbage collector")
} Gestion des exceptions
} Sources d'erreurs limitées
} typage fort,
} pas d'héritage multiple,
} pas de manipulations de pointeurs, etc.
} Vérifications faites par le compilateur facilitant une
plus grande rigueur du code

11 Dr. Ing. Mohamed KOUBAA [POO Java]


Points forts de Java
Java est indépendant de l'architecture
} Le bytecode généré par le compilateur est indépendant
de toute architecture. Toute application peut donc
tourner sur une plate-forme implémentant une machine
virtuelle Java
« Ecrire une fois, exécuter partout »
Java est multitâches
} Exécution de plusieurs processus effectuant chacun une
tâche différente
} Mécanismes de synchronisation
} Fonctionnement sur des machines multiprocesseurs

12 Dr. Ing. Mohamed KOUBAA [POO Java]


Langage compilé

Etapes qui ont lieu avant l'exécution pour un langage compilé comme
C++

Fichier
de Librairies
code

Programme
Code objet Edition de liens
exécutable

Autres code objet


Fichier
d'entête

13 Dr. Ing. Mohamed KOUBAA [POO Java]


Langage interprété

Cas de Java
Avant exécution Exécution

Autres byte code

Fichier
Byte code Machine virtuelle
de code Compilation
Java (JVM)
Java
javac MaClasse.class java
MaClasse.java

14 Dr. Ing. Mohamed KOUBAA [POO Java]


Langage indépendant
Java est un langage interprété
} La compilation d'un programme Java crée du pseudo-code
portable : le "byte-code"
} Sur n'importe quelle plate-forme, une machine virtuelle Java
peut interpréter le pseudo-code afin qu'il soit exécuté
Les machines virtuelles Java peuvent être
} des interpréteurs de byte-code indépendants (pour exécuter
les programmes Java)
} contenues au sein d'un navigateur
(pour exécuter des applets Java)

15 Dr. Ing. Mohamed KOUBAA [POO Java]


Langage indépendant
} Avantages :
} Portabilité
} Des machines virtuelles Java existent pour de nombreuses plates-
formes dont : Solaris, Windows, MacOS
} Développement plus rapide
} courte étape de compilation pour obtenir le byte-code,
} pas d'édition de liens,
} déboguagge plus aisé,
} Le byte-code est plus compact que les exécutables
} pour voyager sur les réseaux.

16 Dr. Ing. Mohamed KOUBAA [POO Java]


Langage indépendant
} Inconvénients :
} Nécessite l’installation d’un interpréteur pour pouvoir
exécuter un programme Java
} L'interprétation du code ralentit l'exécution
} Les applications ne bénéficient que du dénominateur
commun des différentes plateformes
} limitation, par exemple, des interfaces graphiques
} Gestion gourmande de la mémoire
} Impossibilité d’opérations de « bas niveau » liées au matériel

17 Dr. Ing. Mohamed KOUBAA [POO Java]


Outils de développement: JDK
} Environnement de développement fourni par Sun
} JDK signifie Java Development Kit (Kit de
développement Java).
} Il contient :
} les classes de base de l'API java (plusieurs centaines),
} la documentation au format HTML
} le compilateur : javac
} la JVM (machine virtuelle) : java
} le visualiseur d'applets : appletviewer
} le générateur de documentation : javadoc
} etc.

18 Dr. Ing. Mohamed KOUBAA [POO Java]


Outils de développement
} Environnements:
} Éditeur de texte ! (compilation et exécution sous DOS)
} Eclipse http://www.eclipse.org/downloads/
} JCreator http://www.jcreator.org/download.htm
} Kawa
} NetBeans http://netbeans.org/downloads/index.html

19 Dr. Ing. Mohamed KOUBAA [POO Java]


Premier programme
} Pour pouvoir faire un programme exécutable il faut
toujours une classe qui contienne une méthode
particulière, la méthode « main »
} c’est le point d’entrée dans le programme : le
microprocesseur sait qu’il va commencer à exécuter les
instructions à partir de cet endroit

public static void main(String arg[ ])


{
…/…
}

20 Dr. Ing. Mohamed KOUBAA [POO Java]


Premier programme

La classe est l’unité de


Fichier Bonjour.java
base de nos programmes.
Le mot clé en Java pour
public class Bonjour définir une classe est
class
{ //Accolade débutant la classe Bonjour
public static void main(String args[])
{ //Accolade débutant la méthode main
/* Pour l’instant juste une instruction */
System.out.println(“bonjour”);
} //Accolade fermant la méthode main
} //Accolade fermant la classe Bonjour

21 Dr. Ing. Mohamed KOUBAA [POO Java]


Premier programme

Fichier Bonjour.java Accolades délimitant le


début et la fin de la définition
de la class Bonjour
public class Bonjour
{
public static void main(String args[])
{
System.out.println(“bonjour”); Accolades délimitant le début
et la fin de la méthode main
}
}
Les instructions se terminent
par des ;

22 Dr. Ing. Mohamed KOUBAA [POO Java]


Premier programme

Fichier Bonjour.java Une méthode peut recevoir


des paramètres. Ici la méthode
public class Bonjour main reçoit le paramètre args
qui est un tableau de chaîne
{ de caractères.
public static void main(String args[])
{
System.out.println(“bonjour”);
}
}

23 Dr. Ing. Mohamed KOUBAA [POO Java]


Compilation et exécution

Le nom du fichier est nécessairement


Fichier Bonjour.java celui de la classe avec l’extension
.java en plus. Java est sensible à la
Compilation en bytecode java casse des lettres.
dans une console DOS:
javac Bonjour.java public class Bonjour
Génère un fichier Bonjour.class
Exécution du programme {
(toujours depuis la console DOS)
public static void main(String[] args)
sur la JVM :
java Bonjour {
Affichage de « bonjour » dans la
console System.out.println(“bonjour”);
}
}

24 Dr. Ing. Mohamed KOUBAA [POO Java]


Compilation et exécution
} Pour résumer, dans une console DOS, si j’ai un fichier
Bonjour.java pour la classe Bonjour :
} javac Bonjour.java
} Compilation en bytecode java
} Indication des erreurs de syntaxe éventuelles
} Génération d’un fichier Bonjour.class si pas d’erreurs
} java Bonjour
} Java est la machine virtuelle
} Exécution du bytecode
} Nécessité de la méthode main, qui est le point d’entrée dans le
programme

25 Dr. Ing. Mohamed KOUBAA [POO Java]


Exercices
} Écrire un programme Java qui affiche le premier
paramètre passé sur la ligne de commande.

} Écrire un programme Java qui affiche le nombre de


paramètres passés sur la ligne de commande.

} Écrire un programme Java qui affiche la somme des deux


entiers passés sur la ligne de commande.

26 Dr. Ing. Mohamed KOUBAA [POO Java]


Éléments de base: identificateurs
} On a besoin de nommer les classes, les variables, les
constantes, etc. ; on parle d’identificateur.
} Les identificateurs commencent par une lettre, _ ou $
Attention : Java distingue les majuscules des minuscules
} Conventions sur les identificateurs :
} Si plusieurs mots sont accolés, mettre une majuscule à chacun
des mots sauf le premier.
} exemple : uneVariableEntiere
} La première lettre est majuscule pour les classes et les
interfaces
} exemples : MaClasse, UneJolieFenetre

27 Dr. Ing. Mohamed KOUBAA [POO Java]


Éléments de base: identificateurs
} Conventions sur les identificateurs :
} La première lettre est minuscule pour les
méthodes, les attributs et les variables
} exemples : setLongueur, i, uneFenetre
} Les constantes sont entièrement en majuscules
} exemple : LONGUEUR_MAX

28 Dr. Ing. Mohamed KOUBAA [POO Java]


Éléments de base: mots réservés
abstract default goto null synchronized

boolean do if package this

break double implements private throw

byte else import protected throws

case extends instanceof public transient

catch false int return true

char final interface short try

class finally long static void

continue float native super volatile

const for new switch while

29 Dr. Ing. Mohamed KOUBAA [POO Java]


Types de base
} En Java, tout est objet sauf les types de base.
} Il y a huit types de base :
} un type booléen pour représenter les variables ne pouvant
prendre que 2 valeurs (vrai et faux, 0 ou 1, etc.) : boolean avec
les valeurs associées true et false
} un type pour représenter les caractères : char
} quatre types pour représenter les entiers de divers taille : byte,
short, int et long
} deux types pour représenter les réelles : float et double
} La taille nécessaire au stockage de ces types est
indépendante de la machine.
} Avantage : portabilité

30 Dr. Ing. Mohamed KOUBAA [POO Java]


Types de base: les entiers
} Les entiers (avec signe)
} byte : codé sur 8 bits, peuvent représenter des
entiers allant de -27 à 27 –1 (-128 à +127)
} short : codé sur 16 bits, peuvent représenter des
entiers allant de -215 à 215 –1
} int : codé sur 32 bits, peuvent représenter des
entiers allant de -231 à 231 –1
} long : codé sur 64 bits, peuvent représenter des
entiers allant de -263 à 263 –1

31 Dr. Ing. Mohamed KOUBAA [POO Java]


Types de base: les entiers
} Notation
} 2 entier normal en base décimal
} 2L entier au format long en base décimal
} 035 entier en valeur octale (base 8)
} 0xF entier en valeur hexadécimale (base 16)
} Opérations sur les entiers
} opérateurs arithmétiques +, -, *
} / :division entière si les 2 arguments sont des entiers
} % : reste de la division entière
} exemples :
¨ 15 / 4 donne 3
¨ 15 % 2 donne 1

32 Dr. Ing. Mohamed KOUBAA [POO Java]


Types de base: les entiers
} Opérations sur les entiers (suite)
} les opérateurs d’incrémentation ++
et de décrémentation et --
} ajoute ou retranche 1 à une variable
int n = 12;
n ++; //Maintenant n vaut 13
} n++; « équivalent à » n = n+1;
n--; « équivalent à » n = n-1;
} 8++; est une instruction illégale
} peut s’utiliser de manière suffixée : ++n. La différence avec la version
préfixée se voit quand on les utilisent dans les expressions.
En version suffixée la (dé/inc)rémentation s’effectue en premier
int m=7; int n=7;
int a=2 * ++m; //a vaut 16, m vaut 8
int b=2 * n++; //b vaut 14, n vaut 8
33 Dr. Ing. Mohamed KOUBAA [POO Java]
Types de base: les réels
} Les réels
} float : codé sur 32 bits, peuvent représenter des
nombres allant de -1035 à + 1035
} double : codé sur 64 bits, peuvent représenter des
nombres allant de -10400 à +10400
} Notation
} 4.55 ou 4.55D réel double précision
} 4.55f réel simple précision

34 Dr. Ing. Mohamed KOUBAA [POO Java]


Types de base: les réels
} Les opérateurs
} opérateurs classiques +, -, *, /
} attention pour la division :
¨ 15 / 4 donne 3 division entière
¨ 15 % 2 donne 1
¨ 11.0 / 4 donne 2.75
(si l’un des termes de la division est un réel, la division
retournera un réel).
} puissance : utilisation de la méthode pow de la
classe Math.
¨ double y = Math.pow(x, a) équivalent à x^a, x et a étant
de type double

35 Dr. Ing. Mohamed KOUBAA [POO Java]


Types de base: les booléens
} Les booléens
} boolean
contient soit vrai (true) soit faux (false)
} Les opérateurs logiques de comparaisons
} Egalité : opérateur ==
} Différence : opérateur !=
} supérieur et inférieur strictement à : opérateurs >
et <
} supérieur et inférieur ou égal :
opérateurs >= et <=

36 Dr. Ing. Mohamed KOUBAA [POO Java]


Types de base: les booléens
} Notation
boolean x;
x= true;
x= false;
x= (5==5); // l ’expression (5==5) est évaluée et la valeur est
affectée à x qui vaut alors vrai
x= (5!=4); // x vaut vrai, ici on obtient vrai si 5 est différent de 4
x= (5>5); // x vaut faux, 5 n'est pas supérieur strictement à 5
x= (5<=5); // x vaut vrai, 5 est bien inférieur ou égal à 5

37 Dr. Ing. Mohamed KOUBAA [POO Java]


Types de base: les booléens
} Les autres opérateurs logiques
} et logique : &&
} ou logique : ||
} non logique : !
} Exemples : si a et b sont 2 variables booléennes
boolean a,b, c;
a= true;
b= false;
c= (a && b); // c vaut false
c= (a || b); // c vaut true
c= !(a && b); // c vaut true
c=!a; // c vaut false

38 Dr. Ing. Mohamed KOUBAA [POO Java]


Types de base: les caractères
} Les caractères
} char : contient une seule lettre
} le type char désigne des caractères en représentation
Unicode
} Codage sur 2 octets contrairement à ASCII/ANSI codé
sur 1 octet. Le codage ASCII/ANSI est un sous-ensemble
d’Unicode
} Notation hexadécimale des caractères Unicode de
‘ \u0000 ’ à ‘ \uFFFF ’.
} Plus d’information sur Unicode à : www.unicode.org

39 Dr. Ing. Mohamed KOUBAA [POO Java]


Types de base: les caractères
} Notation
char a,b,c; // a,b et c sont des variables du type char
a='a'; // a contient la lettre 'a'
b= '\u0022' //b contient le caractère guillemet : "
c=97; // x contient le caractère de rang 97 : 'a'

40 Dr. Ing. Mohamed KOUBAA [POO Java]


Types de base: exemple et remarques
int x = 0, y = 0;
float z = 3.1415F;
double w = 3.1415;
long t = 99L;
boolean test = true;
char c = 'a';

} Remarques importantes :
} Java exige que toutes les variables soient définies et initialisées. Le
compilateur sait déterminer si une variable est susceptible d'être utilisée
avant initialisation et produit une erreur de compilation.
} Contrairement aux variables locales évoquées ici, les attributs seront
soumis à une initialisation implicite par défaut ; le risque de champ non
défini n’existera donc pas.

41 Dr. Ing. Mohamed KOUBAA [POO Java]


Les structures de contrôles
} Même syntaxe qu’en C
} Les structures de contrôle classiques existent en Java :
} if, else
} switch, case, default, break
} for
} while
} do, while

42 Dr. Ing. Mohamed KOUBAA [POO Java]


Les structures de contrôles: if..else
} Instructions conditionnelles
} Effectuer une ou plusieurs instructions seulement si une
certaine condition est vraie
if (condition) instruction;
et plus généralement : if (condition)
{ bloc d’instructions}
condition doit être un booléen ou renvoyer une valeur booléenne
} Effectuer une ou plusieurs instructions si une certaine
condition est vérifiée sinon effectuer d’autres instructions
if (condition) instruction1; else instruction2;
et plus généralement if (condition) { 1er bloc d’instructions}
else {2ème bloc d’instruction}

43 Dr. Ing. Mohamed KOUBAA [POO Java]


Les structures de contrôles: if..else

Max.java

public class Max


{
public static void main(String args[])
{
int nb1, nb2;
nb1 = Clavier.lireInt("Entrer un entier:");
nb2 = Clavier.lireInt("Entrer un entier:");
if (nb1 > nb2)
System.out.println("l’entier le plus grand est "+ nb1);
else
System.out.println("l’entier le plus grand est "+ nb2);
}
}

44 Dr. Ing. Mohamed KOUBAA [POO Java]


Les structures de contrôles: while
} Boucles indéterminées
} On veut répéter une ou plusieurs instructions un nombre
indéterminés de fois : on répète l’instruction ou le bloc
d’instruction tant que une certaine condition reste vraie
} nous avons en Java une première boucle while (tant que)
} while (condition) {bloc d’instructions}
} les instructions dans le bloc sont répétées tant que la
condition reste vraie.
} On ne rentre jamais dans la boucle si la condition est
fausse dès le départ

45 Dr. Ing. Mohamed KOUBAA [POO Java]


Les structures de contrôles: do..while
} Boucles indéterminées
} un autre type de boucle avec le while:
} do {bloc d’instructions} while (condition)
} les instructions dans le bloc sont répétées tant
que la condition reste vraie.
} On rentre toujours au moins une fois dans la
boucle : la condition est testée en fin de boucle.

46 Dr. Ing. Mohamed KOUBAA [POO Java]


Les structures de contrôles: while
Facto1.java

public class Facto1


{
public static void main(String args[])
{
int n, result,i;
n = Clavier.lireInt("Entrer une valeur pour n");
result = 1; i = n;
while (i > 1)
{
result = result * i;
i--;
}
System.out.println( "la factorielle de " + n + " vaut " + result);
}
}

47 Dr. Ing. Mohamed KOUBAA [POO Java]


Les structures de contrôles: for
} Boucles déterminées
} On veut répéter une ou plusieurs instructions un nombre
déterminés de fois : on répète l’instruction ou le bloc
d’instructions pour un certain nombre de pas.
} La boucle for
for (int i = 1; i <= 10; i++)
System.out.println(i); //affichage des nombres de 1 à 10
} une boucle for est en fait équivalente à une boucle while
for (instruction1; expression1; expression2) {bloc}
… est équivalent à …
instruction 1; while (expression1) {bloc; expression2}}

48 Dr. Ing. Mohamed KOUBAA [POO Java]


Les structures de contrôles: for

Facto2.java

public class Facto2


{
public static void main(String args[])
{
int n, result,i;
n = Clavier.lireInt("Entrer une valeur pour n");
result = 1;
for(i =n; i > 1; i--)
{
result = result * i;
}
System.out.println( "la factorielle de " + n + " vaut " + result);
}
}

49 Dr. Ing. Mohamed KOUBAA [POO Java]


Les structures de contrôles: switch
} Sélection multiples
} l’utilisation de if / else peut s’avérer lourde quand on doit
traiter plusieurs sélections et de multiples alternatives
} pour cela existe en Java le switch / case assez identique à
celui de C/C++
} La valeur sur laquelle on teste doit être un char ou un entier (à
l’exclusion d’un long).
} L’exécution des instructions correspondant à une alternative
commence au niveau du case correspondant et se termine à la
rencontre d’une instruction break ou arrivée à la fin du
switch

50 Dr. Ing. Mohamed KOUBAA [POO Java]


Les structures de contrôles: switch

Alternative.java

public class Alternative


Variable contenant la valeur
{
que l’on veut tester.
public static void main(String args[])
{
int nb = Clavier.lireInt("Entrer un entier:");
Première alternative :
switch(nb)
on affiche Un et on sort
{
du bloc du switch au break;
case 1:
System.out.println("Un"); break; Deuxième alternative :
case 2: on affiche Deux et on sort
System.out.println("Deux"); break; du bloc du switch au break;
default:
System.out.println("Autre nombre"); break;
} Alternative par défaut:
} on réalise une action
} par défaut.

51 Dr. Ing. Mohamed KOUBAA [POO Java]


Classe et Objet
class Point
{
int x ; // abscisse
Attributs int y ; // ordonnee

void initialise (int abs, int ord)


{ x = abs ;
y = ord ;
}
Méthodes
void deplace (int dx, int dy)
{ x += dx ;
y += dy ;
}

void affiche ()
{ System.out.println ("Je suis un point de coordonnees " + x + " " + y) ;
}
}

52 Dr. Ing. Mohamed KOUBAA [POO Java]


Attributs
} Caractéristique d’un attribut
} Variable globale de la classe
} Accessible dans toutes les méthodes de la classe
class Point
{
int x ;
int y ; Attribut visible dans
les méthodes
void initialise (int abs, int ord)
{ x = abs ;
y = ord ;
}

void deplace (int dx, int dy)


{ x += dx ;
y += dy ;
}
}

53 Dr. Ing. Mohamed KOUBAA [POO Java]


Attribut et variable
} Caractéristique d’une variable
} Visible à l’intérieur du bloc qui le définit
class Point
{
int x ;
int y ; Variables visibles
uniquement dans
void initialise (int abs, int ord) cette méthode
{ x = abs ;
y = ord ;
}

void deplace (int dx, int dy)


{ x += dx ;
y += dy ;
}
}

54 Dr. Ing. Mohamed KOUBAA [POO Java]


Création d’objets
} La création d’un objet à partir d’une classe est appelée
une instanciation
} L’objet créé est une instance de la classe
} Déclaration
} Définit le nom et le type de l’objet
} Un objet seulement déclaré vaut « null »
} Création et allocation de la mémoire
} Appel de méthodes particulières: constructeurs
} La création réserve la mémoire et initialise les attributs
} Renvoi d’une référence sur l’objet maintenant créé
} monObjet != null

55 Dr. Ing. Mohamed KOUBAA [POO Java]


Création d’objets
} monPoint est une instance de la classe Point

Point
Représentation explicite
de la classe
« Instance of »

monPoint
Nom de l’objet, référence ou
-X= 7 de l’instance

-Y = 4 Valeurs des attributs qui


caractérisent l’état de l’objet

56 Dr. Ing. Mohamed KOUBAA [POO Java]


Création d’objets
} Chaque objet qui est une instance possède ses propres
valeurs d’attributs

Point

pointA pointB pointC


-X= 7 -X= 7 - X = 13

- Y = -3 -Y = 4 -Y = 0

57 Dr. Ing. Mohamed KOUBAA [POO Java]


Création d’objets: réalisation
} La création d’un nouvel objet est obtenu par l’appel à
} new Constructeur (paramètres)
} Il existe un constructeur par défaut qui ne possède pas de
paramètre (si aucun autre constructeur avec paramètres existe)
} Le constructeur porte le même nom que celui de la classe
class TestPoint
Déclaration {
public static void main(String args[])
{
Allocation et Point pointA;
initialisation pointA=new Point();

// déclaration et construction au même temps


Point pointB=new Point();
}

58 Dr. Ing. Mohamed KOUBAA [POO Java]


Constructeur
} Méthode particulière, sans type de retour
} Possède le même nom que celui de la classe
} Permet d’initialiser les attributs de l’objet nouvellement
créé
} On peut définir plusieurs constructeurs différents
} Différence au niveau des paramètres
} Constructeur par défaut
} Utilisé si aucun autre constructeur est spécifié
} Initialise à « null » tous les attributs de l’objet

59 Dr. Ing. Mohamed KOUBAA [POO Java]


Constructeur par défaut

class Point class TestPoint


{ {
int x ; public static void main(String args[])
int y ; {
Point pointA;
void initialise (int abs, int ord) pointA=new Point();
{ x = abs ; // pointA: x=0, y=0
y = ord ;
} // déclaration et construction au même temps
Point pointB=new Point();
void deplace (int dx, int dy) // pointB: x=0, y=0
{ x += dx ; }
y += dy ; }
}
}

60 Dr. Ing. Mohamed KOUBAA [POO Java]


Constructeur personnalisé

class Point class TestPoint


{ {
int x ; public static void main(String args[])
int y ; { Erreur!!
Point pointA; Constructeur
public Point (int abs, int ord) pointA=new Point(); par défaut non
{ x = abs ; autorisé
y = ord ; // déclaration et construction au même temps
} Point pointB=new Point(3, 8);
//pointB: x=3, y=8
void deplace (int dx, int dy) }
{ x += dx ; }
y += dy ;
}
}

61 Dr. Ing. Mohamed KOUBAA [POO Java]


Constructeur personnalisé

class Point class TestPoint


{ {
int x ; public static void main(String args[])
int y ; {
Point pointA;
public Point (int abs, int ord) pointA=new Point();
OK!
{ x = abs ; //pointA x=2, y=2 Constructeur
y = ord ; sans paramètres
} // déclaration et construction au même temps
Point pointB=new Point(3, 8);
public Point () //pointB: x=3, y=8
{ x = 2; }
y = 2; }
}

62 Dr. Ing. Mohamed KOUBAA [POO Java]


Constructeur personnalisé

class Point class TestPoint


{ int x ; {
int y ; public static void main(String args[])
{
public Point (int abs, int ord) Point pointA;
{ x = abs ; pointA=new Point();
y = ord ; //pointA x=2, y=2
}
public Point (int val) Point pointB=new Point(3, 8);
{ x = val; //pointB: x=3, y=8
y = val;
} Point pointC=new Point(4);
public Point () //pointC: x=4, y=4
{ x = 2;
y = 2; }
} }
}

63 Dr. Ing. Mohamed KOUBAA [POO Java]


Constructeurs
} Sans arguments
} Lorsque l’on doit créer un objet sans pouvoir décider des
valeurs de ses attributs au moment de la création
} Il remplace le constructeur par défaut qui est devenu
inutilisable dès qu’un constructeur avec paramètre est défini
dans la classe
} Constructeurs multiples
} Possibilité d’initialiser un objet de plusieurs manière
différentes (surcharge)
} Le compilateur distingue les constructeurs en fonction
} de la position des arguments
} du nombre
} du type

64 Dr. Ing. Mohamed KOUBAA [POO Java]


Accès au membres
} Accéder aux attributs
} Modifier l’état d’un objet (modifier la position d’un point par exemple)
} Consulter l’état d’un objet
nomObjet.identifiantAttribut
Exemple: System.out.println(‘’ l’abscisse de A est ‘’+ pointA.x);
pointB.x=9;
pointB.y=0;

} Accéder aux méthodes


} Faire appel à un traitement bien particulier
nomObjet.identifiantMéthode(paramètres)
Exemple: pointA.deplace(2, 1);

65 Dr. Ing. Mohamed KOUBAA [POO Java]


Accès aux membres

class Point class TestPoint


{ {
int x ; public static void main(String args[])
int y ; {
Point pointB=new Point(2, 9);
public Point(int abs, int ord)
{ x = abs ; pointB.x=5; pointB.y=1;
y = ord ;
} System.out.println(‘’Abs=‘’+pointB.x+’’Ord=‘’+pointB.y);
//pointB: x=5, y=1
void deplace (int dx, int dy)
{ x += dx ; poinB.deplace(1,3);
y += dy ;
} System.out.println(‘’Abs=‘’+pointB.x+’’Ord=‘’+pointB.y);
} //pointB: x=6, y=4

}
}

66 Dr. Ing. Mohamed KOUBAA [POO Java]


Exercice d’application
} Un robot est défini par un identifiant (chaîne), une
position dans le plan cartésien et une orientation (‘e’, ‘o’,
‘n’ et ‘s’).
} Définir une classe Robot avec différents constructeurs.
} Ajouter une méthode avancerRobot. Le nombre de pas est
spécifié dans les paramètres de la méthode.
} Ajouter une méthode tournerDroite.
} Ajouter une méthode qui affiche l’état d’un robot.
} Ecrire une classe TestRobot pour mettre en œuvre la
classe Robot.

67 Dr. Ing. Mohamed KOUBAA [POO Java]


Destruction d’un objet
} La destruction des objets est prise en charge par le
ramassemiettes. Il n’y a pas de free() à faire comme en
langage C.
} Le ramasse-miettes détruit les objets pour lesquels il
n'existe plus de référence.
} Les destructions sont asynchrones (le GC est géré dans
un thread de basse priorité).
} Aucune garantie n'est apportée quant à la destruction
effective d'un objet, c’est à dire la libération de la
mémoire.

68 Dr. Ing. Mohamed KOUBAA [POO Java]


Destruction d’un objet

69 Dr. Ing. Mohamed KOUBAA [POO Java]


Les packages
} Un package regroupe un ensemble de classes sous un
même nom.
} Les noms des packages suivent le schéma : name.subname
} Une classe Watch appartenant au package time.clock doit
se trouver dans le fichier : time/clock/Watch.class.
} Les packages permettent au compilateur et à la JVM de
localiser les fichiers contenant les classes à charger.
} L'instruction package indique à quel package appartient la
ou les classe(s) de l'unité de compilation (le fichier).

70 Dr. Ing. Mohamed KOUBAA [POO Java]


Les packages
} Les répertoires contenant les packages doivent être
présents dans la variable d'environnement CLASSPATH.
} En dehors du package, les noms des classes sont repérés
par : packageName.className.
} L'instruction import packageName permet d'utiliser des
classes sans les préfixer par leur nom de package.
} Les API (Application Programming Interface) sont
organisées en package (java.lang, java.io...)

71 Dr. Ing. Mohamed KOUBAA [POO Java]


Packages

72 Dr. Ing. Mohamed KOUBAA [POO Java]


Membres statiques
} Une classe est un ensemble d'attributs et de méthodes (fonctions) : on
les appelle les membres.
} Les membres sont accessibles via une instance de la classe ou via la
classe pour les membres statiques :

c.r = 3;// On accède à l'attribut 'r' de l'instance 'c’


a = c.area();// On invoque la méthode 'area' de l'instance 'c’
pi = Math.PI;// On accède à l'attribut statique 'PI' de la
classe 'Math’
b = Math.sqrt(2.0);// On invoque la méthode statique 'sqrt' de
la classe 'Math’

} Les méthodes sont définies directement au sein de la classe.

73 Dr. Ing. Mohamed KOUBAA [POO Java]


Membres statiques
} Les variables static sont communes à toutes les
instances de la classe (équivalent à une variable partagée
par différentes instances d’une même classe).

} Il n'est pas nécessaire d'instancier une classe pour


accéder à l’un de ses membres statiques.

74 Dr. Ing. Mohamed KOUBAA [POO Java]


Membres statiques

75 Dr. Ing. Mohamed KOUBAA [POO Java]


Visibilité
} Les classes, attributs et méthodes peuvent être visibles ou
non à l'intérieur d'autres packages ou d'autres classes. :
} Pas de mot-clé (accès par défaut): visible par tout le package .

} private : visible par la classe uniquement.

} protected : visible par tout le package et par les sous-classes.

} public : visible par tout le monde.

76 Dr. Ing. Mohamed KOUBAA [POO Java]


Visibilité
} int a : lié à l'instance, visible par tout le package.
} static int b : lié à la classe, visible par tout le package.
} private int c : lié à l'instance, visible par la classe uniquement.
} private static int d : lié à la classe, visible par la classe
uniquement.
} protected int e : lié à l'instance, visible par tout le package et
par les sous-classes.
} protected static int f : lié à la classe, visible par tout le
package et par les sous-classes.
} public int a : lié à l'instance, visible par tout le monde.
} public static int g : lié à la classe, visible par tout le
monde.

77 Dr. Ing. Mohamed KOUBAA [POO Java]


Visibilité : un exemple

78 Dr. Ing. Mohamed KOUBAA [POO Java]


L’héritage
} Une classe ne peut hériter (extends) que d'une seule classe.
} Les classes dérivent par défaut de java.lang.Object.
} L'opérateur instanceOf permet de déterminer la classe
d'une instance.
Animal

Lion

79 Dr. Ing. Mohamed KOUBAA [POO Java]


L’héritage

80 Dr. Ing. Mohamed KOUBAA [POO Java]


L’héritage
} Une classe peut définir des variables portant le même
nom que celles de ses classes ancêtres.
} Une classe peut accéder aux attributs (variables) redéfinis
de sa classe mère en utilisant super (super-classe).
} Une classe peut accéder aux méthodes redéfinies de sa
classe mère en utilisant super.

81 Dr. Ing. Mohamed KOUBAA [POO Java]


L’héritage

82 Dr. Ing. Mohamed KOUBAA [POO Java]

Vous aimerez peut-être aussi