Fondements de l’approche objet

Institut Supérieur d'Informatique
1/95
100%
Rendu du PDF...
Page 1 sur 95Lecteur de document UniversityLib

Fondements de l’approche objet

Institut Supérieur d'Informatique · Object-Oriented Programming (C++ and Java) · notes

Browse all programmation documents

Fondements de lapproche

objet

Adel KHALFALLAH

Institut Sup rieur Dinformatique El Manar

[email protected]

[email protected]

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

[email protected]

[email protected]

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...