Você está na página 1de 31

Approche Objet

Approche
Objet

II-1

JMF

Approche Objet

En programmation
procdurale (Algol, ...)
Un programme = suite d'instructions
excutes par une machine.
Son excution = ces instructions agissent
sur des donnes.

DONNES

Fonction 1
Fonction 2
Fonction 3
Les fonctions et procdures travaillent "
distance" sur les donnes.
Accent mis sur les actions. Il s'agit de
rpondre la question: Que veut on faire ?
dissociation entre donnes et fonctions = >
problme lorsqu'on change les structures de
donnes.
II-2

JMF

Approche Objet

En programmation
procdurale (suite)
Les procdures s'appellent entre elles et
peuvent modifier les mmes donnes =>
problme lorsqu'on veut modifier une
procdure: comment avait elle t appele ?
Finalement conception plat de spaghettis
dans les appels de procdures. Il serait bien
de "responsabiliser" nos parties de
programmes
D'o une autre vision de la programmation

II-3

JMF

Approche Objet

Programmation par
objets
Un programme = une socit d'entits
Son excution : les entits collaborent pour
rsoudre le problme final en s'envoyant
des messages.
une entit = un objet qui prend en compte sa
propre gestion (objet responsable)

DONNES
fonctions oprant
sur les donnes
Messages

DONNES

DONNES
fonctions oprant
sur les donnes

fonctions oprant
sur les donnes

liaison invitable entre donnes et


procdures oprant sur ces donnes.
II-4

JMF

Approche Objet

Les objets
La question est: De quoi parle t - on ?
Quelles sont les entits qui interviennent
dans mon problme ?
exemple :
modliser un logiciel de trafic routier
les entits sont :
- les feux tricolores
- les carrefours
- les vhicules
- les agents de la circulation.
Lorsqu'un feu tricolore passe au vert il
envoie cette connaissance (= ce message)
l'agent post ce carrefour. L'agent prend
une dcision et en informe (envoi de
messages) les chauffeurs des vhicules.

II-5

JMF

Approche Objet

Notions manipules
dans le monde des
objets

Objets

Encapsulation

Classe

Hritage

Polymorphisme

II-6

JMF

Approche Objet

Objet
objet
=
donnes + oprations sur ces donnes
(mthodes)
=
variables de "type abstrait"
=
entit du domaine du problme
Un objet est compos de 2 parties :
- partie interface: oprations qu'on
peut faire dessus (partie publique)
- partie interne (intime): donnes
sensibles de l'objet (partie prive)
Les utilisateurs (i.e. les lments
extrieurs) de l'objet ne voient que la partie
interface.
Ces entits doivent tre indpendantes

II-7

JMF

Approche Objet

Objet (suite)
exemple d'objets :
la renault R21 bleue immatricule 2245
CDV 75 de mon chef de service est un objet
objet R21_de_mon_chef
genre : Renault
immatriculation : 2245 CDV 75
NbPlaces : 5
propritaire: chef de service
s_arreter()
avancer()
fin objet

Un autre objet serait ma clio immatricule


4357 NBG 93
objet ma_Clio
genre : Renault
immatriculation : 4357 NBG 93
NbPlaces : 4
propritaire: Moi - mme
s_arreter()
avancer()
fin objet

II-8

JMF

Approche Objet

Encapsulation
Deux sens dans le monde des objets:
Encapsulation
=
regroupement de code et de donnes
masquage d'information au monde extrieur
(data hiding)

Avantages
meilleure modularit
l'unit de modularit est l'objet. Les
communications entre modules sont traites
par les oprations d'interface.
meilleure scurit
a) le code ne peut s'appliquer que sur des
types de donnes bien prcis et pas sur
d'autres donnes.
b) certaines parties de l'objet sont
inaccessibles pour certains (et n'ont
d'ailleurs pas tre connues)
meilleure conception ds le dbut
donnes et oprations sont spcifies en
mme temps.
meilleure lisibilit
donnes et dclarations des oprations sont
crites au mme endroit.

II-9

JMF

Approche Objet

Encapsulation
Avantages
simplicit apparente pour l'utilisateur
I'utilisateur ne connat que ce qui lui est
ncessaire. Il n'a pas connaissance du
contenu interne (intime!!) de certaines
donnes contenu qui peut tre norme.
meilleure portabilit
a) les parties masques pourront tre
optimises puis redonnes l'utilisateur
sans que celui ci ne change son code
puisque ces parties n'ont pas t utilises
directement
b) Dans ces parties masques on pourra
mettre des points dpendant machines et
implmenter ces points pour chaque
machine (=> portage facilit: on sait quelle
est la partie de code porter)
vision homogne des objets
Quel que soit l'environnement, l'utilisateur
a une mme vision des choses.

II-10

JMF

Approche Objet

Classe
classe
=
modle dcrivant le contenu et le
comportement des futurs objets de la classe
=
ensemble d'objets
le contenu = les donnes
le comportement = les mthodes
Exemple:
la classe des vhicules, la classe des
camions, des automobiles.
La classe des automobiles peut tre dcrite
par
classe Automobile
genre
immatriculation
NbPlaces
propritaire
s_arreter()
avancer()
fin classe

II-11

JMF

Approche Objet

Un rsum : classe, objet,


mthode et message.
Un exemple particulier d'une classe
s'appelle une instance de la classe ou un
objet de cette classe :
objet = instance de classe
En premire approche, les objets sont la
programmation objet ce que sont les
variables la programmation procdurale.
Les classes sont la programmation objet ce
que les types sont la programmation
procdurale.
Programmation
procdurale
Programmation
Oriente
Objet

VARIABLE

OBJET

TYPE

CLASSE

Envoyer un message un objet c'est lui


demander d'excuter une de ses mthodes.

II-12

JMF

Approche Objet

Hritage
Notion rattache aux classes
Hritage
=
construire une classe partir d'une (d')
autre(s)

hritage simple
classe Vhicule
genre
immatriculation
propritaire
s_arreter()
avancer()
fin classe

classe automobile
NbPlaces
liste_passagers ()
fin classe

classe camion
tonnage
typeChargement()
finclasse

automobile et camion hrite (ou drive) de


Vhicule.
hritage = drivation
La classe dont on drive est dite classe de
base. Les classes obtenues par drivation
sont dites classes drives.
II-13

JMF

Approche Objet

Hritage (suite)
hritage multiple
classe automobile
NbPlaces
liste_passagers ()
fin classe

classe camion
tonnage
typeChargement()
finclasse

classe camionnette
type_d_utilisation
fin classe

II-14

JMF

Approche Objet

Hritage (fin)
L'hritage est la possibilit de pouvoir
reprendre intgralement tout ce qui a dj
t fait et de pouvoir l'enrichir : vision
descendante.
L'hritage est la possibilit de regrouper en
un seul endroit ce qui est commun
plusieurs : les modifications des lments
communs ne se font qu' un seul endroit :
vision ascendante.
Il s'utilise dans "les deux sens":
vers le haut
surtout lors de l'analyse O.O: on regroupe
dans une classe ce qui est commun
plusieurs classes.
exemple:
dans la classe vhicule on regroupe les
caractristiques communes aux camions et
aux automobiles
vers le bas
surtout lors de la rutilisabilit.
La classe vhicule tant dfinie, on peut la
reprendre intgralement pour construire la
classe bicyclette

II-15

JMF

Approche Objet

Classe abstraite, classe


concrte
Pour les besoins d'une bonne analyse, on est
amen parfois crer des classes qui
finalement ne donneront jamais d'objet.
Ces classes sont dites classes abstraites.
Par opposition les classes partir
desquelles on fabrique des objets sont dites
classes concrtes.
Certains langages O.O renforcent cette
notion de classe abstraite : le compilateur
vrifie qu'on ne cre jamais d'objets de ces
classes.

II-16

JMF

Approche Objet

Polymorphisme
On veut crer un paint :

zone de dessin

On fait une analyse O.O du problme.


On dgage les classes Cercle, Carr,
Triangle. Ces classes ont des points
communs qu'on regroupe dans la classe
FormeGomtrique.

II-17

JMF

Approche Objet

Polymorphisme (suite)
classe FormeGomtrique
polymorphe dessiner()
polymorphe effacer()
fin classe

classe Cercle
dessiner()
effacer()
fin Cercle

classe Carr
dessiner()
effacer()
fin Carr

classe Triangle
dessiner()
effacer()
fin Triangle

dessiner() et effacer() sont polymorphes.


Leur nom est similaire dans les classes
Carr, Cercle et Triangle mais
dessiner un cercle != dessiner un triangle
=> plusieurs formes.
Polymorphisme
=
un mme nom, plusieurs implantations
Certains langages demandent de prciser si
une fonction doit tre polymorphe ou pas
(C++, ...). On le prcise alors dans la classe
de base.
D'autres langages implantent
systmatiquement le polymorphisme
(Smalltalk, Java, ...).

II-18

JMF

Approche Objet

Polymorphisme (suite)
Si on a un ensemble de formes gomtriques
et qu'on veuille crire: rafraichir()
Pour toute forme dans zone de dessin
effacer()
Pour toute forme dans zone de dessin
dessiner()

A chaque fois il faut appeler la fonction


dessiner() ou effacer() associe la
forme gomtrique repre. Ce choix ne peut
tre fait qu' l'EXCUTION. Donc
Polymorphisme
=
liaison dynamique

remarque
A l'aide du polymorphisme, la
dtermination de la bonne fonction
effacer() et dessiner() est faite
automatiquement au moment de
l'EXCUTION. On ne s'en soucie pas au
moment du codage.

II-19

JMF

Approche Objet

Polymorphisme (suite)
Comparaison programmation
procdurale vs P.O.O
En programmation procdurale on aurait
crit :
dessiner(type_dessin)
{
switch (type_dessin)
case CARRE:

break ;
case CERCLE:

break ;
case TRIANGLE:

break ;
}

En programmation oriente objet on crit :


Classe CARRE {
dessiner();
}
Classe CERCLE {
dessiner();
}
Classe TRIANGLE {
dessiner();
}

mme libell de la fonction dessiner()


"le switch est le goto de la P.O.O"
II-20

JMF

Approche Objet

Polymorphisme (fin)
Avantages
Les fonctions ayant la mme smantique ont
mme nom.
Programmation plus souple : si on veut
ajouter une classe Rectangle, il suffit de le
faire (!!) et d'implanter la mthode
dessiner() dans cette classe. En
programmation procdurale, il faut
reprendre le code de dessiner() (encore
faut il l'avoir !!) et l'enrichir (sans le
dtriorer !!).
Au moment d'crire rafraichir(), le
programmeur n'a pas connatre tous les
types d'objets : l'adjonction d'une forme
gomtrique (Rectangle) se fait sans
modification de la fonction rafraichir()
i.e. la fonction rafraichir() fonctionne
mme sur du code qui sera implant plus
tard !!

II-21

JMF

Approche Objet

Programmation Oriente
Objet
Programmation O.O = programmation dans
laquelle les programmes sont organiss
comme des ensembles d'objets cooprants.
Chaque objet reprsente une instance d'une
classe.
Les classes appartiennent une hirarchie
suivant la relation d'hritage

Remarques sur les langages O.O


"Un langage est orient objet s'il possde les
mcanismes supportant le style de
programmation O.O i.e. s'il procure les
facilits qui rendent pratique l'usage de ce
style. Un langage ne supporte pas une style
s'il faut un effort o une adresse
exceptionnelle pour crire des programmes
dans ce style (Bjarne Stroustrup)
exemple:
on peut crire des programmes O.O en
COBOL ou assembleur mais ces langages ne
supportent (i.e. n'aident pas ) ce style.
Smalltalk, C++, Java sont des langages O.O

II-22

JMF

Approche Objet

Analyse et Conception
Oriente Objet
Dijkstra: "la technique appliquer pour
matriser la complexit du logiciel est
connue depuis trs longtemps : divide et
impera (diviser pour rgner)"
Descartes (Le discours de la mthode) :
"Diviser chacune des difficults que
j'examinerai en autant de parcelles qu'il se
pourrait et qu'il serait requis pour mieux
les rsoudre"
Donc dcomposer en parties de plus en plus
petites chacune d'elles pouvant tre
affines. Pour comprendre un niveau donn
d'un systme il ne faut avoir qu'
apprhender quelques parties (et non pas
toutes) du systme.
Dcomposition algorithmique :
L'accent est mis sur les actions effectuer
pour rsoudre le problme
L'analyse oriente objet est une mthode
d'analyse qui examine les besoins d'aprs la
perspective des classes et objets trouvs
dans le vocabulaire du domaine du problme

II-23

JMF

Approche Objet

Notions "est une" et "a


une" :
Hritage ou Inclusion
Le problme : lorsqu'une classe est cre,
faut il la rutiliser en fabriquant un objet
de cette classe l'intrieur d'une autre
classe (inclusion) ou en hriter ?
Thormes
Lorsqu'une nouvelle classe est une
spcialisation d'une autre classe, est "une
sorte" d'autre classe, on hrite : notion "est
une"
Lorsqu'une classe possde un lment d'une
autre classe, on cre un champ de cette
autre classe comme composante de la
nouvelle classe cre. On inclue : notion "a
une".
Exemple
Une voiture comme un camion est un
vhicule => les classes voiture et camion
hrite de vhicule.
Un vhicule possde un chssis => les objets
de la classe vhicule ont un champ chssis.

II-24

JMF

Approche Objet

Un processus d'analyse
oriente objet
Dans cet ordre :
1) rpertorier les entits du domaine du
problme et leur comportement
2) En dduire les classes auxquelles ces
entits appartiennent.
3) Architecturer l'ensemble des classes en
regroupant les donnes ou procdures
communes certaines classes dans des
classes dont on hrite.

II-25

JMF

Approche Objet

Notions O.O et interfaces


graphiques
Les notions d'objets, de classes, d'hritage
sont grandement utilises.
Dans une interface, on dispose de
"rectangles" "sensibles" et donc vont
excuter du code = objets.
exemple : 2 boutons poussoir

Quitter

Sauvegarder

On dfinit donc des classes d'objets


graphiques
exemple : la classe des bouton poussoir
classe BoutonPoussoir
largeur, hauteur
code_lors_d_un_clic()
fin classe

II-26

JMF

Approche Objet

Notions O.O et interfaces


graphiques (suite)
disposition des objets et envoi de
messages
Les objets sont rangs dans d'autres.
exemple :
FM
boite_de_bouton_radio
GO
PO

Cette reprsentation graphique est note :


boite_de_boutons_radio

bouton_radio1
(FM)

bouton_radio2
(GO)

bouton_radio3
(PO)

l'objet graphique boite_de_bouton_radio


contient trois autres objets bouton_diamant.
Cette boite_de_bouton_radio les gre de
sorte ne pouvoir en slectionner qu'un
seul la fois => passage de renseignements
d'un objet contenant ses objets contenus :
envoi de messages
Mme ide avec des objets de positionnement
(ligne_colonne, d'attachement, etc.)
II-27

JMF

Approche Objet

Interfaces graphiques
Quand vous voyez ceci :

C'est qu'on a programm cela :

II-28

JMF

Approche Objet

Interfaces graphiques
(suite)

Il existe donc des composants graphiques


qui en contiennent d'autres (et grent leur
apparition, leur positionnement, ...) et
d'autres qui n'en contiennent pas comme les
boutons poussoirs, les fentres textes de
saisie, ... Ces derniers sont parfois appels
les contrles.

II-29

JMF

Approche Objet

Hritage dans les


interfaces graphiques
hritage dans les classes
Les classes d'objets graphiques sont donc
ranges en arborescence d'hritage comme :
classe "Noyau"

classes
des
conteneurs

classes
des non
conteneurs

conclusion
Les 2 arbres dessins ont peu de choses
voir l'un l'autre.
Le premier est l'architecture de l'interface
i.e. le placement des divers composants
graphiques les uns par rapport aux autres,
le second est un arbre d'hritage de
classes donn une bonne fois par les
distributeurs d'objets graphiques (OSF pour
Motif, SUN pour Java)
II-30

JMF

Approche Objet

Bibliographie sur
l'orient objet
Concept gnraux et mthodes
Conception et programmation par objets:
Jacques Ferber ed Herms.
Conception oriente objet et applications:
Grady Booch ed InterEditions.
http://cedric.cnam.fr/~farinone/Java2810/7.html

jusqu'

http://cedric.cnam.fr/~farinone/Java2810/16.html

II-31

JMF

Você também pode gostar