Vous êtes sur la page 1sur 105

Année Universitaire: 2022-2023

Niveau : 2 IG& ISI & SI


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.

Vous aimerez peut-être aussi