Vous êtes sur la page 1sur 85

Conception et programmation Oriente objets

Benot Sonntag ----sonntag@icps.u-strasbg.fr sonntag@IsaacOS.com benoit@sonntag.fr

Mon projet
www.IsaacOS.com Technologie prototype
(a > b).if { "Ok".print; }; result

Langage prototype + compilateur

01000101 00110011 10100111 01101001

Systme dexploitation prototype

Plan du cours
Historique et gnralits des langages objets. Modlisation, analyse et conception objets (UML). Programmation Oriente Objet : le langage Java. Introduction l'objet pur : Lisaac Cours CM TD TP : 12 x 2 = 24 heures. : 8 x 2 = 16 heures. : 5 x 2 = 10 heures

L'volution des langages de programmation

L'assembleur : Langage du processeur. 1954 : FORTRAN : Le langage des mathmaticiens. 1960 : SIMULA : Le premier langage objet classe. 1963 : BASIC : Beginner's All-purpose Symbolic Instruction Code. 1972 : Le langage C : Programmation systme et gnraliste. 1972 : SMALLTALK : Le premier langage interprt objet pur. 1980 : C++ : Le C objet. 1994 : EIFFEL : L'apoge des langages objet classes. 1995 : JAVA : Le langage objet populaire pour Internet. 2002 : LISAAC : Le premier langage prototype compil.

Approche fonctionnelle vs. approche objet


Exemple de dcoupe fonctionnelle d'un logiciel ddi la gestion d'une bibliothque main

maintenir_fonds

donne

grer_prts

lister

modier

mouveau_prt

mettre__jour

ajouter

supprimer

Approche fonctionnelle vs. approche objet


Bibliothque Mdiathque main Modification

maintenir_fonds

donne

grer_prts

lister

modier

mouveau_prt

mettre__jour

ajouter

supprimer

Approche fonctionnelle vs. approche objet

une entit autonome, qui regroupe un ensemble de proprits cohrentes et de traitements associs. Une telle entit s'appelle... un objet !
Approche fonctionnelle : Dirig par les traitements Approche objet : Dirig par le type des donnes

Approche fonctionnelle vs. approche objet


Fonctionnelle
void mettre_a_jour(int ref) { /* ... */ switch (DOC[ref].type) { case LIVRE: maj_livre(DOC[ref]); break; case CASSETTE_VIDEO: maj_k7(DOC[ref]); break; case CD_ROM: maj_cd(DOC[ref]); break; } /* ... */ }

Objet
void mettre_a_jour(int ref) { /* ... */ DOC[ref].maj(); /* ... */ }

Classes et objets
Voiture marque couleur immatriculation dmarrer conduire arrter
regroupement de donnes et de traitements dans une classe !

twingo : VOITURE marque : Renault couleur : Bleu immatriculation : 995 LK 75 Objet : Instance d'une classe.

Notion dobjet
Analogie avec le monde rel :
Un chien Qui sappelle Prosper Qui est de couleur blanche Qui a faim Qui va chercher la balle Qui aboie

Notion dobjet
Analogie avec le monde rel :
Un chien Qui sappelle Prosper Qui est de couleur blanche Qui a faim Qui va chercher la balle Qui aboie
Objet Proprit/tat

Comportement/ mthode

Classe dobjet
Classe : Reprsentation abstraite d'une catgorie (=type) d'objets.

CHIEN nom : couleur : affam : aboyer : chercher(Balle):

Instance dune classe : un objet


Objet : Reprsentation en mmoire d'une entit physique (appartenant une classe)

CHIEN: monChien nom : Prosper couleur : Blanc affam : Oui aboyer : chercher(Balle):

Communication inter-objets
point de liaison dynamique Dans A: B service service rsultat

A Service: Objet:

donne ou une mthode. donnes+ mthodes/fonctions

Communication inter-objets
Communication : Invocation de message en un point de liaison dynamique

monChien nom : Prosper moi monChien.aboyer() aboyer

Notion d'encapsulation
Masquer les dtails d'implmentation d'un objet, en dfinissant une interface. L'interface : vue externe d'un objet, elle dfinit les services accessibles (offerts) aux utilisateurs de l'objet.

L'encapsulation facilite l'volution d'une application car elle stabilise l'utilisation des objets : on peut modifier l'implmentation des attributs d'un objet sans modifier son interface. L'encapsulation garantit l'intgrit des donnes, car elle permet d'interdire l'accs direct aux attributs des objets (utilisation d'accesseurs).

Notion d'hritage
OBJECT CONTAINER BUCKET BOTTLE Dfinition gnral

COLA A B : A hrite de B

BEER

Dfinition spcifique

Notion d'hritage

Notion d'hritage
ANIMAUX nom : couleur : affam : seDplacer : CHIEN aboyer : chercher(Balle):

CHA T miauler :

Notion d'hritage
L'hritage est un mcanisme de transmission des proprits d'une classe (ses attributs et mthodes) vers une sous-classe. Une classe peut tre spcialise en d'autres classes, afin d'y ajouter des caractristiques spcifiques ou d'en adapter certaines (ici, on parle de redfinition) Plusieurs classes peuvent tre gnralises en une classe qui les factorise, afin de regrouper les caractristiques communes d'un ensemble de classes. La spcialisation et la gnralisation permettent de construire des hirarchies de classes. L'hritage peut tre simple ou multiple.

L'hritage vite la duplication et encourage la rutilisation.

Notion de polymorphisme

Notion de polymorphisme
Vehicule convoi[3] = { Train("TGV"), Voiture("twingo"), Bateau("Titanic") }; for (int i = 0; i < 3; i++) { convoi[i] . seDeplacer(); } point de liaison dynamique avec polymorphisme !

Notion de polymorphisme
Le polymorphisme reprsente la facult d'une mthode pouvoir s'appliquer des objets de classes diffrentes.

Le polymorphisme augmente la gnricit du code.

Mcanisme d'envoi de message

x.f(...);

Type dynamique

Slecteur

Mcanisme d'envoi de message

x.f(...);

X Type dynamique

f Slecteur

Mcanisme d'envoi de message

x.f(...);

X Type dynamique

f Slecteur

@ *(f)(x,...);

Notion d'Agrgation
Il s'agit d'une relation entre deux classes, spcifiant que les objets d'une classe sont des composants de l'autre classe. Une relation d'agrgation permet donc de dfinir des objets composs d'autres objets. L'agrgation permet d'assembler des objets de base, afin de construire des objets plus complexes.

Les briques fondamentales de l'objet :


Les classes : Reprsentation abstraite (un modle) d'une entit logique du systme. Composition de proprits (donnes) et de traitement sur ces proprits (fonctions) Les objets : Reprsentation concrte (physiquement en mmoire) d'une entit du systme. Instance d'une classes. L'hritage : Dfinition hirarchique des objets. Partage des proprits et des traitements. Les messages : Communication / consultation / modification entres les objets. Un message s'envoie toujours sur un objet prcis.

Le vocabulaire de l'objet :
Encapsulation : L'objet reste le matre absolu de ces proprits (Pas comme en Java). Interface indpendante de l'implantation (Pas comme en Java !!!!!). Agrgation : Dfinition par composition des objets. Liaison dynamique : Envoi d'un message sur un objet. Ce lien entre l'objet (type de l'objet) et le message invoqu s'appelle un point de liaison dynamique. Polymorphisme : Un envoi de message peut tre monomorphique (= le traitement reste identique/unique pour tous les types d'objet) ou polymorphique (= traitement diffrent selon le type l'objet receveur du message).

Les dfauts de l'objet :


1. L'approche objet est moins intuitive que l'approche fonctionnelle ! Quels moyens utiliser pour faciliter l'analyse objet ? Quels critres identifient une conception objet pertinente ? Comment comparer deux solutions de dcoupe objet d'un systme ? 2. L'application des concepts objets ncessite une grande rigueur ! Le vocabulaire est prcis (risques d'ambiguts, d'incomprhensions). Comment dcrire la structure objet d'un systme de manire pertinente ?

il nous faut un outil qui apporte une dimension mthodologique l'approche objet, afin de mieux matriser sa richesse et sa complexit.

Introduction UML
UML : langage de modlisation objet unifi. 1997: Unification de 3 modlisations objets : OMT, BOOCH'93, OOSE

UML, c'est : Une norme, Un langage de modlisation objet Un support de communication Un cadre mthodologique

Avant de programmer objet, il faut savoir modliser objet ! PENSER OBJET !


stop

Introduction UML

Introduction UML
Vues statiques du systme : diagrammes de cas d'utilisation diagrammes d'objets diagrammes de classes diagrammes de composants diagrammes de dploiement Vues dynamiques du systme : diagrammes de collaboration diagrammes de squence diagrammes d'tats-transitions diagrammes d'activits

Modliser les vues statiques d'un systme

Les lments structurels


La classe. L'interface. - : Priv, + : Public, # : Protg Fentre - o:Origine - t:Taille + Ouvrir() + Fermer() Correction <<interface>> + Saisi() + Moyenne() Correction

maClasse

Les lments structurels


La collaboration. Le cas d'utilisation.

Contrle de qualit

Passer une commande

Les lments structurels


Le composant. La classe active.

Commande.java

Fentre - o:Origine - t:Taille + Ouvrir() + Fermer()

Les lments structurels


Le nud.

Serveur

lment physique

Les lments comportementaux


Le message. L'tat.

affiche r

en attente

Les lments de regroupement

Rgles mtier

L'lment d'annotation

Un commentaire utile

Les relations de base


La dpendance L'association

0..1 Employeur

*
Employ

Les relations de base


La gnralisation / Hritage La ralisation / relation smantique

Les acteurs
Les acteurs Exemple de spcialisation d'un acteur

Acteur gnral <<acteur>> benoit

Benoit Acteur spcialis

diagrammes de cas d'utilisation

diagrammes de cas d'utilisation


Acteur : entit externe qui agit sur le systme (oprateur, autre systme...). L'acteur peut consulter ou modifier l'tat du systme. En rponse l'action d'un acteur, le systme fournit un service qui correspond son besoin. Les acteurs peuvent tre classs (hirarchiss). Use case : ensemble d'actions ralises par le systme, en rponse une action d'un acteur. Les uses cases peuvent tre structurs. Les uses cases peuvent tre organiss en paquetages (packages). L'ensemble des use cases dcrit les objectifs (le but) du systme

diagrammes de cas d'utilisation

diagrammes de cas d'utilisation

diagrammes de cas d'utilisation

diagrammes de cas d'utilisation

diagrammes de collaboration

diagrammes d'objets

diagrammes d'objets
Objets composites

diagrammes d'objets
Objets composites

diagrammes de classes

diagrammes de classes

diagrammes de classes

diagrammes de classes
Associations

Expression des cardinalits d'une relation en UML : n: n..m : *: n..* : exactement "n" (n, entier naturel > 0) exemples : "1", "7" de "n" "m" (entiers naturels ou variables, m > n) exemples : "0..1", "3..n", "1..31" plusieurs (quivalent "0..n" et "0..*") "n" ou plus (n, entier naturel ou variable) exemples : "0..*", "5..*"

diagrammes de classes
Association navigabilit restreinte Par dfaut, une association est navigable dans les deux sens. La rduction de la porte de l'association est souvent ralise en phase d'implmentation, mais peut aussi tre exprime dans un modle pour indiquer que les instances d'une classe ne "connaissent" pas les instances d'une autre.

diagrammes de classes

diagrammes de classes

diagrammes de classes

stop

diagrammes de composants
Les diagrammes de composants permettent de dcrire l'architecture physique et statique d'une application en terme de modules : fichiers sources, librairies, excutables, etc. Les dpendances entre composants permettent notamment d'identifier les contraintes de compilation et de mettre en vidence la rutilisation de composants. Le composants peuvent tre organiss en paquetages, qui dfinissent des sous-systmes. Les sous-systmes organisent la vue des composants (de ralisation) d'un systme. Ils permettent de grer la complexit, par encapsulation des dtails d'implmentation.

diagrammes de composants

diagrammes de composants

diagrammes de dploiement
Les diagrammes de dploiement montrent la disposition physique des matriels qui composent le systme et la rpartition des composants sur ces matriels. Les ressources matrielles sont reprsentes sous forme de noeuds. Les noeuds sont connects entre eux, l'aide d'un support de communication. La nature des lignes de communication et leurs caractristiques peuvent tre prcises. Les diagrammes de dploiement peuvent montrer des instances de noeuds (un matriel prcis), ou des classes de noeuds.

diagrammes de dploiement

Modliser les vues dynamiques d'un systme

diagrammes de squences

diagrammes de squences
message simple : Message dont on ne spcifie aucune caractristique d'envoi ou de rception particulire. message minut (timeout) : Bloque l'expditeur pendant un temps donn (qui peut tre spcifi dans une contrainte), en attendant la prise en compte du message par le rcepteur. L'expditeur est libr si la prise en compte n'a pas eu lieu pendant le dlai spcifi. message synchrone : Bloque l'expditeur jusqu' prise en compte du message par le destinataire. message asynchrone : N'interrompt pas l'excution de l'expditeur. Le message envoy peut tre pris en compte par le rcepteur tout moment ou ignor (jamais trait). message drobant : N'interrompt pas l'excution de l'expditeur et ne dclenche une opration chez le rcepteur que s'il s'est pralablement mis en attente de ce message.

diagrammes de squences

diagrammes d'tats-transitions
Dbut du scnario

Fin du scnario

un tat

vnement

un autre tat

Transition

tat

[cond. x] Conditionnelle

[else]

diagrammes d'tats-transitions
Souche Sparation de paralllisme

Super-tat

Barre de synchronisation C

B A C Barre d'excution parallle B

diagrammes d'tats-transitions

diagrammes d'tats-transitions

diagrammes d'tats-transitions

diagrammes d'activits

C'est une variante des diagrammes d'tats-transitions avec une mise en avant des activits plutt que des tats dans l'automate fini.

diagrammes d'activits

diagrammes d'activits

Reprsentation avec traves

diagrammes d'activits
Enseignant tudiant Jury

enseigner

tudie r

contrle

composer

value r Reprsentation avec traves

diagrammes d'activits
Action1

Envoi de signal

Action2

Objet 1

Attente de signal

Action3

diagrammes d'activits

Conclusion
Programmer objet ? Programmer en Java n'est pas "concevoir objet" ! Seule une analyse objet conduit une solution objet. Le langage de programmation est un moyen d'implmentation, il ne garantit pas le respect des concepts objet. UML n'est qu'un support de communication ! objet : L'utilisation d'UML ne garantit pas le respect des concepts vous de vous en servir bon escient.

Conclusion
Utiliser UML ? Multipliez les vues sur vos modles ! Un diagramme n'offre qu'une vue trs partielle et prcise d'un modle. Croisez les vues complmentaires (dynamiques / statiques). Restez simple ! Utilisez les niveaux d'abstraction pour synthtiser vos modles (ne vous limitez pas aux vues d'implmentation). Ne surchargez pas vos diagrammes. Commentez vos diagrammes (notes, texte...). Utilisez des outils appropris pour raliser vos modles !

Les outils
www.objecteering.com

http://pyut.sourceforge.net

http://argouml.tigris.org/

http://www.gentleware.com

Vous aimerez peut-être aussi