Vous êtes sur la page 1sur 143

Année Universitaire: 2023-2024

Niveau : 2LISI & 2LSI & 2LIG


Module: Programmation orientée objet

Enseignante: Dr Inès Sghir

1
Chapitre 1: Introduction

2
PROBLÉMATIQUES
 Un Logiciel est ensemble de programmes, de
procédés, de règles, et des documentations
relatifs au fonctionnement de l’ensemble des
traitements d’un système d’information.
 Le principal rôle d’un logiciel est d’automatiser un
processus d’information dans un système d’information.
 L’automatisation de ce processus permettra de faciliter
les tâches des utilisateurs.
 La construction de logiciel est alors une activité
importante qui nécessite l’implication de plusieurs
ressources (financières, humaines) et nécessitent un
temps considérable.
 La durée de vie du logiciel ne s’arrête pas au moment de
3
son intégration en le rendant accessible et fonctionnel
aux utilisateurs.
PROBLÉMATIQUES
 Un logiciel doit être maintenu et peut évoluer et
survivre des années et des années.

 D’où la nécessité de maintenir le logiciel au fur et à


mesure de son utilisation.

 Les questions qui se posent : comment peut on produire


des logiciels de qualité tout en :
 Respectant les besoins des utilisateurs

 Minimisant les couts de développement

 Minimisant les coûts de maintenance et d’évolution

 Garantir la Fiabilité
4
SOLUTIONS
 Pour construire des logiciels de qualité il faut appliquer
des méthodes et des principes connus de l’ingénieur
au domaine du logiciel et qui seront la base de
construction d’une industrie de logiciel.

 On parle des principes du génie logiciels. Quels


sont ces principes ?
“There are two ways of constructing a software design :
One way is to make it so simple that there are obviously
no deficiencies, and the other way is to make it so
complicated that there are no obvious deficiencies.”
Hoare
5
SOLUTIONS
Parmi les principes du génie logiciel, on peut citer (selon
C.ghezzi) :

 La décomposition des problèmes en sous-


problèmes indépendants.

En anglais « Separation of concerns ». Il s’agit de :


 Décorréler les problèmes pour n’en traiter qu’un seul
à la fois.
 Simplifier les problèmes (temporairement) pour
aborder leur complexité progressivement

6
SOLUTIONS
 La modularité
C’est une instance cruciale du principe de décomposition
des problèmes. Il s’agit de partitionner le logiciel en
modules qui :
 ont une cohérence interne (des invariants).
 possèdent une interface ne divulguant sur le contenu
du module que ce qui est strictement nécessaire aux
modules clients.
 L’évolution de l’interface est indépendante de celle de
l’implémentation du module.
 Les choix d’implémentation sont indépendants de
l’utilisation du module.
 Ce mécanisme s’appelle le camouflage de 7

l’information (information hiding).


SOLUTIONS
 L’abstraction
 C’est encore une instance du principe de décomposition
des problèmes.
 Il s’agit d’exhiber des concepts généraux regroupant un
certain nombre de cas particuliers et de raisonner sur
ces concepts généraux plutôt que sur chacun des cas
particuliers. Le fait de fixer la bonne granularité de
détails permet :
 de raisonner plus efficacement.
 de factoriser le travail en instanciant le raisonnement
général sur chaque cas particulier.

 Exemples en programmation : les classes abstraites 8


dans les langages orienté objets, les fonctions d’ordre
supérieur.
SOLUTIONS
La généricité.
Un logiciel réutilisable a beaucoup plus de valeur
qu’un composant dédié. Un composant est
générique lorsqu’il est adaptable à d’autre projet logiciel
ou bien il est paramétrable dans d’autres contextes
d’utilisations.

Exemple : Comportement d’une pile sans savoir le type


des données contenues.

9
SOLUTIONS
La construction incrémentale
Un développement logiciel a plus de chances d’aboutir s’il
suit une construction incrémental (babysteps).

 Exemple 1 :
Laquelle de ses deux méthodes de programmation est la
plus efficace ?
1. Écrire l’ensemble du code source d’un programme et
compiler.
2. Écrire le code source d’une fonction, le compiler et
passer à la suivante.
 Exemple 2 :

1. Réaliser un noyau du logiciel 10

2. Ajouter les fonctionnalités une à une..


SOLUTIONS
 L’anticipation des évolutions

 Un logiciel a un cycle de vie plus complexe que l’habituel


cycle « commande-spécification production- livraison ».
 La maintenance est la gestion des évolutions du logiciels
sont 2 phases importante dans le cycle de vie logiciel.
 Il est primordial de prévoir les évolutions possibles d’un
logiciel pour que la maintenance soit la plus efficace
possible.
 Pour cela, il faut s’assurer que les modifications à
effectuer soient le plus locales possibles.
 Il faut concevoir un système suffisamment riche pour
que l’on puisse le modifier d’une façon incrémentale. 11
 Le système doit être ouvert aux évolutions mais
fermé aux changements.
PROGRAMMATION PROCÉDURALES
 La programmation procédurale consiste à décomposer le
processus de construction du logiciel ( on parle de la
phase d’implémentation) en plusieurs fonctionnalités
(procédures), de complexité plus réduite, qui :
 Effectuent un traitement sur des données
 Qui retournent une valeur après leur invocation
(fonction)

L’approche procédurale se base sur la réponse à la


question « Que doit faire mon programme ? »

12
PROGRAMMATION PROCÉDURALES

13
PROGRAMMATION PROCÉDURALES
Les limites d’un programme en programmation
procédurale :
 Il n’y a pas de méthode ou de cadre pour bien
organiser les fonctions.
 Les modifications d’une fonction entraînent d’autres
modifications dans d’autres fonctions, etc.
 La portée d’une modification est trop grande et
difficile à gérer.
 Difficulté de faire évoluer le code
 Redondance dans le code (la même chose est codé
plusieurs fois)
 Propagation des erreurs – déboggage difficile

14
PASSAGE DE LA PROGRAMMATION
PROCÉDURALE À LA PROGRAMMATION
OBJETS

 La programmation structurée traditionnelle consiste à


concevoir un ensemble de fonctions (ou algorithmes)
permettant de résoudre un problème.

 Après avoir déterminé ces fonctions, l’étape suivante


consistait traditionnellement à trouver la manière
appropriée de stocker des données.

15
PASSAGE DE LA PROGRAMMATION
PROCÉDURALE À LA PROGRAMMATION
OBJETS
 La POO inverse cet ordre et place les données au premier
plan avant de déterminer l’algorithme qui sera employé
pour opérer sur ces données.
 En POO, la clé de la productivité consiste à rendre
chaque objet responsable de l’accomplissement de
quelques tâches associées.
 Si un objet dépend d’une tâche qui n’est pas de sa
responsabilité, il doit avoir accès à un autre objet capable
d’accomplir cette tâche.
 Le premier objet demande alors au second d’exécuter la
tâche en question. Cela s’effectue grâce à une version 16
plus généralisée des appels de fonctions auxquels vous
êtes habitués en programmation traditionnelle.
PASSAGE DE LA PROGRAMMATION
PROCÉDURALE À LA PROGRAMMATION
OBJETS

17
PASSAGE DE LA PROGRAMMATION
PROCÉDURALE À LA PROGRAMMATION
OBJETS

 La construction des logiciels avec des langages orientés


objet consiste donc à décomposer le programme en
plusieurs objets qui contiennent :
 Des données internes
 Des traitements manipulant des données internes ou d’autres
données
 Les données d’un objet sont appelées ses attributs et ses
traitements sont appelés méthodes (opérations)
 Une approche orientée-objet permet de répondre à la
question : « De quoi doit être composé mon programme ?18
»
PRINCIPES DE LA PROGRAMMATION
ORIENTÉE OBJETS

 Encapsulation : Tous les données sont soient liées a un


objet soient liées à une classe.
Chaque objet peut manipuler ces données mais, ne peut
accéder aux données d’un autre objet qu’à travers
l’échange de message avec l’objet en question

 Séparation et spécialisation : Les classes définies


(résultat de découplage) doivent être clairement
séparables et ne partagent pas des propriétés similaires
19
PRINCIPES DE LA PROGRAMMATION
ORIENTÉE OBJETS

 Abstraction et généralisation : Détail de


l’implémentation seront cachés et les propriétés
partagées doivent être modélisées dans une même entité
(classe).

 Héritage : possibilité d’héritage entre les classes qui


partagent des propriétés communes de telle façon qu’une
classe est une extension d’une autre classe.

20
PRINCIPES DE LA PROGRAMMATION
ORIENTÉE OBJETS

Exemple d’application :
Ecrire un programme qui permet de gérer le calcul des
moyennes d’une institution (contenant 10 élèves) sachant
que le calcul des moyennes pour :

 Etudiant 1 ere et 2 eme: (note1 + note 2 ) /2


 Etudiant 3 eme : ((note1 *2) + note pfe) /3

 Etudiant 1 ere et 2 eme : nom, prenom, adresse, num-cin,


note1 et note 2
 Etudiant 3 eme : nom, prenom, adresse, num-cin, note1,
note PFE 21
PRINCIPES DE LA PROGRAMMATION
ORIENTÉE OBJETS

Exemple d’application :
 Ingrédient Programmation procédurale : variable,
test(if..), boucle, fonctions, passage de paramètres
 Ingrédient Programmation orientée objet : Classe, objet,
méthodes, attribut, héritage, encapsulation, instance,

- Classe Etudiant
Attributs/Méthodes(traitements ou bien opérations)
- Classe Etudiant 3 eme
Attributs/Méthodes
22
-Classe Etudiant 1 et 2 eme
Attributs/Méthodes
OBJECTIFS DE LA PROGRAMMATION
ORIENTÉE OBJETS

 Faciliter le développement et l'évolution des applications:


Découpler (séparer) les parties des projets.
 Permettre le travail en équipe ;

 Améliorer la qualité des logiciels (moins de bugs).

 Réutiliser facilement du code.

23
OBJECTIFS DE LA PROGRAMMATION
ORIENTÉE OBJETS

 Faciliter le développement et l'évolution des applications:


Découpler (séparer) les parties des projets.
 Permettre le travail en équipe ;

 Améliorer la qualité des logiciels (moins de bugs).

 Réutiliser facilement du code.

24
Chapitre 2: Java-
Présentation de
l’environnement/Éléments
de base

25
QU’EST-CE QUE JAVA ?
 Java est un langage de programmation OO.
 Il a été développé par SUN.

 Objectif:
 Exécution standardisé des programmes.
 Maintenance simplifié.
 Indépendance vis-à-vis des plateformes.

 Java est une plateforme, elle est constitué de :


 Un langage de programmation.
 La « Java Virtual Machine ».
 Des interfaces de programmation d’application (Java API)
26
 Un ensemble d’outils permettent la mise en oeuvre de solution
logicielle. (javadoc, rmi,…).
PROPRIÉTÉS DE JAVA
 Simplicité et productivité
 Syntaxe proche du C/C++

 Élimination de la notion de pointeur, structure…

 Intégration complète de l’OO

 Distribué

 La manipulation d’objet locaux ou distribué se fait

de la même façon.
 Interprété

 Un programme java n’est pas compilé en code machine


mais transformé en code intermédiaire interprété.
 Gestion mémoire (« Garbage collector »)

 Un système de ramasse miette permet de décharger le 27


programme d’une gestion fastidieuse de la mémoire.
PROPRIÉTÉS DE JAVA
 Robustesse, fiabilité et sécurité
 Langage fortement typé.
 Interdiction de conversion de type impliquant une perte de
précision.
 Ouverture
 Support intégré d’Internet
 Connexion intégrée aux bases de données (JDBC)
 Support des caractères internationaux
 Distribution et aspects dynamiques
 Performance
 Dynamique et mutithread
 Les classes sont charger au fur et a mesure des besoins.
 Mise à jour de l’application peut se faire classe par classe.
28
 Gestion multithreading simple : écouter de la musique en
voyant une animation flash.
PROPRIÉTÉS DE JAVA

 La portabilité:
o Le compilateur Java génère

un bytecode, c’est à dire


un format intermédiaire,
neutre architecturalement,
conçu pour faire transiter
efficacement le code vers
des hardware différents
et/ou plateformes différentes.
o Le bytecode ne peut-être interprété que par le processeur
de la JVM 29
o La devise de java : écrire une fois , exécuter partout
DÉPLOIEMENT D’UN PROGRAMME
PARADIGME CLASSIQUE DE LA
COMPILATION

Génère du code natif


Exécuté une seule fois
directement
Mais différent pour
exécutable, mais
chaque environnement
spécifique à
chaque environnement

30
DÉPLOIEMENT D’UN PROGRAMME
PARADIGME CLASSIQUE DE LA
COMPILATION

31
LA PLATEFORME JAVA
 Plateforme = environnement hardware ou software sur
lequel le programme est exécuté.

 La Java « Platform » se compose de:


 La machine virtuelle JAVA (JVM)
 Une fois le programme java compilé et converti en Byte-
Code, c’est la JVM qui est capable d’interprété et de
permettre au processeur d’exécuter ce code.

 Les interface de programmation d’application (API)


• Ensemble de classe prédéfinit de java qui existe
dans chaque installation.
• Elles sont organisées sous forme de package. (E/S,
32

Swing, Awt…)
VERSIONS DE JAVA

33
ÉLÉMENTS DE BASE DE LANGAGE JAVA

Commentaires:

 Trois notations sont admises pour l’insertion de


commentaire :
 // commentaire sur une ligne.
 /* commentaire sur plusieurs lignes */
 /** commentaire d’explication utilisé par javadoc sur
une ou plusieurs lignes */

34
ÉLÉMENTS DE BASE DE LANGAGE JAVA

Points virgules, blocs et blancs


 Toute instruction doit se terminer par un point virgule
«;»
 Un bloc est une suite d’instruction délimité par «{» et «}».

 Les blancs sont autorisés entre les éléments du code


sources (espace, tabulation et saut de ligne)
• Exemple:
{
x=2;
y=10;
} 35
{x=2;y=10;}
ÉLÉMENTS DE BASE DE LANGAGE JAVA

Identificateurs
 Un identificateur désigne tout objet que le programmeur
souhaite manipuler.
 Un identificateur java commence par une lettre, un trait
de soulignement « _ » ou le signe dollars « $ ».
 Les caractères suivant de l’identificateur peuvent
contenir des chiffres.
 Il y a une distinction entre majuscule et minuscule.

 Exemple:
 MaClasse, _maVariable, $maFonction, C1, … (Valide)
36
 1var, -maclasse, fonction-recherche, … (non valide)
ÉLÉMENTS DE BASE DE LANGAGE JAVA

Mots réservés / clé


 Ce sont des identificateurs prédéfinis et ont un sens bien
définit.

37
ÉLÉMENTS DE BASE DE LANGAGE JAVA
Types de données
 Java prend en comptes les types de données suivant :
1. Les types primitifs
2. Les chaînes de caractères : Pour manipuler les chaînes
de caractères, Java offre une classe appelée String. Une
constante chaîne de caractères est placée entre doubles
cotes.
3. Les types par références : Contrairement aux types
primitifs qui possèdent des tailles standard et fixes, un
type tableau ou un type classe ne peut pas avoir une
taille standard. Au lieu de manipuler directement un
objet de la classe ou un objet tableau, Java manipule
une autre donnée qui représente une référence à l’objet38
manipulé. Pour cela classes ou types tableau sont
appelés des types références.
ÉLÉMENTS DE BASE DE LANGAGE JAVA
Types primitifs
 Catégorie logique : Type boolean
En java, un boolean n’est pas considéré comme une valeur
numérique. Seules valeurs possibles sont true ou false.
exemples: boolean trouve=true;

 Catégorie caractère : Type char


le type ‘char’ permet de représenter les caractères isolés
(c’est un caractère Unicode représenté sur 16 bits). Elle
est délimité par deux apostrophes.
exemples:
char x=‘a’; char omega=(char) 969;
39
char z=‘\u1200’
ÉLÉMENTS DE BASE DE LANGAGE JAVA
Types primitifs
 Catégorie entier : types byte, short, int et long
il existe 4 types d’entiers en java. Chaque type est déclaré
avec l’un des mots clés byte, short, int et long.

Exemple:
Int x=2; 40

Long y=3L;
ÉLÉMENTS DE BASE DE LANGAGE JAVA
Types primitifs
Catégorie flottant : type float et double
une constante numérique est flottante si elle contient un
point décimal, une partie exponentielle lettre E ou si elle
sont suivit par la lettre F ou D.
Exemple :
 2.3F

 2.3

 2.3E4

 4F

Remarque : les expression littérale flottante sont de41


type double sauf si elles sont explicitement suivit par la
lettre F.
ÉLÉMENTS DE BASE DE LANGAGE JAVA
Déclaration et affectation
 La déclaration et l’affectation s’effectue de manière
similaire au C.
Exemple :
 int x=0, y=0;

 float z=2.3F;

 double t=2.3;

 char c=‘r’;

 Quand une constante est déclaré avec le modificateur


final, elle ne peut plus être modifier . C’est une constante
nommée.
 il est alors obligatoire de l’initialiser dans sa déclaration.
42
Exemple :
final double PI=3.14;
ÉLÉMENTS DE BASE DE LANGAGE JAVA
Les expressions en java: Les opérateurs de
calcul
 Les opérateurs de calcul permettent de modifier
mathématiquement la valeur d'une variable

43
ÉLÉMENTS DE BASE DE LANGAGE JAVA
Les expressions en java: Les opérateurs
d’incrémentation
 Ce type d'opérateur permet de facilement augmenter ou
diminuer d'une unité une variable.
 Ces opérateurs sont très utiles pour des structures telles
que des boucles, qui ont besoin d'un compteur (variable qui
augmente de un en un).
 Un opérateur de type x++ permet de remplacer des
notations lourdes telles que x=x+1 ou bien x+=1

44
ÉLÉMENTS DE BASE DE LANGAGE JAVA
Les expressions en java: Les opérateurs de
comparaison

45
ÉLÉMENTS DE BASE DE LANGAGE JAVA
Conversion
 Si dans une expression les opérandes sont de différents type
le résultat est alors convertis vers le type le plus grand.
Exemple :
 int x=2; long y=4, z;

 z=x*y; //le résultat est alors convertis en long

 Pour l’affectation, la donnée a droite est convertie dans le


type de celle de gauche.
 Si le type de la destination est plus faible l’instruction est
considéré erronée.
Exemple :
 int i=2; long x=5;
 x=i; //instruction légale 46

 i=x; // instruction erronée


ÉLÉMENTS DE BASE DE LANGAGE JAVA
Conversion
 On peut convertir explicitement une valeur en forçant la
transformation. Le type ciblé est placé entre () et est
utilisé comme préfixe de l’expression dont on veut
modifier le type.
<nom_variable> = (<type>) <expression>

Exemple :
 float z; z=(float) 14.33;
 int x; x=(int) z; //x contient la valeur 14

47
LES STRUCTURES DE BASE
STRUCTURE ALTERNATIVE : IF..ELSE

if (<expression booléenne>)
{
//instruction ou bloc d’instruction a exécuter si
condition= vrai.
}
else
{
//instruction ou bloc d’instruction a exécuter si
condition= faux.
} 48
LES STRUCTURES DE BASE
STRUCTURE ALTERNATIVE : IF..ELSE

La partie else est optionnelle et peut être omise s’il n’y a
pas d’actions à effectuer lorsque la condition est fausse.
Exemple :
int i=2; boolean fin;
if(i<0)
{fin=true; i=0;}
else i++;

49
LES STRUCTURES DE BASE
STRUCTURE ALTERNATIVE : SWITCH
switch (<expression >)
{
case <valeur 1> : <bloc 1> break;
case <valeur 2> : <bloc 2> break;
……
case <valeur n> : <bloc n> break;
default : <bloc n+1>
}
 l’expression du switch doit être de type compatible avec
un entier. Les expression en flottant ou en double ne sont
pas permises. 50
 la spécification du break sont nécessaire pour gérer les
ruptures de séquences.
LES STRUCTURES DE BASE
STRUCTURE ALTERNATIVE : SWITCH
 Exemple :
int k=0, i=2;
switch(i)
{
case 1: k+=20; break;
case 2: k+=2; break;
case 3: k+=10; break;
}

51
LES STRUCTURES DE BASE
OPÉRATEUR TERNAIRE
variable = condition ? si_test_vrai : si_test_faux ;
 C’est équivalent à :

If(codition)
si_test_vrai
Else
si_test_faux

 Exemple:
int a=1,b=3;
int min=(a<b)?a:b; //parenthèse facultatives}
52
LES STRUCTURES DE BASE
STRUCTURE RÉPÉTITIVE : WHILE
while (<expression_booléenne>)
{
<instruction ou bloc>
}

 Exemple:
int i=0;
System.out.println(‘‘je sais compter jusqu’a 10’’);
while (i<10)
{ System.out.println(i);
i++; 53

}
LES STRUCTURES DE BASE
STRUCTURE RÉPÉTITIVE : DO .. WHILE
do
{
<instruction ou bloc>
}
while (<expression_booléenne>);
 Exemple:

int i=10;
System.out.println(‘‘je sais compter jusqu’a 10 a l’envers’’);
do
{ System.out.println(i);
i--; } 54

while(i>=0);
LES STRUCTURES DE BASE
STRUCTURE RÉPÉTITIVE : FOR…
for (
<initialisation> ; <expression_booléenne> ;
<incrémentation> )
{
<instruction ou bloc d’instruction>
}

 Exemple:
 for (int i=0;i<=10;i++)
System.out.println(i);
 for ( ; ; ) boucle infinie 55
PREMIER PROGRAMME JAVA
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
 En utilisant un environnement de développement (IDE)

 Netbeans (http://www.netbeans.com )

 Borland JBuilder (http://www.borland.com/jbuilder )

 IBM WebSphere Studio

(http://www.ibm.com/software/awdtools )
 Sun ONE Studio (http://wwws.sun.com/software/sundev)

 Microsoft .Net Studio (http://msdn.microsoft.com/vstudio)

 Jcreator 56

 …
PREMIER PROGRAMME JAVA
Créer un fichier : HelloWorld.java

 Compiler le programme : javac HelloWorld.java


 Le compilateur génère le bytecode dans le fichier : HelloWorld.class
57
 Exécuter l’application : java HelloWorld
 « Hello the World » s’affiche à l’écran
PREMIER PROGRAMME JAVA
Créer un fichier : HelloWorld.java

 Compiler le programme : javac HelloWorld.java


 Le compilateur génère le bytecode dans le fichier : HelloWorld.class
58
 Exécuter l’application : java HelloWorld
 « Hello the World » s’affiche à l’écran
Chapitre 3: Les principes
de la programmation
Objet
« Objet, classe »

59
NOTION D’OBJET
 C’est une notion très proche de celle de la vie courante
 On représente en permanence le monde qui nous entour
sous forme d’objet plus ou moins abstrait (chaise,
table,stylo, voiture, animaux...).
 Cette vision d’un objet peut être différente en fonction de
nos besoins :
 Un conducteur voit une voiture comme un ensemble
complexe de commande pour la faire avancer, diriger
et interagir avec d’autres véhicules.
 Un policier voit un ensemble de véhicule comme un
ensemble d’objet qui doivent respecter des règles de
circulation. (camion ou voiture sont de même type)
 Un garagiste voit un véhicule comme étant un 60

ensemble d’objets qui interagissent entre eux.


NOTION D’OBJET

 Un objet est définit de la manière dont on peut interagir


avec lui et cela en fonction du problème à résoudre.

 Il correspond à un certain niveau d’abstraction de la


réalité et est représenté essentiellement par les services
qu’il peut nous rendre.

61
ENCAPSULATION, MÉTHODES ET
INVOCATION
 Un objet est une boite noire qui offre un certain nombre
de fonctions ou méthodes permettant d’interagir avec lui
peut importe comment il est construit de manière
interne.
 La seule chose nécessaire pour pouvoir utiliser un objet
est savoir ce qu’il peut faire et surtout comment le lui
demander.
 Ex: un poste de télé est une boite noir ayant pour
interface : une télécommande , écran, haut parleurs.
Pour changer de chaîne il suffit de demander à la boite
noire de le faire pour nous en appuyant sur un bouton.
 L’ensemble des méthodes proposées par un objet est
62
appelé interface de l’objet.
ENCAPSULATION, MÉTHODES ET
INVOCATION
 On dit qu’un objet est encapsuler par son interface
 la seule façon de communiquer avec cet objet est
d’invoquer une des méthodes de son interface.

 L’encapsulation d’un objet par son interface permet de


masquer son contenu possibilité de modifier son
contenu sans impacte pour le reste du monde.

 L’encapsulation constitue un des points centraux de


l’approche objet. En faisant cela on dit a l’objet ce qu’il doit
faire et non comment il doit le faire.
63
ENCAPSULATION, MÉTHODES ET
INVOCATION
 Ex: si on freine avec la voiture on ce contente d’appuyer
sur la pédale (méthode freinage). Peut importe s’il s’ajit
d’un frein à disque ou abs…

 Ex: un policer invoque la méthode arrêter en levant la


main et il ne s’occupe pas de la manière dont chaque
véhicule s’arrête.

64
NIVEAU D’ABSTRACTION ET CLASSES
D’OBJETS
 Plusieurs niveaux d’abstractions sont possibles lorsque l’on
représente un certain objet réel.
 Exemple:

lorsqu’on regarde une table de cuisine, on fait généralement


abstraction des éléments qui la compose physiquement
pour ne voir que l’objet de notre cuisine qui permet de
ranger les couverts et servir de support pour nos repas.

En fait on range implicitement cette table de cuisine


particulière « instance » dans l’ensemble le plus grand
de celui des tables de cuisine ayant les même
fonctionnalités « classe ». 65
NIVEAU D’ABSTRACTION ET CLASSES
D’OBJETS
 Une table de cuisine est une table qui possède des
caractéristiques spécifiques.
 On dit que la classe des tables de cuisine est une classe
fille de la classe des tables et qu’elle hérite des
caractéristiques de cette classe tout en la spécialisent par
l’ajout de nouvelle fonctionnalités.
 Une classe fille est définie à partir de sa mère par héritage
(réutilisation de ce qui est déjà défini) et spécialisation
(ajout de nouvelles fonctionnalités).

66
POLYMORPHISME
 C’est un mot Greg « plusieurs formes ».

 Signifie qu’une méthode peut être définit dans plusieurs


classe et que chaque classe peut implémenter (réaliser)
cette méthode à sa manière.

 Ex: lorsqu’on freine dans une voiture, on sais que la


fonction attendue est de stopper le véhicule. En fonction du
type réel de véhicule (de sa classe plus spécifique) les
actions réelle sont très différentes (abs, tambours,…). Le
conducteur n’a pas besoin de ce niveau de détail pour
savoir s’arrêter.
67
OBJETS, CLASSES

 Qu’est ce qu’un objet?


o C’est l’unité de base de la conception OO.
o Il regroupe à la fois des données et des opérations qui
permettent de manipuler ces dernières.
o Les données sont généralement appelées attributs et les
opérations sont appelées méthodes.

 Un objet est caractérisé par :


o Attributs typés.
o Méthodes.
o Identité, pour le distinguer des autres objets.
68
OBJETS, CLASSES

Exemple:
 On peut modéliser une personne par l’objet Personne. Les
attribut sont alors les information concernant la personne
(nom, prénom, DN,…). Et comme méthode on aurait par
exemple calcul_Age, calcul_salaire…

69
OBJETS, CLASSES
 Qu’est ce qu’une classe?
C’est une description d’un ensemble d’objets ayant des
propriétés et des comportements commun.
 Les objets sont alors des représentations dynamiques (ou «
instanciation » ) vivantes du modèle définit pour eux au
travers de la classe.
 Une classe en java est définie en précisant son nom, en
déclarant ces attributs et en définissant ses méthodes.
 Syntaxe:

Class nom_classe
{
// déclaration des attributs
// déclaration des méthodes 70

}
OBJETS, CLASSES
Exemple:
Class Rectangle
{
//declaration attributs
int long;
int larg;
// autres attributs eventuels
//declartion des fonctions
void allongerRectangle(int lg)
{ long+=lg;}
//… autres méthodes
} 71
OBJETS, CLASSES
Déclaration des attributs
[<modificateur_visiblité>] <type> <nom>[=<expression>]
 public int x;
 public int y=34;
 private int z=2;

 Déclaration des méthodes


[<modificateur_visiblité>] <type_retour>
<nom>([<arguments>])
{
// declaration variable
// les instructions 72
}
OBJETS, CLASSES
 Création et initialisation des objets

1. Déclarer une variable de la classe que l’on désire


instancier. Cette variable n’est pas l’objet lui-même mais
une référence à cet objet.
Ex: Rectangle r1; // r1

2. Allouer l’espace mémoire nécessaire à l’objet et renvoyer


l’adresse de l’objet à la variable référence. Cette opération ce
fait à l’aide de l’opérateur new au quel on passe le nom
de la classe.
ex : r1= new Rectange(); 73
OBJETS, CLASSES
 Constructeur de classe
 Un constructeur est une méthode particulière appelée au
moment de la création d’un objet. Son rôle est d’initialiser
l’objet en fonction des paramètres fournis par l’utilisateur.

 Le nom du constructeur doit correspondre au nom de la


classe sans aucun type de retour.

 Exemple:
Rectangle(int lg,int larg)
{
longueur=lg; largeur=larg;
74
}
OBJETS, CLASSES
 Constructeur de classe
 Une classe peut avoir plus qu’un constructeur

 Exemple:
Rectangle (int lg,int larg) {
longueur=lg; largeur=larg;
}
Rectangle () {
longueur=0; largeur=0;
}

 Toute classe comporte au moins un constructeur. En effet,


75
si aucun n’est préciser on a le constructeur par défaut.
OBJETS, CLASSES
 Utiliser un objet
 Accès à un attribut :

 L’accès à un attribut dans une classe se fait toujours

à l’intérieur d’une méthode. Cette méthode peut


intervenir à la classe elle-même ou à autre classe.
 Si l’accès se fait de l’extérieur de la classe, alors on

crée un objet de la classe puis on applique cette


syntaxe:
<nom_Objet>.<Nom_Attribut>
 Invocation d’une méthode :

 Même principe. A l’intérieur de la même classe c’est


l’appel directe:
<nom_méthode>(<liste_arguments>); 76

 si a l’extérieur de la classe on utilise un objet.


OBJETS, CLASSES
 Contrôle d’accès au membre :
 L’accès aux membre (données et méthodes) d’une classe
peut être contrôlé. En effet, l’utilisation du modificateur
d’accès « private » pour un membre rend impossible
tout accès à ce membre à partir de l’extérieur.
 Exemple :
Class Rectangle
{ private int longueur; private int largeur;
// déclaration des méthodes…}
Class Test
{public static void main (String[] args){
Rectangle r=new Rectangle();
77
r.longueur=10; //instruction éronné}}
OBJETS, CLASSES
 Les références :
 Ce sont les variables qui permettent de désigner et
manipuler les objets.
 Les seuls opérateurs sur les références sont des
opérateurs logiques:
 ==: teste si 2 références désignent le même objet.

 != : teste si 2 référence ne désignent pas le même

objet
 instanceof : retourne true si l’objet à gauche est une

instance de la classe placée à sa droite ou si la


comparaison est faite entre un objet d’une classe
implémentant une interface Sinon il retourne false.
78
OBJETS, CLASSES
Les références :
Exemple :
Class Rectangle
{ private int longueur; private int largeur;
// déclaration des méthodes…
}
Class Test
{public static void main (String[] args){
Rectangle r=new Rectangle();
boolean val1=r instanceof Rectangle;//val=true
boolean val2=r instanceof Test;//val=false
}} 79
OBJETS, CLASSES
 Les références :

 Le mot clé this représente une référence sur l’objet courant


(celui qui est en train d’exécuter la méthode contenant le
this).

 La référence this peut être utile :


 Lorsqu’une variable locale ou paramètre cache, en

portant le même nom, un attribut de la classe.


 Pour déclencher un constructeur depuis un autre

constructeur.

80
OBJETS, CLASSES
 Les références :.
 Exemple :

Class Date
{int jour=1, mois=1, an=1990;
Date()
{an=2000; /* peut s’écrire : this.an=2000*/}
Date(int an)
{this.an=an; /* le paramètre en cache l’attribut an*/}
Date(int an, int mois, int jour)
{this.jour=jour;
this.mois=mois;
this(an); /* Appel du deuxième constructeur*/} 81

}
OBJETS, CLASSES
 La référence this :

 Le mot clé this représente une référence sur l’objet courant


(celui qui est entrain d’exécuter la méthode contenant le
this)

 La référence this peut être utile :


 Lorsqu’une variable locale ou paramètre cache, en

portant le même nom, un attribut de la classe.


 Pour déclencher un constructeur depuis un autre

constructeur.

82
OBJETS, CLASSES
 La référence this :

Exemple :
Class Date
{int jour=1, mois=1, an=1990;
Date()
{an=2000; /* peut s’écrire : this.an=2000*/}
Date(int an)
{this.an=an; /* le paramètre en cache l’attribut an*/}
Date(int an, int mois, int jour)
{this.jour=jour;
this.mois=mois; 83

this(an); /* Appel du deuxième constructeur*/}}


OBJETS, CLASSES
 La référence null :
 Le mot clé null permet de représenter la référence qui ne
représente rien.
 On peut assigner cette valeur à n’importe quelle variable
ou attribut contenant une référence.
 C’est aussi la valeur par défaut d’initialisation des
attributs représentant des références.
 Exemple :

Class Test
{
Voiture v1; //initialisation à null par défault.
void methode()
84
{…
if (v1==null) v1=new Voiture();…}}
OBJETS, CLASSES

 Surcharge des méthodes :


 Java permet de réutiliser un même nom de méthode pour
plusieurs fonctionnalités. On dit que la méthode est
surchargée.

 Exemple :
Une méthode qui permet l’affichage de son argument.
void print(int)
void print(float)
void print (double)

85
OBJETS, CLASSES

 Passage de paramètre des méthodes:

Java ne transmet les arguments de type simple que par


valeur

l’argument ne peut être modifié par la méthode appelée.

 Si une instance d’un objet est transmise comme argument


à une méthode, le contenu de l’objet peut être modifié dans
la méthode appelée et non sa référence.

86
OBJETS, CLASSES
 Passage de paramètre des méthodes:
Exemple
class Test
{ int val=11;
public void modif(int n)
{ n=22; }
public void modifObj(Test obj)
{ obj.val=22; }
public static void main(String a[])
{ Test t=new Test();
int n=0;
t.modif(n); System.out.println(n); //n=0;
87
t.modifObj(t); System.out.println(t.val); //val=22}
}
OBJETS, CLASSES
 Attributs de classe:
 C’est un attribut marqué par le mot clé static.

 Le mot clé static , utilisé pour un attribut, permet


d’indiquer que cet attribut est commun à tous les objets de
la classe concernée
si on modifie cet attribut pour un objet donné, il sera
modifié pour tous les objets de la classe.

88
OBJETS, CLASSES
 Attributs de classe:

On accède a un attribut statique :


 Via une instance quelconque de la classe : V1.id
 Via le nom de la classe : Voiture.id

On peut associer static à final pour un attribut constant et


commun à tous les objets de la classe.
final static float PI=3.14F;

89
OBJETS, CLASSES
 Méthodes de classe:

 Une méthode de classe est une méthode de type static.


 Une méthode de classe est une méthode dont les actions
concernent la classe entière.
 Une méthode statique ne peut accéder qu’au attribut
statique de la classe.
 On peut invoquer une méthode statique soit :

 Sur la classe elle-même

 Sur un objet de cette classe

90
OBJETS, CLASSES
Méthodes de classe:
Exemple

91
OBJETS, CLASSES
 Méthodes de classe:

 Une méthode statique ne peut pas avoir de référence this


car elle peut être appelé sans l’intermédiaire d’un objet.

 On utilise généralement des méthodes static pour


rassembler un ensemble d’outil sur un certain objet.

 La méthode main est une méthode de classe, elle est la


première à être appelée quand on lance la JVM avec sa
classe.

 La méthode main peut être lancée sans qu’aucune instance


92
de la classe qui la contient n’existe.
OBJETS, CLASSES
 Méthodes de classe:

 Une méthode statique ne peut pas avoir de référence this


car elle peut être appelé sans l’intermédiaire d’un objet.

 On utilise généralement des méthodes static pour


rassembler un ensemble d’outil sur un certain objet.

 La méthode main est une méthode de classe, elle est la


première a être appelée quand on lance la JVM avec sa
classe.

 La méthode main peut être lancée sans qu’aucune instance


93
de la classe qui la contient n’existe.
Chapitre 4: Tableaux et
chaines de caractères

94
LES TABLEAUX
 En java le type tableau est assimilable à une classe et un
tableau est un objet référencé.

 Un objet tableau ne référence pas l’objet lui-même mais


uniquement l’adresse mémoire a qui il fait référence.

 Déclarer un tableau en java revient a réserver de la place


mémoire pour l’adresse de ce tableau.

 Pour créer un tableau il faut lui allouer l’espace mémoire


nécessaire après l’avoir déclaré.

95
LES TABLEAUX

Tableau à une dimension


– Déclaration :
<type> <nomTableau>[ ]; ou
<type> [ ]<nomTableau>;

– Exemples:
 Int notes[]; // tableau entiers

 char[] lettres; //tableau de caractères

 short t1[100]; //instruction illégale car il n’est pas

 //possible de définir un tableau de

 //taille fixe à la déclaration.


96
LES TABLEAUX
Tableau à une dimension
– Création :
 la déclaration ne fait que réserver l’espace mémoire allant
contenir l’adresse du tableau. Cette place mémoire est
identifié par le nom du tableau.

 l’allocation de la place mémoire se fiat par le mot clé new :


<nomTableau> = new <Type>[<dimension>];

– Exemple :
notes = new int[3];

97
LES TABLEAUX
Tableau à une dimension
– Initialisation:
 Lorsqu’un tableau est créé. Chacun de ces éléments est
initialisé.
 Cette initialisation se fait a 0 si les éléments sont des
entiers ou des réels. A false s’ils sont des booléens et a null
sinon.
– Exemples:
 int tab={3, 5, 7}; // c’est équivalent a faire

 int tab=new int[3]; tab[0]=3; tab[1]=5; tab[2]=7;

– La longueur d’un tableau peut être obtenue à partir de la


variable
membre length. 98

<nomTableau>.length
LES TABLEAUX
– Utilisation:
 le premier élément d’un tableau commence a l’indice 0 et le
dernier élément a l’indice n-1 (n le nombre d’éléments du
tableau).
 l’accès à un éléments du tableau se fait en mettant l’indice
de cet élément entre crochets. Par ailleurs si on essaie
d’accédé à un élément qui ce trouve en dehors des bornes
du tableau une erreur sera générée.

– Utilisation:
 in[] tab=new int[10];

 tab[0]=1;

 tab[10]=2;// erreur à la compilation 99


LES TABLEAUX
Tableau à deux dimensions
 Un tableau a 2 dimensions est tableau dont chaque
composantes est formée par un tableau.

 – Déclaration & création:


<type> [ ][ ]<nomTableau>=new <type> [N1][ ];
<nomTableau>[0]=new <type>[N21];
<nomTableau>[0]=new <type>[N22];…

– Exemples:
 Int[][] notes=new int[3][];

 notes[0]=new int[3];
100
 notes[1]=new int[2];

 notes[2]=new int[1];
LES TABLEAUX
Tableau à deux dimensions
– Déclaration & création:
 si le tableau a deux dimension est rectangulaire, on peut le
créer comme suit :
<type>[][]<nomtableau>=new<type>[N1][N2];
N1: nombre de tableau-élément.
N2: nombre d’élément de chaque tableau-élément.

– Exemple :
créer une matrice carré :
 int [][] matrice= new int[2][2];

 matrice[0][0]=1; matrice[0][1]=1;
101
 matrice[1][0]=1; matrice[1][1]=1;
LES TABLEAUX

Tableau à deux dimensions


– Le nombre de tableau-élément peut être obtenue en
utilisant la variable length.

– Exemple:
 int[][] tab={{1,0,9},{2,8},{8,5,7}};

 tab.length3

 tab[1].length2

102
LES CHAÎNES DE CARACTÈRES

 Le type String (chaîne) sert a représenter des séquences de


caractère.
 Une chaîne constante est délimité par des guillemets.

 String est une classe qui est fourni avec l’API Java, elle
décrit des objets qui contiennent une chaîne de caractère
constante et permet un traitement très riches des chaînes
de caractères.
 Elle dispose des opérateurs + ou += pour concaténation des

chaînes de caractères.
 Exemple:

String s=‘‘il est beau java’’;


103
LES CHAÎNES DE CARACTÈRES
Quelques méthodes de la classe String:
 int length() : retourne le nombre de caractère de la chaîne.

 int indexOf(char c, int i) : retourne la position du caractère


c à partir de la position i.

 String substring(int i, int j): retourne une chaîne extraite


de la chaîne sur laquelle est appliquée la méthode en
partant de la position i a la position j.

 boolean equals(String s) : effectue la comparaison


sémantique de 2 chaînes.
104
 char charAt(int i) : retourne le caractère qui se trouve à la
position i.
LES CHAÎNES DE CARACTÈRES
Quelques méthodes de la classe String:
 int length() : retourne le nombre de caractère de la chaîne.

 int indexOf(char c, int i) : retourne la position du caractère


c à partir de la position i.

 String substring(int i, int j): retourne une chaîne extraite


de la chaîne sur laquelle est appliquée la méthode en
partant de la position i a la position j.

 boolean equals(String s) : effectue la comparaison


sémantique de 2 chaînes.
105
 char charAt(int i) : retourne le caractère qui se trouve à la
position i.
Chapitre 5: Héritage

106
HÉRITAGE
 Un des avantages de la POO est de définir des
dépendances entre les classes.
class Date
{ int jour, mois, année;
Date(int j, int m, int a)
{jour=j; mois=m; année=a;}

public void affiche()
{ System.out.println(jour+’’/’’+mois+’’/’’+année);}
}

 Supposons qu’on veut définir une 2ème classe


DateEvenement qui associe a une date un événement 107

donnée.
HÉRITAGE
 Une solution est de réécrire entièrement cette classe.
class DateEvenement
{ int jour, mois, année; String evenement;
DateEvenement(int j, int m, int a, String e)
{jour=j; mois=m; année=a; evenement=e;}
public void affecter(int j, int m, int a, String e)
{ jour=j; mois=m; année=a; evenement=e;}

public void affiche()
{ System.out.println(jour+’’/’’+mois+’’/’’+année+’’
‘’+evenement);}
108
}
HÉRITAGE
 Cette solution est a l’opposé de ce qu’est la programmation
objet.

 Puisqu’on a déjà la classe Date, on a un moyen plus simple


de définir la classe DateEvenement qui est l’héritage.

 Une classe obtenue par héritage possède la totalité des


membres de la classe de base ainsi que ces méthodes.

 On dira que la classe DateEvenement hérite des attributs


et des fonctionnalités de la classe de base Date.
109
HÉRITAGE
On peut alors dérivé la classe DateEvenement à partir de la
classe Date en utilisant le mot clé extends:

class DateEvenement extends Date


{
String evenement;

public String quelEvent()
{return evenement;}
}

110
HÉRITAGE
Constructeur de la sous classe :
 Lorsqu'on définit une classe dérivée, il faut s'assurer que,
lors de la création des objets de cette nouvelle classe, les
champs propres à cette classe dérivée ainsi que les champs
de la classe de base soient initialisés correctement.
 Pour invoquer le constructeur de la classe de base, on fera
appel à l'instruction super(...).
 Un constructeur d'une classe dérivée se compose
généralement deux parties :
 celle concernant les champs de la classe de base

 et celle concernant les champs propres de la classe


dérivée.
 L'invocation de super(...) doit être la première instruction
du constructeur de la classe dérivée. 111
HÉRITAGE
Constructeur de la sous classe :
 On peut alors dérivé la classe DateEvenement à partir de
la classe Date en utilisant le mot clé extends:
class DateEvenement extends Date
{
String evenement;
DateEvenement(int j, int m, int a, String e)
{
super(j,m,a); //appel au constructeur de la classe de Base.
evenement=e; //initialisation des champ de la classe
dérivée
}
… 112

}
HÉRITAGE
Constructeur de la sous classe :
 Constructeur par défaut : Si le constructeur de la classe
dérivée n'invoque pas le constructeur de la classe de base
explicitement avec l'instruction super(...), Java fait quand
même appel au constructeur, sans argument, de la classe
de base : super().
 Un constructeur définit comme suit

public DateEvenement(String e) {event = e ; } est


automatiquement transformé en
 public DateEvenement(String e) { super() ; event = e ; }
 Dans le cas où un tel constructeur n'existe pas dans la
classe de base, une erreur de compilation est générée. Il
existe un cas où l'absence de l'instruction super(...) ne
conduit pas cet appel implicite: : celui où le corps du 113
constructeur commence par l'instruction this(...).
HÉRITAGE
Enchainement de constructeur :
 Pour tout objet crée, le constructeur de la classe de base
est invoqué qui lui a son tour invoque le constructeur de sa
classe de base et ainsi de suite.
 Il existe donc un enchaînement d'invocation de
constructeurs.
 Cette cascade d'appels aux constructeurs s'arrête dès que
l'on atteint le constructeur de la classe Object.
 La classe Object est la mère de toutes les classes ; toute
classe est dérivée directement ou indirectement de la
classe Object.
 Ainsi, lors de la création d'un objet, le premier
constructeur invoqué est celui de la classe Object suivi des
autres constructeurs dans l'ordre de la hiérarchie de 114
dérivation des classes.
HÉRITAGE
Redéfinition des champs :
 Les champs déclarés dans la classes dérivée sont toujours
des champs supplémentaires.
 Si l'on définit un champ dans la sous classe ayant le même
nom qu'un champ de la classe de base, il existera deux
champs de même noms.
 Le nom de champ désignera toujours le champ déclaré
dans la classe dérivée.
 Pour avoir accès au champ de la classe de base, il faudra
changer le type de la référence pointant sur l'objet ou en
utilisant le mot clé super.

115
HÉRITAGE
Redéfinition des champs :

Exemple:

116
HÉRITAGE
Redéfinition des champs :
 Cette technique peut s'appliquer en cascade de la manière
suivante :
class C extends B {
public int i ;
...
public void uneMethode()
{
i = 0 ; this.i = 0 ; // i est le champ défini dans la classe C
super.i = 1 ; ( (B) this ).i = 1; // i est le champ défini dans la
classe B
( (A) this ).i = 1 // i est le champ défini dans la classe A
}} 117
HÉRITAGE
Redéfinition des champs :
 Par contre, l'instruction suivante est incorrecte :

super.super.i = 1 ; // Incorrect syntaxiquement !

 Tout comme l'utilisation du mot clé this, le mot clé super


ne peut être utilisé dans les méthodes static.

118
HÉRITAGE
Redéfinition des champs :
 Par contre, l'instruction suivante est incorrecte :

super.super.i = 1 ; // Incorrect syntaxiquement !

 Tout comme l'utilisation du mot clé this, le mot clé super


ne peut être utilisé dans les méthodes static.

119
HÉRITAGE
Redéfinition des méthodes:

 On n'est, évidemment pas, tenu de déclarer des nouveaux


champs dans une classe dérivée : il est tout possible que
l'on dérive une classe pour uniquement modifier les
méthodes de la classe de base.

 Par exemple, si l'on voulait une nouvelle classe


DateAnglais qui ne diffère de la classe Date que par le
format d'impression de la date, il suffirait de définir une
classe dérivée de la classe Date et de redéfinir la méthode
imprimer pour cette nouvelle classe.

120
HÉRITAGE
Redéfinition des méthodes:

 La redéfinition d'une méthode consiste à fournir une


implantation différente de la méthode de même signature
fournie par la classe de base.

 Dans cet exemple, la méthode affiche des classes Date et


DateAnglais ont la même signature ; celle de la classe
DateAnglais redéfinit celle de la classe Date.

class DateAnglais extends Date {


public void aaffiche()
{ System.out.println(quelMois() + "/" + quelJour() + "/" +121
quelAnnée() ) ; }
}
HÉRITAGE
Méthode de la classe de base:
 Pour avoir accès à une méthode redéfinie de la classe de
base, à l'intérieur d'une méthode de la classe dérivée, il
faudra utiliser le mot clé super.
 Comme pour les champs redéfinis, il suffit de préfixer le
nom de méthode par le mot clé super pour invoquer la
méthode de la classe de base.
class DateEvenement extends Date
{
private String event = null ;
public DateEvenement(int j, int m, int a, int e)
{ super(j, m, a) ;
event = e ; }
122
public void afficher()
{ super.afficher(); System.out.println(event); }...}
HÉRITAGE
Méthode static:
 Une méthode static peut également être redéfinie par une
autre méthode static.
 Par contre, une static ne peut être redéfinie en une méthode
non static.
Méthode final:
 Une méthode final est une méthode qui ne peut être
redéfinit dans aucune sous classe.
Exemple :
class Date {
private int jour, mois, année ;
public final quelJour() { return jour ; } 123

... }
HÉRITAGE
La classe Object :
 C’est la classe de base de toutes les classe Java.

 Les méthodes définit dans cette classes peuvent alors être


utilisé ou redéfinis.
 Exemples de méthodes :
 public String toString()
 public boolean equals(Object obj)
 public final native Class getClass()
 public native int hashCode()
 protected native Object clone()
 protected void finalize() throws Throwable
 public final native void notify()
 public final native void notifyAll()
 public final native void wait(long timeout)throws InterruptedException
 public final void wait(long timeout, int nanos)throws 124

InterruptedException
 public final void wait()throws InterruptedException
HÉRITAGE
La classe Object :

– public String toString ()


 La méthode toString est utilisée pour donner une
représentation textuelle d'un objet. Ainsi on pourra utilisé
la méthode System.out.print en lui donnant comme
paramètre le nom de l’objet.

 Exemple :
public String toString() { return jour + " /" + mois + " /"
+année; }

125
HÉRITAGE
La classe Object :
– public boolean equals (Object obj)

 Comme la méthode toString, la méthode equals rend la


valeur true si l'objet sur lequel la méthode equals est
invoquée est égale à l'objet passé en paramètre.

Qu'est ce que l'égalité ? La notion de l'égalité dépend des


objets concernés.

 Par défaut, la sémantique de la méthode equals fournie


dans la classe Object est l'égalité entre les valeurs des
références : les deux références désignent le même objet.
126
HÉRITAGE
Classes et méthodes abstraite:
 On peut parfois utiliser les classes pour définir, non pas un
type d'objet bien précis, mais un concept.
 Exemple : soit une classe Forme avec des méthodes
abstraites comme superficie, périmètre, tourner, etc
On ne sait pas implanter la méthode superficie dans le cas
d'une forme générale.
 Par contre, une fois connue une forme précise (un carré, un
cercle, etc.), on sait implanter cette méthode pour cette
forme.
 Autrement dit, un objet de type forme n'a aucun intérêt en
soi.
 Les objets utiles sont les carrés, les cercles, etc. Par contre,
il existe souvent des caractéristiques et comportements127
communs à toutes les formes.
HÉRITAGE
Classes et méthodes abstraite:
 Une méthode abstraite est une méthode dont la définition
est supposée être donnée par redéfinition dans les classes
dérivées.
la classe de base ne peut fournir une méthode par défaut.
 Il ne sera jamais possible de créer un objet de type Forme.

 Les objets qui sont susceptible d'exister sont des formes


bien précises : des carrés, des cercles, des lignes, etc.
 Ces formes effectives, seront des objets des classes obtenus
en dérivant la classe Forme.
 Une classe abstraite est une classe partiellement implantée
i.e. que certaines des méthodes sont abstraites.
 Le langage Java impose de qualifier la classe d'abstraite
128
lorsqu'une de ses méthode est abstraite.
HÉRITAGE
Classes et méthodes abstraite:
 Tout ceci permet de regrouper des données et méthodes
communes dans une classe et de spécifier les méthodes
qu'une classe dérivée de celle-ci doit absolument implanter.
 Si l'on définit une sous classes sans implanter toutes les
méthodes abstraites de la classe de base, une erreur de
compilation est générée.
 Exemple :
abstract class Forme {
...
public abstract void superficie() ;
... }
class Carrée extends Forme {
... 129

public void superficie () { ... }


Chapitre 6:
Les collections

130
LES COLLECTIONS
 Une collection est un objet qui contient autres objets.

 Les collections proposent une solution efficace de stockage


et de manipulation des données tels que, ajouter un
nouveau objet dans la collection, supprimer un objet de la
collection, rechercher des objets selon des critères, …

 On utilise les collections dans le cas où on a la dimension


des données est dynamique.

 Java fourni une infrastructure pour la gestion des


131
collections, c’est un ensemble des classes et interfaces du
package java.util.
LES COLLECTIONS(AVANTAGES)
 Améliorer la qualité et la performance des applications.

 Réduire l’effort lors de l’implémentation.

 Faciliter le développement et l’apprentissage de nouvelles


API (Application Programming Interface).

 Réduire le coût de développement des nouvelles applications


et API.

 Encourager la réutilisation du code. 132


LES COLLECTIONS(ARCHITECTURE)

133
ARRAYLIST
 ArrayList est une classe du package java.util, qui
implémente l’interface List.
 Une sorte de tableau contenant un nombre quelconque
d'instances d’une classe .
 Les emplacements sont repérés par des valeurs entières (à
débutant à 0, comme un tableau).

Exemple de Déclaration d’une collection de type List qui


devrait stocker des objets de type Fruit:
List<Fruit> fruits; ou bien ArrayList<Fruit> fruits;
Création de la liste:
fruits=new ArrayList<Fruit>(); 134
ARRAYLIST

La classe ArrayList offre plusieurs méthodes permettant la


manipulation des données:

 boolean add(Object obj)


 void add(int indice, Object obj)

 boolean contains(Object obj)

 Object get(int indice)

 int indexOf(Object obj)

 void remove(int indice)

 void set(int indice, Object obj)


135
 int size()
ARRAYLIST
Exemple

136
ARRAYLIST

La classe ArrayList offre plusieurs méthodes permettant la


manipulation des données:

 boolean add(Object obj)


 void add(int indice, Object obj)

 boolean contains(Object obj)

 Object get(int indice)

 int indexOf(Object obj)

 void remove(int indice)

 void set(int indice, Object obj)


137
 int size()
VECTOR
 Vector est une classe du package java.util qui fonctionne
comme tableau.
 La collection de type Vector est optimal (Consomme moins
de mémoire par rapport à ArrayList).

138
VECTOR
 Vector est une classe du package java.util qui fonctionne
comme tableau.
 La collection de type Vector est optimal (Consomme moins
de mémoire par rapport à ArrayList).

139
HASHMAP
 La collection HashMap est une classe qui implémente
l’interface Map. Cette collection permet de créer un tableau
dynamique d’objet de type Object qui sont identifiés par une
clé.
 Déclaration et création d’une collection de type HashMap
qui contient des fruits identifiés par une clé de type

140
HASHMAP
 La classe HashMap offre plusieurs méthodes permettant la
manipulation des données :

141
HASHMAP
 La classe HashMap offre plusieurs méthodes permettant la
manipulation des données :

142
HASHMAP
 La classe HashMap offre plusieurs méthodes permettant la
manipulation des données :

143

Vous aimerez peut-être aussi