Fondements de lapproche
objet
Adel KHALFALLAH
Institut Sup rieur Dinformatique El Manar
Motivations
Quels probl mes
vG rer la complexit
vAugmenter la r utilisation
vFaciliter la maintenance
Adel Khalfallah Programmation objet avec C++ et Java 2
Complexit du logiciel
Crise du logiciel (Fin Ann es 60) :
Etude sur 9 projets de ladministration
am ricaine dune valeurs de 6.8 Millions de $
29 % Pay s mais jamais livr s
47 %Livr s mais jamais utilis s avec succ s
23 % Logiciel utilis mais avec modifications
1 % Utilis s tels quels
Adel Khalfallah Programmation objet avec C++ et Java 3
Complexit du logiciel
" Taille > 1 Million de LOC
Impossible appr hender par une seule personne
" Complexit des probl mes r soudre
Diversit et complexit des syst mes (Syst mes
dinformation, Syst mes Temps R el, Syst me Experts,..)
Exigences contradictoires
Probl mes de communication (D veloppeur Utilisateur et
D veloppeur D veloppeur)
Le probl me change en cours de r solution (lexpression
de la solution modifie le probl me)
Technologies changeantes en cours dutilisation
Adel Khalfallah Programmation objet avec C++ et Java 4
Complexit du logiciel
Interd pendances : Logiciel MIKADO
Adel Khalfallah Programmation objet avec C++ et Java 5
Complexit du logiciel
Exemple : Recherche dun l ment dans une collection:
Recherche (X : El ment; C : Collection): Booleen
Pos : Position
D but
Pos:=Position_Initiale(X,C)
tant que non Fin(Pos,C) et non Trouve(Pos,X,C) faire
Pos:=Suivant(Pos,X,C)
ftque
retourner non Fin(Pos,C)
fin
Adel Khalfallah Programmation objet avec C++ et Java 6
Complexit du logiciel
El ment
Collection
Position
Fin
Position_Initiale
Trouve
Suivant
Adel Khalfallah Programmation objet avec C++ et Java 7
R utilisation
" Impression de d j vu (Exemple Tri)
" Les projets qui atteignent un haut niveau de
r utilisation sont lexception plut t que la r gle
" Int r ts de la r utilisation
Augmentation de la productivit
Baisse des co ts
Am lioration de la qualit
Adel Khalfallah Programmation objet avec C++ et Java 8
R utilisation
La r utilisation concerne :
" Les produits
Code source
Donn es et pilotes de test
Mod les de sp cification et de conception
&
" Les processus
T ches r p titives ( N cessit de d finitions formelles des
activit s)
Personnes et leurs connaissances
&
Adel Khalfallah Programmation objet avec C++ et Java 9
R utilisation
Autres Aspects limitatifs :
" Economiques : pas de formule juridique
satisfaisante
" Outils : absence doutils de recherche et de
techniques de classification appropri es
Adel Khalfallah Programmation objet avec C++ et Java 10
Maintenance
Importance
Enqu te (1986) aupr s de 55 soci t s de service
en Informatique :
Environ 53 % des co ts du logiciel sont li s la
maintenance
Adel Khalfallah Programmation objet avec C++ et Java 11
Maintenance
Types de maintenance :
" Corrective : correction derreurs
" Adaptative : adapter le logiciel aux volutions
de son environnement
" Perfective : Am liorer le logiciel ou prendre en
compte de nouveaux besoins
" Pr ventive : am liorer la maintenabilit du
logiciel
Adel Khalfallah Programmation objet avec C++ et Java 12
Concepts de base
vAbstraction
vEncapsulation
vModularit
vTypes Abstrait de donn es
Adel Khalfallah Programmation objet avec C++ et Java 13
Abstraction
D finition : Une abstraction fait ressortir
les
caract ristiques essentielles dune structure qui
la distinguent de tous les autres types de
structures du domaine et donc procure des
rigoureusement
fronti res
conceptuelles
d finies par
rapport au point de vue de
lobservateur
Adel Khalfallah Programmation objet avec C++ et Java 14
Abstraction
Caract ristiques :
Le fait davoir les
m mes caract ristiques
est le fruit du hasard
Atomes de carbones : 9.684 106
Nom : Tom Cruise Nom : Cindy Crawford
Couleur des yeux : Noir Couleur des yeux : Marron
Atomes de carbones : 9.987 106
Nombre de poils : 10 752 634 434 Nombre de poils : 11 233 122 110
Taille : 1.70 Taille : 1.76
Globules rouges : 7 840 656 Globules rouges : 7 541 553
Groupe sanguin : A + Groupe sanguin : B+
Sexe : Masculin Sexe : F minin
Globules blancs : 9 540 786 Globules blancs : 9 760 956
Date de naissance : 3 Juillet 1962 Date de naissance : 20 F vrier 1966
Adel Khalfallah Programmation objet avec C++ et Java 15
Abstraction
Caract ristiques essentielles :
Atomes de carbones : 9.684 106
Nom : Tom Cruise Nom : Cindy Crawford
Couleur des yeux : Noir Couleur des yeux : Marron
Atomes de carbones : 9.987 106
Nombre de poils : 10 752 634 434 Nombre de poils : 11 233 122 110
Taille : 1.70 Taille : 1.76
Globules rouges : 7 840 656 Globules rouges : 7 541 553
Groupe sanguin : A + Groupe sanguin : B+
Sexe : Masculin Sexe : F minin
Globules blancs : 9 540 786 Globules blancs : 9 760 956
Date de naissance : 3 Juillet 1962 Date de naissance : 20 F vrier 1966
Adel Khalfallah Programmation objet avec C++ et Java 16
Abstraction
Caract ristiques essentielles (Point de vue de lh matologue) :
Atomes de carbones : 9.684 106
Nom : Tom Cruise Nom : Cindy Crawford
Couleur des yeux : Noir Couleur des yeux : Marron
Atomes de carbones : 9.987 106
Nombre de poils : 10 752 634 434 Nombre de poils : 11 233 122 110
Taille : 1.70 Taille : 1.76
Globules rouges : 7 840 656 Globules rouges : 7 541 553
Groupe sanguin : A + Groupe sanguin : B+
Sexe : Masculin Sexe : F minin
Globules blancs : 9 540 786 Globules blancs : 9 760 956
Date de naissance : 3 Juillet 1962 Date de naissance : 20 F vrier 1966
Adel Khalfallah Programmation objet avec C++ et Java 17
Abstraction
Caract ristiques essentielles porte sur :
" Des donn es
" Des comportements
Exemple Voiture Immatricul e 96 TU 5475
" Donn es :
" Marque : Peugeot 106
" Couleur : Rouge
" &
" Comportements
" Lorsquon tourne le volant la gauche la voiture tourne gauche
" Lorsquon appuie sur le frein la voiture sarr te
" &
Adel Khalfallah Programmation objet avec C++ et Java 18
Abstraction
Labstraction du comportement doit tre sans
surprise
Exemples de surprises :
" Comportement contre intuitif : On tourne le volant gauche la
voiture tourne droite
" Comportement avec effet de bord : On tourne le volant gauche
la voiture tourne gauche et le clignotant gauche sallume
" Comportement masquant un cheval de Troyes : On tourne le
volant gauche la voiture tourne gauche mais une partie de
lhuile moteur est vidang e
Adel Khalfallah Programmation objet avec C++ et Java 19
Abstraction
Advertisement
Un exemple de bonne abstraction
la t l commande
" Syst me qui pr sente des propri t s mergentes
" Interface explicite : le spectateur manipule un
ensemble de boutons situ sur la face avant
" Chaque bouton un r le unique
" Chaque bouton garantit le bon fonctionnement du
syst me m me en cas de distractions de lutilisateur
Adel Khalfallah Programmation objet avec C++ et Java 20
Concepts de base
vAbstraction
vEncapsulation
vModularit
vTypes Abstrait de donn es
Adel Khalfallah Programmation objet avec C++ et Java 21
Encapsulation (Data Hiding)
D finition : Lencapsulation est le proc d de
s paration des l ments dune abstraction qui
constituent sa structure et son comportement.
Elle permet de dissocier linterface
contractuelle de la mise en Suvre dune
structure
Adel Khalfallah Programmation objet avec C++ et Java 22
Encapsulation (Data Hiding)
Interface R alisation
Adel Khalfallah Programmation objet avec C++ et Java 23
Encapsulation (Data Hiding)
2 R les :
" Utilisateur : manipule les l ments de
labstraction qui constituent linterface
"
Implanteur : r alise ce qui est encapsul
Adel Khalfallah Programmation objet avec C++ et Java 24
Concepts de base
vAbstraction
vEncapsulation
vModularit
vTypes Abstrait de donn es
Adel Khalfallah Programmation objet avec C++ et Java 25
Modularit
Module : Brique de base l chelle architecturale
Syst me
Modules
Adel Khalfallah Programmation objet avec C++ et Java 26
Modularit
" D composition (Top down) : R duction
it rative du probl me en sous probl mes de
moindre complexit .
" Composition (Bottom up) : Cr ation it rative
de la solution par composition de modules.
Adel Khalfallah Programmation objet avec C++ et Java 27
Modularit
Autonomie
" Un module peut tre appr hend en isolation
" Induit une localit des modifications
" Compartimentalisation : Une condition anormale lors
de lex cution reste confin e au module
Adel Khalfallah Programmation objet avec C++ et Java 28
Modularit
Module = Interface + Implantation
" Interface
Point de communication ob issant des r gles de rep rage
D crit les rapports entre le module et le reste du syst me
D finit les responsabilit s du module
" Implantation
Inaccessible au reste du syst me
R alise les responsabilit s d finies dans linterface
Encapsule les informations sensibles li s la r alisation
Adel Khalfallah Programmation objet avec C++ et Java 29
Modularit
Caract ristiques de linterface
" Abstraction des d tails. Exemple : T l commande
" Permettre lind pendance de lutilisateur vis vis de la
r alisation. Exemple style de conduite dune voiture
" Fournir une repr sentation fid le. Exemple : Compteur
Adel Khalfallah Programmation objet avec C++ et Java 30
Modularit
Caract ristiques de linterface
Ind pendance par rapport limplantation :
La modification de limplantation ne change ni
linterface ni ses utilisations
Promouvoir linterchangeabilit des
implantations
Adel Khalfallah Programmation objet avec C++ et Java 31
Modularit
Caract ristiques de linterface
Linterface doit tre suffisante
Offrir un ensemble de services suffisants pour tre
exploitable
Non suffisance Incitation la violation de
lencapsulation par les utilisateurs
Adel Khalfallah Programmation objet avec C++ et Java 32
Modularit
Caract ristiques de limplantation
Limplantation doit tre prot g e pour maintenir
lint gralit du module. Exemple : Machine
laver
Lencapsulation sert pr venir les accidents
pas les fraudes
Adel Khalfallah Programmation objet avec C++ et Java 33
Modularit
Interface # Implantation
" Une interface pourra correspondre plusieurs
implantations
" Plusieurs interfaces pourront avoir la m me
implantation
Adel Khalfallah Programmation objet avec C++ et Java 34
Modularit
Qualit s dune structuration modulaire
" Minimalit des interfaces
Minimiser les communications inter-modules
Minimiser les changes au sein dune communication
Couplage Faible
" Maximalit de lunit
Les informations au sein dun module ont une forte unit
logique
Coh sion Forte
Adel Khalfallah Programmation objet avec C++ et Java 35
Modularit
Quelles informations doivent tre encapsul e ?
" Tous ce qui nest pas utile au client : donn es et
fonctions de service,&
" Tous ce qui pr sente un aspect s curit : Num ro de
compte,&
" Tous ce qui pr sente des contraintes dint grit qui
doivent tre renforc es (Num ro de t l phone,&)
" Tous ce qui est susceptible de changer dans le futur
Adel Khalfallah Programmation objet avec C++ et Java 36
Concepts de base
vAbstraction
vEncapsulation
vModularit
vTypes Abstrait de donn es
Adel Khalfallah Programmation objet avec C++ et Java 37
Types Abstraits de donn e
Piles : variations sur un th me
.
.
.
N
1
Sommet
Base
Empile( P : Pile; E : El ment)
D but
Si P.Sommet < N Alors
Sommet:=Sommet+1
P.LesElements :=E
sinon Erreur
Fin
Adel Khalfallah Programmation objet avec C++ et Java 38
Types Abstraits de donn e
Piles : variations sur un th me
Base
Sommet
.
.
.
N
1
Empile( P : Pile; E : El ment)
D but
Si P.Sommet > 0 Alors
Sommet:=Sommet-1
P.LesElements :=E
sinon Erreur
Fin
Adel Khalfallah Programmation objet avec C++ et Java 39
Types Abstraits de donn e
Piles : variations sur un th me
Sommet
Empile( P : Pile; E : El ment)
D but
Tmp=Cr er(El ment)
Tmp.Valeur:=E
Tmp.Suivant=P.Sommet
P.Sommet:=Tmp
Fin
D finir la pile par son implantation
nest pas appropri
Adel Khalfallah Programmation objet avec C++ et Java 40
Types Abstraits de donn e
" Disposer dun m canisme pour tendre les
types existants du langage de programmation
utilis
" Les types ne sont pas d fini par leurs structures
mais par les op rations quils offrent
Adel Khalfallah Programmation objet avec C++ et Java 41
Sp cifications alg briques des TAD
Types
Pile
Fonctions
Vide : Pile Booleen
Cr er : Pile
Empiler : X Pile Pile
Advertisement
D piler : Pile Pile
Sommet : Pile X
Adel Khalfallah Programmation objet avec C++ et Java 42
Sp cifications alg briques des TAD
Pr conditions
Pr D piler(P : Pile ) = non Vide(P)
Pr Sommet(P : Pile ) = non Vide(P)
Axiomes
" x : X; P: Pile
Vide(Nouveau)
non Vide(Empiler(x, P)
Sommet(Empiler(x,P)= x
D piler(Empiler(x,P)= P
Adel Khalfallah Programmation objet avec C++ et Java 43
Sp cifications alg briques des TAD
Types
Enum re les types manipul s par la d finition
Un type peut tre param tr par un autre
Fonctions
Fonction au sens math matique ( Fonction
partielle)
3 cat gories :
" Constructeurs
" Accesseurs (ou S lecteurs)
" Transformateurs
Adel Khalfallah Programmation objet avec C++ et Java 44
Sp cifications alg briques des TAD
Pr conditions
Restreignent le domaine des fonctions partielles
Axiomes
D finissent les propri t s s mantiques des
fonctions
Adel Khalfallah Programmation objet avec C++ et Java 45
Module # TAD
" R alisation de TAD n cessitent :
1. Exportations de types
2. D finitions dop rations sur les instances de type
3. Encapsulation des donn es
4. Cr ation de multiples instances du type
" Modules n cessitent
1. D finitions dop rations sur les instances de type
2. Encapsulation des donn es
TAD Modules
Adel Khalfallah Programmation objet avec C++ et Java 46
Langage Proc duraux
Pascal
" Module = Fonction/proc dure
" Unique m canisme : Localit des d clarations
" => D tournement de limbrication qui supporte
lorigine lapproche de d composition top
down
" Sur utilisation de donn es globales
" Notion de unit introduite ult rieurement
Adel Khalfallah Programmation objet avec C++ et Java 47
Langage Proc duraux
Langage C
" Module = Fichier
" static limite la visibilit au fichier
" => La notion de module est implicite
" => le m canisme de masquage est rudimentaire:
pas dimportation/exportation, pas de visibilit
s lective
Adel Khalfallah Programmation objet avec C++ et Java 48
Langage Proc duraux # Paradigme Objets
Adel Khalfallah Programmation objet avec C++ et Java 49
Paradigme Objets
" Objets et classe
" Classification et h ritage
" Polymorphisme
Surcharge
G n ricit
Liaison dynamique
Adel Khalfallah Programmation objet avec C++ et Java 50
Paradigme Objets
Objets et Classes
" Transcription du r el
" Au cSur de labstraction et des TAD
" Unification des donn es et des traitements
" En relation directe avec :
G rer la complexit
Faciliter la maintenance
Adel Khalfallah Programmation objet avec C++ et Java 51
Paradigme Objets
Hi rarchisation et h ritage
Id e r pandue depuis le XIIX me si cle
"
" Classification des esp ces vivantes selon le
genre et lesp ce :
Principe : factoriser des informations communes dans
une cat gories et introduire les sp cificit s dans des
sous cat gories
" Les sous cat gories h ritent des propri t s des
cat gories parentes
Adel Khalfallah Programmation objet avec C++ et Java 52
Paradigme Objets
Polymorphisme
" Poly = Multiple et Morphisme = Structure
" Relatif un traitement en mesure de sadapter aux
donn es quil manipule
" Exemple
" A := Bonjour
" B := 123
" C := 1.23
Adel Khalfallah Programmation objet avec C++ et Java 53
Paradigme Objets
Surcharge :
Donner plusieurs significations un m me
Symbole
" Symbole Nom de traitement
" Symbole Nom de variable
Adel Khalfallah Programmation objet avec C++ et Java 54
Paradigme Objets
G n ricit
Param trer des traitements et des d finitions de
structure par des types
Liaison dynamique
Etablir le lien entre le nom dune op ration et
lalgorithme de lop ration lors de lex cution
Adel Khalfallah Programmation objet avec C++ et Java 55
Principaux langages Objet
" SmallTalk - Centre de recherche de Xerox -
1970
" Object Pascal - Apple 1986
" C++ - B. Stroustrup Bell 1986
" Eiffel B. Meyer - 1987
" CLOS - ANSI D. Bobrow 1988
" Java J. Gosling - Sun Microsystems 1995
" C# - Microsoft - 2001
Adel Khalfallah Programmation objet avec C++ et Java 56
Objets et Classes
Objet
" Etat
" Comportement
" Identit
Adel Khalfallah Programmation objet avec C++ et Java 57
Objets
Etat
" M morise le pass influence le futur
" Caract risation : Aspects Statiques
" Valeur des caract risation : Aspects statiques ou dynamiques
Exemple : Chaise
Caract risation
statique
Valeurs de
caract risation
statiques
Nombre de pieds : 4
Mati re : Bois
Couleur : Marron
Position_X : 1,5
Position_Y : 1,5
Nombre Total : 10 valeur commune
Valeurs de
caract risation
dynamique
Adel Khalfallah Programmation objet avec C++ et Java 58
Objets
Comportement
" Un objet agit sur dautres objets en leur
demandant des services
" Un objet r agit a une demande de service par un
comportement sp cifique
" Communication par message
Mr Chakroun Moi Mohamed la Chaise 1
Enseigner Chercher Chaise D placer
Adel Khalfallah Programmation objet avec C++ et Java 59
Objets
Comportement
" Interroge l tat pour d terminer les demandes
admissibles
" Agit sur l tat
" Publie l tat
" L tat m morise les cons quences cumul es du
comportement
" Peut tre ind pendant de l tat. Exemple :
Incr menter le nombre total de chaises
Adel Khalfallah Programmation objet avec C++ et Java 60
Objets
Communication par message
" Sp cification de lobjet destinataire
" Sp cification du service requis
" Sp cification des informations transf r es dans
les deux sens de la communication
Adel Khalfallah Programmation objet avec C++ et Java 61
Identit
Etat :
Nom : Ben Salah
Pr nom : Ali
Date de Naissance : 5/2/48
Comportement
Etudier
SeMarier
travailler
Mourir
Etat :
Advertisement
Nom : Ben Salah
Pr nom : Ali
Date de Naissance : 5/2/48
Comportement
Etudier
SeMarier
travailler
Mourir
"Identit permet de distinguer syst matiquement deux objets
"Est souvent confondu avec ladresse dun objet dans les langages
de programmation
" Oracle : identit dun objet = OID (Proche de la notion de cl )
Adel Khalfallah Programmation objet avec C++ et Java 62
Terminologie
Etat
Propri t
Attribut
Donn e Membre
Op ration
Message
M thode
Fonction membre
Service
Protocole : ensemble de services
Adel Khalfallah Programmation objet avec C++ et Java 63
Classe
" Abstraction qui permet de condenser un
ensemble dobjets ayant des caract ristiques
communes en un seul concept
" Abstraction relatives la caract risation dun
ensemble dobjets
Fixer des informations de caract risations
communes (Etat/Comportement)
Omettre les valeurs de caract risation
Adel Khalfallah Programmation objet avec C++ et Java 64
Classe
Caract ristiques :
Le fait davoir les m mes caract ristiques tait le fruit du hasard
Atomes de carbones : 9.684 1012
Nom : Tom Cruise Nom : Cindy Crawford
Couleur des yeux : Noir Couleur des yeux : Marron
Atomes de carbones : 9.987 1012
Nombre de poils : 10 752 634 434 Nombre de poils : 11 233 122 110
Taille : 1.70 Taille : 1.76
Globules rouges : 7 840 656 Globules rouges : 7 541 553
Groupe sanguin : A + Groupe sanguin : B+
Sexe : Masculin Sexe : F minin
Globules blancs : 9 540 786 Globules blancs : 9 760 956
Date de naissance : 3 Juillet 1962 Date de naissance : 20 F vrier 1966
Adel Khalfallah Programmation objet avec C++ et Java 65
Classe
2
1
3
Premi re abstraction : Identifier un
ensemble de caract ristiques
communes une population
dobjets
Chaise 1
Etat
Nombre de pieds : 4
Mati re : Bois
Couleur :Vert
Position_X : 1,5
Position_Y : 1,5
Comportement
D placer
Chaise 2
Etat
Nombre de pieds : 4
Mati re : Bois
Couleur :Bleu
Position_X : 3,5
Position_Y : 2,5
Comportement
D placer
Adel Khalfallah Programmation objet avec C++ et Java 66
Classe
Chaise 1
Etat
Nombre de pieds : 4
Mati re : Bois
Couleur :Vert
Position_X : 1,5
Position_Y : 1,5
Chaise 2
Etat
Nombre de pieds : 4
Mati re : Bois
Couleur :Bleu
Position_X : 3,5
Position_Y : 2,5
Comportement
D placer
Comportement
D placer
Classe Chaise
Etat
Nombre de pieds
Mati re
Couleur
Position_X
Position_Y
Comportement
D placer
Deuxi me abstraction :
Omettre les valeurs de
caract risation
Adel Khalfallah Programmation objet avec C++ et Java 67
Classe
" Objet instance de classe
" Classe moule (usine) objets
" Classe = Interface + Implantation
" Module = classe ou ensemble de classes
Adel Khalfallah Programmation objet avec C++ et Java 68
G n ricit
" Deux phases :
Instanciation
Exploitation
Adel Khalfallah Programmation objet avec C++ et Java 69
Classification et h ritage
" 3 Classes Articles/Textiles/Alimentaires
" Redondance
" Textiles et Alimentaires sont des articles
" Diff rentes solutions en particulier dans Textile
un article
Adel Khalfallah Programmation objet avec C++ et Java 70
Classification et h ritage
Article
D signation
Prix HT
PrixTTC()
Textile
Coloris
Luxe
PrixTTC()
Adel Khalfallah Programmation objet avec C++ et Java 71
H ritage et liaison dynamique
" Principe de louverture/fermeture
Adel Khalfallah Programmation objet avec C++ et Java 72
Les langage Java
Adel KHALFALLAH
Institut Sup rieur Dinformatique El Manar
Objet et classe
" Une classe est un type utilisateur
" la machine virtuelle charge la classe
Adel Khalfallah Programmation objet avec C++ et Java 74
Objets et classes en java
package main.java;
public class Pile {
//S lecteurs
public boolean EstPleine(){
public void Depiler(){
if (!EstVide()) Tete--;
}
public void Empiler(int
Elt)
return Tete==MAX;
{
}
public boolean EstVide(){
if (!EstPleine())
LesElements[++Tete]
return Tete==-1;
}
public int Sommet(){
if (!EstVide())
return
LesElements ;
else return -123;
}
=Elt;
}
private final static int
MAX=10;
private int[]
LesElements=new int ;
private int Tete=-1;
}
Adel Khalfallah Programmation objet avec C++ et Java 75
Objets et classes en java
package main.java;
public class Main {
public static void main(String[] args) {
Pile P1=new Pile();
P1.Empiler(10);
int i=0;
for (Pile P : LesPiles){LesPiles =P=new Pile();
P.Empiler(i);}
for (Pile P:LesPiles)System.out.println(P.Sommet());
}
LesPiles[15].Empiler(123);
System.out.println(LesPiles[15].Sommet());
Advertisement
}
Adel Khalfallah Programmation objet avec C++ et Java 76
Dur e de vie (java)
" Un objet existe tant quil est r f renc
" Le garbage collector (ramasse-miette) se charge
de lib rer les objets non r f renc s, son
d clenchement est g n ralement
impr visible
Adel Khalfallah Programmation objet avec C++ et Java 77
Modes de passage de param tres
" uniquement par valeur, pour les objets la
r f rence est pass e par valeur, lobjet r f renc
est pass par r f rence
Adel Khalfallah Programmation objet avec C++ et Java 78
R gles dacc s java
" Java introduit 4 niveaux de visibilit :
La classe (private)
Le paquetage (par d faut) sapplique toute la
classe ou un l ment de l tat ou du
comportement qui sera accessible toutes les
classes du paquetage
La classe et ses descendants et le paquetage
(protected)
Tout (public) la classe, les autres classe et
paquetages
Adel Khalfallah Programmation objet avec C++ et Java 79
R gles dacc s
Lencapsulation fait que de pr f rence :
class Toto {
public
// m thodes du comportement uniquement
private
//Informations sur l tat et ventuellement
fonctions de service
}
Adel Khalfallah Programmation objet avec C++ et Java 80
R gles dacc s
Getters et Setters
class Toto {
public int GetX() //Lecture contr l e de X
public void SetX(int Val) //Ecriture contr l e
de X
private int X;
}
Adel Khalfallah Programmation objet avec C++ et Java 81
this
public bool EstPleine(){
return Tete==MAX;
}
" Quelle valeur pour Tete ?
Celle de lobjet sur lequel t invoqu la m thode (P1);
On a implicitement
public bool EstPleine(Pile *this){
return this->Tete==MAX;
}
Attention la tentation d crire
EstPleine(Pile P) {return P.Tete==MAX;}
Adel Khalfallah Programmation objet avec C++ et Java 82
Pr ciser la port e
java
class Toto
{
Public void M_Publique(){
int Donn e; //2
//Cache 1
Donn e=2; //acc s 2
Toto.this.Donn e=1 // acc s 1
}
Private int Donn e; //1
};
Adel Khalfallah Programmation objet avec C++ et Java 83
Attribut final (java)
" NB : const est un mot cl de java qui nest pas utilis
" Un attribut final devra tre initialis e au plus tard lors de la
construction
" Un attribut de type primitif final est une constante
" Un attribut r f rence un objet ou un tableau ne pourra pas tre
r affect mais lobjet r f renc pourra tre modifi
public class Voiture {
&
Public M2() {& MonMoteur.AugmenterPuissance();& //Ok}
Public M1() {& MonMoteur= new Moteur();& //Erreur}
private final int NoChassis;
private final Moteur MonMoteur;
&
Adel Khalfallah Programmation objet avec C++ et Java 84
Param tre/locale final (java)
" Un param tre (ou une variable locale) de type primitif final
ne pourra pas tre modifi dans le corps du traitement
" Un param tre (ou une variable locale) r f rence un objet ou
un tableau ne pourra pas tre r affect mais lobjet r f renc
pourra changer dans le corps du traitement
public void Proc(final int I, final Voiture V){
final int tmp;
I=123; //Erreur
tmp=456 //Ok
tmp=789 //Erreur
V.Accelerer() //Ok
}
Adel Khalfallah Programmation objet avec C++ et Java 85
Objets immuables (immutable)
" Objets dont l tat ne change plus apr s avoir t
cr es
" Ils mat rialisent des valeurs
" Ils garantissent un comportement coh rent dans
un contexte multit ches sans n cessiter de
synchronisation
Adel Khalfallah Programmation objet avec C++ et Java 86
Objets immuables
" Java
Tous les attributs sont final
Il ne faut pas fournir de m thodes qui changent l tat
Il faut interdire lh ritage (afin d viter dintroduire de
m thodes qui changent l tat)
String est un exemple de classe dont les objets sont
immuables
Adel Khalfallah Programmation objet avec C++ et Java 87
Objets immuables
" Que faire lorsquun objet immuable doit
changer d tat. Par exemple, on veut rajouter un
caract re dans un objet String
=> On cr e un nouvel objet contenant le nouvel
tat
Adel Khalfallah Programmation objet avec C++ et Java 88
Attributs et m thodes de classe
Chaise
Nombre Total
Incr menter Total
class Chaise {
public
static void Incrementer()
&
private
static int NombreTotal;
&
}
Adel Khalfallah Programmation objet avec C++ et Java 89
Attributs et m thodes de classe
" Incrementer() na pas visibilit sur les attributs
non statique (quils soient priv s ou publique), il ne
peut manipuler que les attributs statiques
" Incrementer() ne dispose pas du pointeur this
Adel Khalfallah Programmation objet avec C++ et Java 90
Constructeurs
Probl me: initialisation de la t te de la pile ?
" Premier tentative
&
private:
int Tete=-1;
&
Adel Khalfallah Programmation objet avec C++ et Java 91
Constructeurs
class Pile {
public
public Pile(){&}
public bool EstPleine()&
public bool EstVide()&
public int Sommet()&
public void Depiler()&
public void Empiler(int
Elt)&
private
int[] LesElements;
private int Tete;
};
Adel Khalfallah Programmation objet avec C++ et Java 92
Constructeurs
Constructeur :
" M me nom que la classe
" Pas de type r sultat
" Invoqu automatiquement
" Constructeur par d faut
" Autant de constructeurs que de fa ons
dinitialiser (les param tres doivent permettre
de les distinguer)
Adel Khalfallah Programmation objet avec C++ et Java 93
Constructeur
" Un classe peut disposer de plusieurs constructeurs
surcharg s
class Date {
Date(int UnJour, int UnMois, int UnAn);
// La date initiale est fournie sous la forme jour / mois / An. Par exemple :
// Date D(1,1,2004);
Date(const char* UneDate);
// La Date est fournie sous forme de cha ne de caract re. Par exemple :
// Date D("Jeudi 1er Janvier 2004")
...
}
Adel Khalfallah Programmation objet avec C++ et Java 94
Bloc dinitialisations (java)
" Les blocs dinitialisation permettent de factoriser le code
commun tous les constructeurs (ils sont donc ex cut s avant
les const...