Vous êtes sur la page 1sur 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 fonctions oprant sur les donnes

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 TYPE

OBJET

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