Approche Objet Approche Objet - Cours...
Transcript of Approche Objet Approche Objet - Cours...
Approche Objet
En programmationprocédurale (Algol, ...)
Un programme = suite d'instructionsexécutées par une machine.Son exécution = ces instructions agissentsur des données.
DONNÉES
Fonction 1
Fonction 2
Fonction 3
Les fonctions et procédures travaillent "àdistance" sur les données.
Accent mis sur les actions. Il s'agit derépondre à la question: Que veut on faire ?
dissociation entre données et fonctions = >problème lorsqu'on change les structures dedonnées.
II-2 JMF
Approche Objet
En programmationprocédurale (suite)
Les procédures s'appellent entre elles etpeuvent modifier les mêmes données =>problème lorsqu'on veut modifier uneprocédure: comment avait elle été appelée ?
Finalement conception plat de spaghettisdans les appels de procédures. Il serait biende "responsabiliser" nos parties deprogrammes
D'où une autre vision de la programmation
II-3 JMF
Approche Objet
Programmation parobjets
Un programme = une société d'entités
Son exécution : les entités collaborent pourrésoudre le problème final en s'envoyantdes messages.
une entité = un objet qui prend en compte sapropre gestion (objet responsable)
DONNÉES
fonctions opérant sur les données
DONNÉES
fonctions opérant sur les données
DONNÉES
fonctions opérant sur les données
Messages
liaison inévitable entre données etprocédures opérant sur ces données.
II-4 JMF
Approche Objet
Les objets
La question est: De quoi parle t - on ?
Quelles sont les entités qui interviennentdans mon problème ?
exemple :modéliser un logiciel de trafic routier
les entités sont :- les feux tricolores- les carrefours- les véhicules- les agents de la circulation.
Lorsqu'un feu tricolore passe au vert ilenvoie cette connaissance (= ce message) àl'agent posté à ce carrefour. L'agent prendune décision et en informe (envoi demessages) les chauffeurs des véhicules.
II-5 JMF
Approche Objet
Notions manipuléesdans le monde des
objets
Objets
Encapsulation
Classe
Héritage
Polymorphisme
II-6 JMF
Approche Objet
Objet
objet=
données + opérations sur ces données(méthodes)
=variables de "type abstrait"
=entité du domaine du problème
Un objet est composé de 2 parties :- partie interface: opérations qu'onpeut faire dessus (partie publique)- partie interne (intime): donnéessensibles de l'objet (partie privée)
Les utilisateurs (i.e. les élémentsextérieurs) de l'objet ne voient que la partieinterface.
Ces entités doivent être indépendantes
II-7 JMF
Approche Objet
Objet (suite)
exemple d'objets :la renault R21 bleue immatriculée 2245CDV 75 de mon chef de service est un objet
objet R21_de_mon_chefgenre : Renaultimmatriculation : 2245 CDV 75NbPlaces : 5propriétaire: chef de services_arreter()avancer()
fin objet
Un autre objet serait ma clio immatriculée4357 NBG 93objet ma_Clio
genre : Renaultimmatriculation : 4357 NBG 93NbPlaces : 4propriétaire: Moi - mêmes_arreter()avancer()
fin objet
II-8 JMF
Approche Objet
Encapsulation
Deux sens dans le monde des objets:Encapsulation
=regroupement de code et de données
masquage d'information au monde extérieur(data hiding)
Avantages
meilleure modularitél'unité de modularité est l'objet. Lescommunications entre modules sont traitéespar les opérations d'interface.meilleure sécuritéa) le code ne peut s'appliquer que sur destypes de données bien précis et pas surd'autres données.b) certaines parties de l'objet sontinaccessibles pour certains (et n'ontd'ailleurs pas être connues)meilleure conception dès le débutdonnées et opérations sont spécifiées enmême temps.meilleure lisibilitédonnées et déclarations des opérations sontécrites au même endroit.
II-9 JMF
Approche Objet
Encapsulation
Avantages
simplicité apparente pour l'utilisateurI'utilisateur ne connaît que ce qui lui estnécessaire. Il n'a pas connaissance ducontenu interne (intime!!) de certainesdonnées contenu qui peut être énorme.meilleure portabilitéa) les parties masquées pourront êtreoptimisées puis redonnées à l'utilisateursans que celui ci ne change son codepuisque ces parties n'ont pas été utiliséesdirectementb) Dans ces parties masquées on pourramettre des points dépendant machines etimplémenter ces points pour chaquemachine (=> portage facilité: on sait quelleest la partie de code à porter)vision homogène des objetsQuel que soit l'environnement, l'utilisateura une même vision des choses.
II-10 JMF
Approche Objet
Classe
classe=
modèle décrivant le contenu et lecomportement des futurs objets de la classe
=ensemble d'objets
le contenu = les donnéesle comportement = les méthodes
Exemple:la classe des véhicules, la classe descamions, des automobiles.La classe des automobiles peut être décriteparclasse Automobile
genreimmatriculationNbPlacespropriétaires_arreter()avancer()
fin classe
II-11 JMF
Approche Objet
Un résumé : classe, objet,méthode et message.
Un exemple particulier d'une classes'appelle une instance de la classe ou unobjet de cette classe :
objet = instance de classe
En première approche, les objets sont à laprogrammation objet ce que sont lesvariables à la programmation procédurale.Les classes sont à la programmation objet ceque les types sont à la programmationprocédurale.
Programmationprocédurale VARIABLE TYPE
ProgrammationOrientée OBJET CLASSEObjet
Envoyer un message à un objet c'est luidemander d'exécuter une de ses méthodes.
II-12 JMF
Approche Objet
Héritage
Notion rattachée aux classes
Héritage=
construire une classe à partir d'une (d')autre(s)
héritage simple
classe Véhicule genre immatriculation propriétaire s_arreter() avancer() fin classe
classe automobile NbPlaces liste_passagers ()fin classe
classe camion tonnage typeChargement()finclasse
automobile et camion hérite (ou dérive) deVéhicule.héritage = dérivationLa classe dont on dérive est dite classe debase. Les classes obtenues par dérivationsont dites classes dérivées.
II-13 JMF
Approche Objet
Héritage (suite)
héritage multiple
classe automobile NbPlaces liste_passagers ()fin classe
classe camion tonnage typeChargement()finclasse
classe camionnette type_d_utilisationfin classe
II-14 JMF
Approche Objet
Héritage (fin)
L'héritage est la possibilité de pouvoirreprendre intégralement tout ce qui a déjàété fait et de pouvoir l'enrichir : visiondescendante.L'héritage est la possibilité de regrouper enun seul endroit ce qui est commun àplusieurs : les modifications des élémentscommuns ne se font qu'à un seul endroit :vision ascendante.
Il s'utilise dans "les deux sens":vers le hautsurtout lors de l'analyse O.O: on regroupedans une classe ce qui est commun àplusieurs classes.exemple:dans la classe véhicule on regroupe lescaractéristiques communes aux camions etaux automobilesvers le bas
surtout lors de la réutilisabilité.La classe véhicule étant définie, on peut lareprendre intégralement pour construire laclasse bicyclette
II-15 JMF
Approche Objet
Classe abstraite, classeconcrète
Pour les besoins d'une bonne analyse, on estamené parfois à créer des classes quifinalement ne donneront jamais d'objet.Ces classes sont dites classes abstraites.
Par opposition les classes à partirdesquelles on fabrique des objets sont ditesclasses concrètes.
Certains langages O.O renforcent cettenotion de classe abstraite : le compilateurvérifie qu'on ne crée jamais d'objets de cesclasses.
II-16 JMF
Approche Objet
Polymorphisme
On veut créer un paint :
zone de dessin
On fait une analyse O.O du problème.On dégage les classes Cercle, Carré,Triangle. Ces classes ont des pointscommuns qu'on regroupe dans la classeFormeGéométrique.
II-17 JMF
Approche Objet
Polymorphisme (suite)
classe FormeGéométrique 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 classesCarré, Cercle et Triangle maisdessiner un cercle != dessiner un triangle=> plusieurs formes.
Polymorphisme=
un même nom, plusieurs implantationsCertains langages demandent de préciser siune fonction doit être polymorphe ou pas(C++, ...). On le précise alors dans la classede base.
D'autres langages implantentsystématiquement le polymorphisme(Smalltalk, Java, ...).
II-18 JMF
Approche Objet
Polymorphisme (suite)
Si on a un ensemble de formes géométriqueset 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 fonctiondessiner() ou effacer() associée à laforme géométrique repérée. Ce choix ne peutêtre fait qu'à l'EXÉCUTION. Donc
Polymorphisme=
liaison dynamiqueremarqueA l'aide du polymorphisme, ladétermination de la bonne fonctioneffacer() et dessiner() est faiteautomatiquement au moment del'EXÉCUTION. On ne s'en soucie pas aumoment du codage.
II-19 JMF
Approche Objet
Polymorphisme (suite)
Comparaison programmationprocédurale vs P.O.O
En programmation procédurale on auraitécrit :dessiner(type_dessin){
switch (type_dessin)case CARRE:•••break ;case CERCLE:•••break ;case TRIANGLE:•••break ;
}
En programmation orientée objet on écrit :Classe CARRE {
dessiner();}
Classe CERCLE {dessiner();
}
Classe TRIANGLE {dessiner();
}
même 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 même sémantique ontmême nom.
Programmation plus souple : si on veutajouter une classe Rectangle, il suffit de lefaire (!!) et d'implanter la méthodedessiner() dans cette classe. Enprogrammation procédurale, il fautreprendre le code de dessiner() (encorefaut il l'avoir !!) et l'enrichir (sans ledétériorer !!).
Au moment d'écrire rafraichir(), leprogrammeur n'a pas à connaître tous lestypes d'objets : l'adjonction d'une formegéométrique (Rectangle) se fait sansmodification de la fonction rafraichir()i.e. la fonction rafraichir() fonctionnemême sur du code qui sera implanté plustard !!
II-21 JMF
Approche Objet
Programmation OrientéeObjet
Programmation O.O = programmation danslaquelle les programmes sont organiséscomme des ensembles d'objets coopérants.Chaque objet représente une instance d'uneclasse.Les classes appartiennent à une hiérarchiesuivant la relation d'héritage
Remarques sur les langages O.O
"Un langage est orienté objet s'il possède lesmécanismes supportant le style deprogrammation O.O i.e. s'il procure lesfacilités qui rendent pratique l'usage de cestyle. Un langage ne supporte pas une styles'il faut un effort où une adresseexceptionnelle pour écrire des programmesdans ce style (Bjarne Stroustrup)
exemple:on peut écrire des programmes O.O enCOBOL ou assembleur mais ces langages nesupportent (i.e. n'aident pas à) ce style.Smalltalk, C++, Java sont des langages O.O
II-22 JMF
Approche Objet
Analyse et ConceptionOrientée Objet
Dijkstra: "la technique à appliquer pourmaîtriser la complexité du logiciel estconnue depuis très longtemps : divide etimpera (diviser pour régner)"
Descartes (Le discours de la méthode) :"Diviser chacune des difficultés quej'examinerai en autant de parcelles qu'il sepourrait et qu'il serait requis pour mieuxles résoudre"
Donc décomposer en parties de plus en pluspetites chacune d'elles pouvant êtreaffinées. Pour comprendre un niveau donnéd'un système il ne faut avoir qu'àappréhender quelques parties (et non pastoutes) du système.
Décomposition algorithmique :L'accent est mis sur les actions à effectuerpour résoudre le problème
L'analyse orientée objet est une méthoded'analyse qui examine les besoins d'après laperspective des classes et objets trouvésdans le vocabulaire du domaine du problème
II-23 JMF
Approche Objet
Notions "est une" et "aune" :
Héritage ou Inclusion
Le problème : lorsqu'une classe est créée,faut il la réutiliser en fabriquant un objetde cette classe à l'intérieur d'une autreclasse (inclusion) ou en hériter ?
ThéorèmesLorsqu'une nouvelle classe est unespécialisation d'une autre classe, est "unesorte" d'autre classe, on hérite : notion "estune"Lorsqu'une classe possède un élément d'uneautre classe, on crée un champ de cetteautre classe comme composante de lanouvelle classe créée. On inclue : notion "aune".ExempleUne voiture comme un camion est unvéhicule => les classes voiture et camionhérite de véhicule.Un véhicule possède un châssis => les objetsde la classe véhicule ont un champ châssis.
II-24 JMF
Approche Objet
Un processus d'analyseorientée objet
Dans cet ordre :1°) répertorier les entités du domaine duproblème et leur comportement
2°) En déduire les classes auxquelles cesentités appartiennent.
3°) Architecturer l'ensemble des classes enregroupant les données ou procédurescommunes à certaines classes dans desclasses dont on hérite.
II-25 JMF
Approche Objet
Notions O.O et interfacesgraphiques
Les notions d'objets, de classes, d'héritagesont grandement utilisées.
Dans une interface, on dispose de"rectangles" "sensibles" et donc vontexécuter du code = objets.exemple : 2 boutons poussoir
Quitter Sauvegarder
On définit donc des classes d'objetsgraphiquesexemple : la classe des bouton poussoir
classe BoutonPoussoirlargeur, hauteurcode_lors_d_un_clic()fin classe
II-26 JMF
Approche Objet
Notions O.O et interfacesgraphiques (suite)
disposition des objets et envoi demessages
Les objets sont rangés dans d'autres.exemple :
PO
FM
GO
boite_de_bouton_radio
Cette représentation graphique est notée :
boite_de_boutons_radio
bouton_radio1 bouton_radio3bouton_radio2(FM) (GO) (PO)
l'objet graphique boite_de_bouton_radiocontient trois autres objets bouton_diamant.Cette boite_de_bouton_radio les gère desorte à ne pouvoir en sélectionner qu'unseul à la fois => passage de renseignementsd'un objet contenant à ses objets contenus :envoi de messagesMême idée 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 graphiquesqui en contiennent d'autres (et gèrent leurapparition, leur positionnement, ...) etd'autres qui n'en contiennent pas comme lesboutons poussoirs, les fenêtres textes desaisie, ... Ces derniers sont parfois appelésles contrôles.
II-29 JMF
Approche Objet
Héritage dans lesinterfaces graphiques
héritage dans les classes
Les classes d'objets graphiques sont doncrangées en arborescence d'héritage comme :
classe "Noyau"
classesdes conteneurs
classesdes non conteneurs
conclusion
Les 2 arbres dessinés ont peu de choses àvoir l'un l'autre.
Le premier est l'architecture de l'interfacei.e. le placement des divers composantsgraphiques les uns par rapport aux autres,le second est un arbre d'héritage declasses donné une bonne fois par lesdistributeurs d'objets graphiques (OSF pourMotif, SUN pour Java)
II-30 JMF
Approche Objet
Bibliographie surl'orienté objet
Concept généraux et méthodes
Conception et programmation par objets:Jacques Ferber ed Hermès.
Conception orientée 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