31
Approche Objet Approche Approche Objet Objet II-1 JMF

Approche Objet Approche Objet - Cours informatiquepolymorphe.free.fr/cours/programmation/objet/objet.pdf · Approche Objet Programmation par objets Un programme = une société d'entités

  • Upload
    lecong

  • View
    263

  • Download
    0

Embed Size (px)

Citation preview

Approche Objet

ApprocheApprocheObjetObjet

II-1 JMF

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