173
Introduction à l’Orienté Objet: Hugues Bersini CoDE-IRIDIA, ULB 2011 Introduction à l'OO - H. Bersini 1

Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Introduction à l’Orienté Objet:

Hugues Bersini CoDE-IRIDIA, ULB

2011 Introduction à l'OO - H. Bersini 1

Page 2: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Plan

•  Intro à l’Orienté Objet

•  Intro à l’UML

•  Réutilisation : Modularité, Flexibilité, Design Patterns

2011 Introduction à l'OO - H. Bersini 2

Page 3: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Concepts de programmation considérés connus

•  Variables •  Expressions •  Instructions / Assignation •  Pointeurs / Références / Adresses •  Fonctions / Procédures •  Structures de contrôle : tests, boucles

2011 Introduction à l'OO - H. Bersini 3

Page 4: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Introduction à l’OO

Concepts de base

2011 Introduction à l'OO - H. Bersini 4

Page 5: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Les raisons du succès de l’OO

•  Les langages: tout commence avec les langages: simula, smalltalk,eiffel,C++,delphi,java,C#,Python –  Aussi vieux que l’approche procédurale ou l’approche IA

•  La modélisation: un nouveau standard UML, l’outil d’analyse qui transforme programmation en modélisation

•  Les applications distribuées sur le Net. Une extension

facilitée par rapport aux applications locales: RMI, CORBA, DCOM, Jini, JXTA, .Net

2011 Introduction à l'OO - H. Bersini 5

Page 6: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

De la programmation fonctionnelle à la POO Introduction à la POO

•  Les éléments clefs sont les classes et les objets. Toute application est éclatée entre les différentes classes intervenant dans le problème.

•  La classe est le type de l’objet, l’objet est l’instance physiquement réalisée de la classe, qui n’a d’existence que pendant l’exécution du programme.

•  Classe: CompteEnBanque - Objet : Compte_210_024.... : Vélo - : Le préféré de Merckx

•  Un POO est une société de classes qui collaborent entre elles en se chargeant mutuellement de certaines tâches. Elles s’échangent des messages. Seuls ces échanges entre classes peuvent avoir lieu

le programme ne se réduit qu’à cela.

2011 Introduction à l'OO - H. Bersini 6

Page 7: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Classes et Objets

•  Une classe peut être vue comme un nouveau type de donnée, un modèle, qui possède : –  ses propres variables (attributs) –  son propre comportement (méthodes ou fonctions

de classe). •  Par exemple : une personne, un vélo, …

•  Un objet est une instance d’une classe qui a une existence propre.

•  Par exemple : la personne Jean Dupont, le vélo vert de Frédéric, …

2011 Introduction à l'OO - H. Bersini 7

Page 8: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Le trio <entité, attribut, valeur>

•  Un objet = une entité = un ensemble d’attributs avec leur valeur

•  Les objets sont stockés en mémoire et référés •  Les attributs sont de type primitif: réel, entier,

booléens,… •  Cela ressemble à des enregistrements dans des

bases de données relationnelles •  Regardez dans la rue ….

2011 Introduction à l'OO - H. Bersini 8

Page 9: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

2011 9 Introduction à l'OO - H. Bersini

Page 10: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

2011 10 Introduction à l'OO - H. Bersini

Page 11: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Table d’une base de données relationnelles

2011 Introduction à l'OO - H. Bersini 11

Page 12: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Le référent d’un objet

•  C’est le nom et son moyen d’accès: son adresse physique

•  Plusieurs référents peuvent référer un même objet: adressage indirect

2011 Introduction à l'OO - H. Bersini 12

Page 13: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

2011 Introduction à l'OO - H. Bersini 13

Page 14: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

L’objet dans sa version passive

•  L’objet et ses constituants: –  L’objet = un ensemble d’attributs/valeurs

•  L’objet peut être un composite d’objets

2011 Introduction à l'OO - H. Bersini 14

Page 15: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

2011 Introduction à l'OO - H. Bersini 15

Page 16: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

L’objet dans sa version active

•  Les objets changent d’état •  Le cycle de vie d’un objet se limite à une

succession de changements d’états jusqu’à disparaître de la RAM

•  Mais qui est la cause des changement d’états ? –  LES METHODES

•  Soit l’objet feu de signalisation avec sa couleur et ses trois valeurs

2011 Introduction à l'OO - H. Bersini 16

Page 17: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

2011 Introduction à l'OO - H. Bersini 17

Page 18: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Mais comment relier l’opération « change » à l’attribut couleur ??

2011 Introduction à l'OO - H. Bersini 18

Page 19: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

LA CLASSE

2011 Introduction à l'OO - H. Bersini 19

Page 20: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

La classe

•  La classe unit les méthodes aux attributs: class Feu-de-signalisation { int couleur ;

change() {

couleur = couleur + 1 ; if (couleur ==4) couleur = 1 ;

} }

2011 Introduction à l'OO - H. Bersini 20

Page 21: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Sur quel objet précis s’exerce la méthode

feu-de-signalisation-en-question.change()

On lie la méthode f(x) à l’objet « a » par l’instruction: a.f(x)

2011 Introduction à l'OO - H. Bersini 21

Page 22: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

méthodes

ouvre()

Les objets ne diffèrent que par leurs attributs

•  Différentes instances de la même classe –  contiennent des attributs

au valeur différente –  partagent un même

comportement

Compte

numero solde

Class

S109 $250

Instances

B147 $909

S119 $400

B129 $3260

ferme() retire() dépose()

2011 Introduction à l'OO - H. Bersini 22

Page 23: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

2011 Introduction à l'OO - H. Bersini 23

Page 24: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Des objets en interaction

•  La base de l’ informatique OO: communication entre les objets

•  Supposons que le feu fasse ralentir ou accélérer la voiture

2011 Introduction à l'OO - H. Bersini 24

Page 25: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

2011 Introduction à l'OO - H. Bersini 25

Page 26: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

•  Les objets communiquent par envois de messages

•  Quand un objet demande à un autre d’exécuter une méthode qui est propre à cet autre.

2011 Introduction à l'OO - H. Bersini 26

Page 27: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

class Feu-de-signalisation { int couleur ; Voiture voitureDevant; change() { couleur = couleur + 1 ; if (couleur ==4) couleur = 1 ; if (couleur ==1) voitureDevant.changeVitesse(50) ;

} }

2011 Introduction à l'OO - H. Bersini 27

Page 28: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

UML envoi de message

2011 Introduction à l'OO - H. Bersini 28

Page 29: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Appel de méthode à distance = “envoi de message”

•  Les objets collaborent en s’envoyant des messages

•  On parle d’envoi de message car il y a expéditeur et destinataire

dépot

retire ouvre

ferme

S115 $325

dépot $50

Le compte objet destinataire

Le client objet expéditeur

“dépot réussi”

2011 Introduction à l'OO - H. Bersini 29

Page 30: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Un objet sans classe n’a pas de classe

•  Constitution d’une classe d’objet

FeuDeSignalisation

-­‐couleur:int-­‐position:int-­‐hauteur:double

+change:int+clignote:void

Le  nom  de  la  classe

Les  attributs  de  la  classe

Les  méthodes  de  la  classe

2011 Introduction à l'OO - H. Bersini 30

Page 31: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Définition d’une méthode

int change() { couleur = couleur + 1 ; if couleur == 4 couleur = 1;

return couleur ; /* la méthode retourne un entier */

}

2011 Introduction à l'OO - H. Bersini 31

Page 32: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Signature et surcharge de méthodes

class FeuDeSignalisation { void clignote() { System.out.println("premiere manière de

clignoter"); for(int i=0; i<2; i++) { for (int j=0; j<3; j++) System.out.println("je suis eteint"); for (int j=0; j<3; j++) System.out.println("je suis allume"); } }

2011 Introduction à l'OO - H. Bersini 32

Page 33: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

void clignote(int a) { System.out.println("deuxieme maniere de

clignoter"); /* Affichage de texte à l’écran */

for(int i=0; i<2; i++) {

for (int j=0; j<a; j++) /* on retrouve le “a” de l’argument */

System.out.println("je suis eteint"); for (int j=0; j<a; j++) System.out.println("je suis allume");

}

}

2011 Introduction à l'OO - H. Bersini 33

Page 34: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

int clignote(int a, int b) { System.out.println("troisieme maniere de

clignoter"); for(int i=0; i<2; i++) { for (int j=0; j<a; j++) System.out.println("je suis eteint"); for (int j=0; j<b; j++) System.out.println("je suis allume"); } return b; }

2011 Introduction à l'OO - H. Bersini 34

Page 35: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Le constructeur

<<constructor>>

<<constructor>>

FeuDeSignalisation

-­‐couleur:int-­‐position:int-­‐hauteur:double

<<constructor>>+FeuDeSignalisation<<constructor>>+FeuDeSignalisation+change:int+clignote:void+clignote:void

Les  méthodes  de  la  classe

Le  nom  de  la  classe

Les  attributs  de  la  classe

2011 Introduction à l'OO - H. Bersini 35

Page 36: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

FeuDeSignalisation(int positionInit, double hauteurInit) {

/* pas de retour pour le constructeur */ position = positionInit ;

hauteur = hauteurInit ;

couleur = 1 ;

}

FeuDeSignalisation unNouveauFeu = new

FeuDeSignalisation(1, 3) ;

2011 Introduction à l'OO - H. Bersini 36

Page 37: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

2011 Introduction à l'OO - H. Bersini 37

Page 38: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Objets et références

•  Les objets sont toujours utilisés par références. •  Une instance = un new.

http://java.sun.com/docs/books/tutorial/java/javaOO/objectcreation.html

Point originOne = new Point(23, 94); Rectangle rectOne = new Rectangle(originOne, 100, 200);

2011 Introduction à l'OO - H. Bersini 38

Page 39: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

•  La classe vérifie que l’on ne fait avec les objets que ce qu’elle autorise

•  Les langages OO sont fortement typés. •  Classe et compilateur font bon ménage •  Des attributs et des méthodes peuvent être

de classe: On dit alors qu’ils sont statiques

2011 Introduction à l'OO - H. Bersini 39

Page 40: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Attributs et méthodes statiques

•  Un attribut ou une méthode statique se réfère à une classe et non à une instance particulière.

•  Exemples : –  Math.PI : pas besoin d’instancier un objet de type Math –  Math.max(int i, int j) –  static void main(…) : méthode dans laquelle on va

créer les premiers objets.

2011 Introduction à l'OO - H. Bersini 40

Page 41: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

2011 Introduction à l'OO - H. Bersini 41

Page 42: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Rappels

•  Classe •  Objet •  Référent •  Attributs •  Méthodes •  Messages •  Signature et surcharge •  Constructeur et new

2011 Introduction à l'OO - H. Bersini 42

Page 43: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Classe = mécanisme de modularisation

•  Classes = fichiers •  Assemblages = répertoires •  La classe = le type et le module à la fois.

2011 Introduction à l'OO - H. Bersini 43

Page 44: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Comparaison procédural / OO

2011 Introduction à l'OO - H. Bersini 44

Page 45: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Du procédural à l’OO

2011 Introduction à l'OO - H. Bersini 45

Page 46: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Conception procédurale

2011 Introduction à l'OO - H. Bersini 46

Page 47: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Problème de la programmation procédurale

–  Accès sans restriction

•  Plusieurs modules fonctionnels auront accès aux mêmes données créant une grande sensibilité aux changements

Global Data char[] numero de compte float solde

Local Data

retrait()

Function 1

Local Data

dépot()

Function 2

Local Data

toute fonction()

Function 3

2011 Introduction à l'OO - H. Bersini 47

Page 48: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Conception OO

2011 Introduction à l'OO - H. Bersini 48

Page 49: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Envoi de messages et diagramme UML de séquence

2011 Introduction à l'OO - H. Bersini 49

Page 50: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Les objets parlent aux objets

Object1

o1ClassO1

o2ClassO2

1:  jeTravaillePourO1():void1.1:  jeTravaillePourO2():void

2011 Introduction à l'OO - H. Bersini 50

Page 51: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

O2

+jeTravaillePourO2:void

O1

+jeTravaillePourO1:void

class O1 { O2 lienO2 ; /*la classe O2 type un attribut de la classe O1 */ void jeTravaillePourO1() { lienO2.jeTravaillePourO2() ; } }

2011 Introduction à l'OO - H. Bersini 51

Page 52: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

o1

o2

2011 Introduction à l'OO - H. Bersini 52

Page 53: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Réaction en chaîne

o3o2o1

Object1

o4

1:  'jeTravaillePourO1():void'1.1:  'jeTravai llePourO2():void ' 1.1.1: 1.1.1.1:

2011 Introduction à l'OO - H. Bersini 53

Page 54: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Encapsulation

2011 Introduction à l'OO - H. Bersini 54

Page 55: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Encapsulation

•  L’encapsulation est un concept OO qui consiste à protéger l’information contenue dans un objet.

•  Les attributs et méthodes peuvent être : –  public : accessibles de partout (intérieur, extérieur) –  private : accessibles seulement à l’intérieur de la classe –  D’autres niveaux de protection plus poussés existent.

•  Une classe doit être le vigile de l’intégrité de ses objets. Pour ce faire, on va généralement déclarer tous ses attributs en private et gérer leur intégrité via des accesseurs. Attention, il ne faut faire des accesseurs que si c’est nécessaire.

2011 Introduction à l'OO - H. Bersini 55

Page 56: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Encapsulation : Accesseurs

•  Un accesseur est une méthode pour accéder, en lecture ou en écriture aux attributs d’une classe.

•  Un accesseur en lecture renverra l’attribut. •  Un accesseur en écriture est généralement void, prend

un paramètre et modifie l’attribut, après avoir vérifié que cette modification ne portait pas atteinte à l’intégrité de l’objet.

•  Exemple :

public double getSalary(){ return salary; } public void setSalary(double salary){ if(salary >= 0) this.salary = salary; } 2011 Introduction à l'OO - H. Bersini 56

Page 57: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Encapsulation

•  Attributs et méthodes private ou public •  Private = accès restreint à la seule classe •  Public = accès permis à toutes les classes •  Attributs private: préserver l’intégrité des

objets et cloisonner le traitement

2011 Introduction à l'OO - H. Bersini 57

Page 58: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

class Feu-de-signalisation {

private int couleur; private Voiture voitureDevant;

public void changeCouleur(int nouvelleCouleur) {

if (nouvelleCouleur >= 1) && (nouvelleCouleur <=3) /* intégrité assurée */

couleur = nouvelleCouleur ; }

}

2011 Introduction à l'OO - H. Bersini 58

Page 59: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

class Voiture {

private int vitesse ;

public int changeVitesse(int nouvelleVitesse) {

if (nouvelleVitesse >= 0) && (nouvelleVitesse <=130) /* intégrité assurée */

vitesse = nouvelleVitesse ;

return vitesse ;

}

}

2011 Introduction à l'OO - H. Bersini 59

Page 60: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

class Acheteur { private Voiture voitureInteressante ; public int négociePrix() { int prixPropose = 0 ; if (voitureInteressante.dateFabrication <

19970101) /* accès possible à l’attribut date */

prixPropose = voitureInteressante.getPrixDeBase() – 10000;

} }

2011 Introduction à l'OO - H. Bersini 60

Page 61: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Encapsulation des méthodes

•  Stabilisation des développements •  Dépendances à l’exécution mais

indépendance au développement •  Interface et implémentation •  Signature d’une classe = son interface =

liste des signatures des méthodes disponibles

•  Carte de visite de l’objet

2011 Introduction à l'OO - H. Bersini 61

Page 62: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

implémentation

interface

public

private

2011 Introduction à l'OO - H. Bersini 62

Page 63: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Il faut forcer l’encapsulation

•  Les objets restreignent leur accès qu’aux méthodes de leur classe –  Ils protègent leurs attributs

•  Cela vous permet d’avoir un contrôle sur tous les accès.

•  Cela permet de stabiliser les développements

numéro de compte; solde;

retrait() dépot()

Client

X

2011 Introduction à l'OO - H. Bersini 63

Page 64: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

•  Garder tous les détails de l’implémentation privés, y compris certaines méthodes

•  D’où le recours aux interfaces qui ne reprennent que la partie publique

private numéro; private solde;

public dépose()

Client

public retire()

private soustrait() private

ajoute()

2011 Introduction à l'OO - H. Bersini 64

Page 65: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

interfaceInterfaceO1

+jeTravaillePourO1:void+jeTravailleAussiPourO1:void

O1

+jeTravaillePourO1:void+jeTravailleAussiPourO1:void-­‐jeTravailleEnSecretPourO1:void-­‐jeTravailleAus siEnSecretPourO1:void

2011 Introduction à l'OO - H. Bersini 65

Page 66: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

L’héritage

2011 Introduction à l'OO - H. Bersini 66

Page 67: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Héritage

•  L’héritage est un concept OO qui consiste à spécialiser des classes en réutilisant les attributs et le comportement d’une autre classe.

•  Vocabulaire : Une classe (sous-classe, classe fille, classe dérivée) peut être dérivée d’une autre classe (super-classe, classe mère).

•  L’héritage est un des concept principal de l’OO : réutiliser du code.

2011 Introduction à l'OO - H. Bersini 67

Page 68: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Héritage

•  La classe B hérite de la classe A. C’est-à-dire que B est une spécialisation de la classe A.

•  La classe B hérite des méthodes et propriétés de la classe A.

•  On peut y ajouter des propriétés et méthodes et redéfinir des méthodes.

•  Ex : Voiture : Véhicule Moto : Véhicule –  Méthode nombreDeRoues() dans Véhicule.

2011 Introduction à l'OO - H. Bersini 68

Page 69: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

L’héritage

•  Regrouper les classes en super-classes en factorisant et spécialisant

•  Dans l’écosystème: La classe Faune regroupe les animaux.

•  La classe Ressource regroupe l’eau et la plante

•  La sous-classe hérite des attributs et méthodes et peut en rajouter de nouveau

2011 Introduction à l'OO - H. Bersini 69

Page 70: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

•  Super classe –  reprend les attributs et les

méthodes communes aux sous classes

•  Sous classe –  héritent de tout ce qui constitue

la super classe –  peut ajouter de nouveaux

attributs –  peut ajouter ou redéfinir des

méthodes

Super classes et Sous classes Véhicule

Voiture

détailsDumoteur() rouler()

No d’enregistrement. consommation

Truck

nbrePlaces capacité

détailPassager() détailSécurité()

2011 Introduction à l'OO - H. Bersini 70

Page 71: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Spécialisation

Héritage à plusieurs étages

•  Une super classe peut à son tour devenir une sous classe …

•  La profondeur est parfois critiquée parfois plébisicitée…

Véhicule

Voiture

Camion

Bus Touristique

Bus Scolaire

Voiture De Course

Véhicule léger

Véhicule lourd

Bus

Généralisation

2011 Introduction à l'OO - H. Bersini 71

Page 72: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

•  L’addition des propriétés permet l’application du principe de subsitution et de l’inteprétation ensembliste:

Sous-classe

Super-classe

2011 Introduction à l'OO - H. Bersini 72

Page 73: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

0. .*

0. .*

0. .*

Predateur

-­‐lesProies:Proie []

Predateur+repere:void+ressourceToi: void

Vision

-­‐posDepart:Point+posFina l:Point-­‐longueur:int-­‐angleVision:double

Vision+deplaceToi:void+inverse :void+tourneToi:void+dessineToi:void+voisJe:boolean+suisObjet: void

Ressource

-­‐temps:int-­‐quantite:int

Ressource+dessineToi:void+evolue:void+incrementeTemps:void+getTemps:int+diminueQuantite:void

Eau

Eau+dessineToi:void+evolue:void

Plante

-­‐monLook: Image

Plante+dessineToi:void+evolue:void

Faune

-­‐monLook: Image-­‐vitX:int-­‐vitY:int-­‐maVision:Vision-­‐energie:double-­‐lesRessources:Ressource[]-­‐repere:boolean

Faune+getVitX:int+getVitY :int+setVitesse:void+inverseVitesse:void+getEnergie:double+setEnergie:void+getMaVision:Vision+getMonLook:Image+dessineToi:void+deplaceToi:void+deplaceToi:void+repere:void+bois:void+repereObjetJungle:boolean+ressourceToi:void+getRepere:boolean+setRepere:void+getLesRessources:Ressource[]+tourneLaTete :void

Proie

-­‐lesPredateurs:Predateur[]-­‐vivant:boolean

Proie+suisJeVivante:boolean+dessineToi:void+estTuee:void+setLesPredateurs:void+ressourceToi: void+mangePlante:void+repere:void

2011 Introduction à l'OO - H. Bersini 73

Page 74: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

L’héritage des méthodes:

O2

+jeTravail lePourO2:void

FilleO2

+jeTravail lePourLaFilleO2:void

O1

+jeTravail lePourO1:void+jeTravail leAussiPourO1:void+jeTravail leAussiPourO1:void

2011 Introduction à l'OO - H. Bersini 74

Page 75: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

La recherche des méthodes

2011 Introduction à l'OO - H. Bersini 75

Page 76: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

La problématique du multihéritage

2011 Introduction à l'OO - H. Bersini 76

Page 77: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Héritage multiple

•  Transforme l’arbre d’héritage en un graphe

•  Crée de nouveaux problèmes dûs au partage des super classes

•  Mieux vaut l’éviter de toute manière

Figure

Dimension Forme

Polygone

Circulaire

3D

2D

Cube Sphère

Cercle

Rectangle

2011 Introduction à l'OO - H. Bersini 77

Page 78: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

2011 Introduction à l'OO - H. Bersini 78

Page 79: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Polymorphisme

•  Le polymorphisme est un concept OO dont l’idée est d'autoriser le même code à être utilisé avec différents types, ce qui permet des implémentations plus abstraites et générales.

2011 Introduction à l'OO - H. Bersini 79

Page 80: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Polymorphisme

•  Basé sur la redéfinition des méthodes •  Permet à une tierce classe de traiter un

ensemble de classes sans connaître leur nature ultime.

•  Permet de factoriser des dénominations d’activité mais pas les activités elles-mêmes.

2011 Introduction à l'OO - H. Bersini 80

Page 81: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

2011 Introduction à l'OO - H. Bersini 81

Page 82: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

•  Une méthode d’appellation constante peut être redéfinie de multiples fois à différents niveaux de la hiérarchie

•  Cela permet à une tierce classe de ne pas à connaître les détails d’implémentation de la méthode

Animal

Mammifère

Vache Humain

mange()

Reptile

mange() mange()

mange() mange() Lézard Serpent

mange() mange()

2011 Introduction à l'OO - H. Bersini 82

Page 83: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Un match de foot polymorphique:

2011 Introduction à l'OO - H. Bersini 83

Page 84: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

2011 Introduction à l'OO - H. Bersini 84

Page 85: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Polymorphisme: Facilite l’extension

•  Les programmes peuvent aisément être étendus –  De nouvelles sous classes

peuvent s’ajouter sans rien modifier à l’existant

Figure

dessine()

Rectangle

dessine()

Triangle

dessine()

Hexagone

dessine()

Rajoût d’une nouvelle sous classe

2011 Introduction à l'OO - H. Bersini 85

Page 86: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Construction d’objet

public class A { public A(){ … } } public class B extends A { public B(){ … } } public class C extends B { public C(){ … } }

Lors de la construction d’un objet de la classe C : •  le constructeur de C commence par appeler le construteur de B •  le constructeur de B commence par appeler le constructeur de A •  le constructeur de A appelle le constructeur d’Object •  le constructeur d’Object s’exécute •  le constructeur de A se termine •  le constructeur de B se termine •  le constructeur de C se termine

2011 Introduction à l'OO - H. Bersini 86

Page 87: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Classes abstraites et interfaces

2011 Introduction à l'OO - H. Bersini 87

Page 88: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Classes abstraites •  Une classe abstraite ne peut être instanciée mais peut être sous-classée.

Elle peut contenir ou non des méthodes abstraites. •  Uné méthode abstraite est une méthode déclarée mais non

implémentée. •  Si une classe inclut des méthodes abstraites elle doit être abstraite. •  Une classe qui hérite d’une classe abstraite doit implémenter toutes les

méthodes abstraites de la classe parente. Sinon elle doit être déclarée abstraite.

2011 Introduction à l'OO - H. Bersini 88

public abstract class AnAbstractClass{ private int aFied; ... public void doSomething(){ ... } public abstract void doAnotherThing(); }

Page 89: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Classe abstraite

•  Classe avec une ou des méthodes abstraites

•  Classe sans objet •  Toutes les super classes devraient l’être •  Une interface est une classe abstraite dont

toutes les méthodes le sont

2011 Introduction à l'OO - H. Bersini 89

Page 90: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

2011 Introduction à l'OO - H. Bersini 90

Page 91: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Les trois raisons d’être des interfaces

•  Forcer la redéfinition •  Permettre le multihéritage •  Jouer la carte de visite de l’objet

2011 Introduction à l'OO - H. Bersini 91

Page 92: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Les interfaces

2011 Introduction à l'OO - H. Bersini 92

Page 93: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Associations entre objets

2011 Introduction à l'OO - H. Bersini 93

Page 94: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Association, composition, agrégation

•  Une association est une relation sémantique entre des classes qui définit un ensemble de liens. •  Un homme est associé à sa femme

•  Une agrégation est une association dans laquelle il y a un lien d’appartenance entre les deux objets associés (contenant/contenu, possession, …). –  Un homme possède un compte en banque

•  Une composition (ou agrégation forte) est une agrégation dans laquelle la disparition du composite entraine la disparition des composants. –  Si un arbre meurt, ses feuilles ne servent plus à rien (on ne peut pas les

mettre sur un autre arbre, au contraire de roues sur une voiture)

•  Il s’agit surtout d’une différence sémantique qui impliquera des changements dans votre implémentation au niveau du cycle de vie des objets.

2011 Introduction à l'OO - H. Bersini 94

Page 95: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Association, composition, agrégation Association : Une personne travaille pour une et une seule compagnie

Agrégation : Une personne possède entre 0 et n comptes

Composition : Une personne a un et un seul cerveau

•  Cardinalités : –  *, n, m..*, où n>0 et m>=0 –  Par défaut, la cardinalité est un. –  Dans une composition, la cardinalité du côté de l’agrégat ne peut être que 1

ou 0..1

•  Le nom de l’association est facultatif

2011 Introduction à l'OO - H. Bersini 95

Page 96: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

De la programmation fonctionnelle à la programmation

OO

2011 Introduction à l'OO - H. Bersini 96

Page 97: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

De la programmation fonctionnelle à la programmation OO

•  il faut casser le problème en ses différents modules •  on passe d’une vision centralisée à une vision plus décentralisée de

la programmation •  on ne gère plus le programme, on délègue les classes qui se

délèguent elles-mêmes •  ne pas se préoccuper de ce que l’on fait avec les structures de

données mais plutôt se demander ce que ces structures de données peuvent faire pour vous.

•  dans la programmation fonctionnelle, on définit d’abord les données puis on crée une décomposition hiérarchique fonctionnelle. On est contraint de penser le programme de manière hiérarchique, de manière centralisée (toutes les fonctions peuvent agir sur toutes les données) et de manière temporelle

2011 Introduction à l'OO - H. Bersini 97

Page 98: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

De la programmation fonctionnelle à la programmation OO (suite)

•  dans la programmation OO, il n’y a pas vraiment de sommet ni de chronologie stricte, les données et les fonctions sont éclatées.

•  on se préoccupe beaucoup moins de l’aspect temporel, on lie les classes par des contraintes logiques et non plus temporelles. On ne fait pas d’ordonnancement prématuré. Par ex., l’achat d’une maison est conditionné par l’obtention d’un prêt et la découverte d’une maison mais on n’ordonne pas entre elles les différentes opérations.

•  on essaie de coller au mieux au problème au point que la programmation se transforme en modélisation

•  le programme se pense de manière ascendante et non plus descendante

•  les relations explicites entre les classes peuvent restées simples même si l’exécution computationnelle qui en découle peut s’avérer complexe. 2011 Introduction à l'OO - H. Bersini 98

Page 99: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Les avantages de la programmation OO

•  les programmes sont plus stables, plus robustes et plus faciles à maintenir car le couplage est faible entre les classes («encapsulation»)

•  elle facilite grandement le ré-emploi des programmes: par petite adaptation, par agrégation ou par héritage.

•  émergence des «design patterns» •  il est plus facile de travailler de manière itérée et évolutive car les

programmes sont facilement extensibles. On peut donc graduellement réduire le risque plutôt que de laisser la seule évaluation pour la fin.

•  l’OO permet de faire une bonne analyse du problème suffisamment détachée de l’étape d’écriture du code - on peut travailler de manière très abstraite UML

•  l’OO colle beaucoup mieux à notre façon de percevoir et de découper le monde

2011 Introduction à l'OO - H. Bersini 99

Page 100: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Les avantages de l’OO (suite)

•  Tous ces avantages de l’OO se font de plus en plus évident avec le grossissement des projets informatiques et la multiplication des acteurs. Des aspects tels l’encapsulation, l’héritage ou le polymorphisme prennent vraiment tout leur sens. On appréhende mieux les bénéfices de langage plus stable, plus facilement extensible et plus facilement ré-employable.

•  JAVA est un langage strictement OO qui a été propulsé sur la scène par sa complémentarité avec Internet mais cette même complémentarité (avec ce réseau complètement ouvert) rend encore

plus précieux les aspects de stabilité et de sécurité.

2011 Introduction à l'OO - H. Bersini 100

Page 101: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Les avantages en programmation

•  Programmation = modélisation •  Stabilisation •  Récupération •  Modularisation •  Programmation évolutive

2011 Introduction à l'OO - H. Bersini 101

Page 102: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Les avantages en modélisation

•  Idée de délégation entre classes •  Se demander comment les classes

collaborent afin de vous servir •  L’héritage est un mécanisme cognitif

(inventé par Minsky en IA) •  Modélisation <-> programmation

2011 Introduction à l'OO - H. Bersini 102

Page 103: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Introduction à l’UML

2011 Introduction à l'OO - H. Bersini 103

Page 104: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Introduction à UML

•  UML (Unified Modeling Language) •  La fusion des travaux de G. Booch, J. Rumbaught et I.

Jacobson - dans le prolongement d ’OMT. •  Les trois acteurs se rassemblent en 1995 en vue de

standardiser l ’OO par UML. •  Développement de la société Rational, développement de

l ’environnement Rational Rose dès 1995 •  L ’OMG a imposé UML comme un standard en septembre

97, supporté par les principaux acteurs de l ’informatique: Microsoft, Oracle, HP, Texas, ...

•  Actuellement, version UML 2

2011 Introduction à l'OO - H. Bersini 104

Page 105: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Introduction à UML (suite)

•  UML est un langage objet graphique - un formalisme orienté objet, basé sur des diagrammes (13)

•  UML permet de s ’abstraire du code par une représentation des interactions statiques et du déroulement dynamique de l ’application.

•  UML prend en compte, le cahier de charge, l ’architecture statique, la dynamique et les aspects implémentation

•  Facilite l ’interaction, les gros projets. •  Générateur de squelette de code •  UML est un langage PAS une méthodologie, aucune

démarche n’est proposée juste une notation.

2011 Introduction à l'OO - H. Bersini 105

Page 106: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Architecture and the UML

Organization Package, subsystem

Dynamics Interaction State machine

Design View Implementation View

Process View

Components Classes, interfaces, collaborations

Active classes

Deployment View

Nodes

Use Case View Use cases

2011 Introduction à l'OO - H. Bersini 106

Page 107: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

UML-1: 9 diagrammes principaux

•  Les diagrammes des cas d ’utilisation: les fonctions du système, du point de vue de l ’utilisateur ou d ’un système extérieur - l ’usage que l ’on en fait.

•  Les diagrammes de classes: une description statique des relations entre les classes.

•  Les diagrammes d ’objet: une description statique des objets et de leurs relations. Une version « instanciée » du précédent.

•  Les diagrammes de séquence: un déroulement temporel des objets et de leurs interactions

•  Les diagrammes de collaboration: les objets et leurs interactions en termes d ’envois de message + prise en compte de la séquentialité

2011 Introduction à l'OO - H. Bersini 107

Page 108: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Les 9 diagrammes (suite)

•  Les diagrammes d ’états-transitions: scrute les cycles de vie d ’une classe d ’objet, la succession d ’états et les transitions.

•  Les diagrammes d ’activité: le comportement des différentes opérations en termes d ’actions.

•  Les diagrammes de composants: représente les composants physiques d ’une application.

•  Les diagrammes de déploiements: le déploiement des composants sur les dispositifs et les supports matériels.

•  Les diagrammes: de cas d ’utilisation, de classes, de collaboration, de séquences et d ’états- transitions.

2011 Introduction à l'OO - H. Bersini 108

Page 109: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Le diagramme des cas d’utilisation (use cases)

•  Cela répond aux spécifications du système. Ses fonctionnalités, son utilisation, les attentes de l ’utilisateur. Par. Ex: le mister Cash.

Le client

La Banque

Un employé

Effectuer

un virement

Retirer

de l ’argent

Consulter

un compte

Gérer le

distributeur

Effectuer la

maintenance

2011 Introduction à l'OO - H. Bersini 109

Page 110: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Diagrammes des cas d ’utilisation

SystèmeDeContrôleDAcces

Capteur AIncendie PorteurDeCarte

Entrer DébloquerLesPortes

GérerLesCartes Administrateur

ListerLes TentativesDeFraudes

Gardien

Sortir

2011 Introduction à l'OO - H. Bersini 110

Page 111: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Les cas d ’utilisation (suite)

•  L ’acteur délimite le système, il peut être humain, logiciel ou matériel. Il est l ’utilisateur du système. Les acteurs peuvent être nombreux.

•  Les cas d ’utilisation peuvent également se décrire comme des scénarios.

•  Le diagramme de ces cas indiquent les acteurs et les différents types d’utilisation.

•  Il faut donc indiquer l’acteur ainsi que l’utilisation qu’il fait du système.

•  En déroulant ces cas, faisant des scénarios plus précis, on arrive aux diagrammes de séquences.

2011 Introduction à l'OO - H. Bersini 111

Page 112: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Exemple de scénario Cas d ’utilisation détaillé

paul : Client le système

Insérer carte

Entrer code ‘1234 ’ 

Demander code

Message d ’erreur

Demander code

Entrer code ‘6622 ’ 

Vérifier carte

Vérifier code

... 2011 Introduction à l'OO - H. Bersini 112

Page 113: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Les diagrammes de classe

•  Un réseau de classes et d ’associations •  Les associations peuvent être quelconques:

mari et femme, employé et entreprise,… •  Ou plus classique: généralisation, aggrégation •  Mais d ’abord comment représente-t-on une classe en

UML ? Nom

Attributs

Méthodes

Rectangle

Longueur

Largeur

Surface

2011 Introduction à l'OO - H. Bersini 113

Page 114: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Les objets

objet1: class

attribut1 = valeur

2011 Introduction à l'OO - H. Bersini 114

Page 115: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Les diagrammes de classe (suite)

•  L ’association entre classes

•  Multiplicité des associations

Personne Société Travaille pour

Personne Société Employé

Employeur

0..1

0..*

2011 Introduction à l'OO - H. Bersini 115

Page 116: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

L’assocation

•  Il y a association entre classes quand il y a transmission de messages entre classes.

•  L’association peut être directionnelle:

{possibilité de contrainte}

<< possibilité de stéréotype>>

Envois de message

2011 Introduction à l'OO - H. Bersini 116

Page 117: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Les diagrammes de classe (suite)

•  Un type d ’association particulier: –  l ’aggrégation

•  L ’aggrégation: VOITURE moteur

Cylindre carburateur

1

1 1

1 n

aggrégation

Composition: l’existence

des parties est conditionnée

par l’existence du contenant.

En C++ cela permet de choisir

entre pointeur et value

2011 Introduction à l'OO - H. Bersini 117

Page 118: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Diagrammes de classes (suite)

Salarié

Chef

Subordonné

diriger 1

*

Element

Collection Element Simple

*

1

2011 Introduction à l'OO - H. Bersini 118

Page 119: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Diagrammes de classes

Client 1..4 0..* titulaires

Consortium

Compte

numéro solde ...

1..*

0..1

1

Banque

numéro nom

Distributeur 0..*

1

0..*

1..*

signataire 1

0..* CarteBleue

Code retraitMax

1..* AcceptéPar>

2011 Introduction à l'OO - H. Bersini 119

Page 120: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Exemple

époux

0..1 Personne épouse

0..1

père 0..1

parents 0..2

enfants *

paul épouse marie époux

joe

pére mère

mère 0..1

sexe enfants

parents

enfants parents

2011 Introduction à l'OO - H. Bersini 120

Page 121: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Composition

Point

x y

Polygone 3..* Cercle

rayon 1

2011 Introduction à l'OO - H. Bersini 121

Page 122: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Diagrammes de classe (suite)

•  Dans certains cas, l ’association peut elle-même devenir une classe.

Adhérent Exemplaire emprunter

Prêt

Date

durée

Prolonger

0..1 0..3

nom prénom

adresse

2011 Introduction à l'OO - H. Bersini 122

Page 123: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Classes associatives

Personne Société employé

* 0..2

il est utile d’associer des attributs et/ou des méthodes aux associations => classes associatives

Emploi salaire

augmenter()

Le nom de la classe correspond au nom de l’association

société

2011 Introduction à l'OO - H. Bersini 123

Page 124: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

2011 Introduction à l'OO - H. Bersini 124

Page 125: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

2011 Introduction à l'OO - H. Bersini 125

Page 126: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Diagrammes de séquence (suite)

Appelant Ligne

Téléphonique Appelé

Décroche

Tonalité

Numérotation

Indication de sonnerie Sonnerie

Décroche

Allô

2011 Introduction à l'OO - H. Bersini 126

Page 127: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Diagrammes de séquence

le compte de P. le distrib. la banque paul

retirer(500)

débiter(500)

la carte de P.

lireN°Compte()

la reserve

retirerDeLArgent(500,88219)

sortirDesBillets(5)

sortirBillets ()

2011 Introduction à l'OO - H. Bersini 127

Page 128: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Diagramme de séquence (suite) Quelques exemples

A B C

D Création

Destruction

2011 Introduction à l'OO - H. Bersini 128

Page 129: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

2011 Introduction à l'OO - H. Bersini 129

Page 130: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Presentation OO et UML pour Technofutur 3

130

Notations

Synchronous!

Asynchronous!

:réservation!Object!

Message send!

Ligne de vie!

Barre d’activation!

Return!

payer!(card number, amt)!

Page 131: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Presentation OO et UML pour Technofutur 3

131

Lignes de vie

Ligne de vie!

!:payerCarte!

deCrédit!:Reserver!

!

Page 132: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Presentation OO et UML pour Technofutur 3

132

Messages

return card validity!

validate credit card (card no.)!

!:payerCarte!

deCrédit!:réserver!

Page 133: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Presentation OO et UML pour Technofutur 3

133

validate credit card (card no.)!

return card validity!

Barre d’activation

Exlplicit Return!

!:payerCarte!

DeCrédit!:réserver!

initialize!

!:réserver!

Page 134: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Presentation OO et UML pour Technofutur 3

134

create (total fare)!

calculate amt to pay ( )!

Création et destruction d’objets

!:Payment!

Implicit Return!

:réserver!!

calculate fuel surcharge!

calculate airport service tax!

!:Payment!

:réserver!

create (total fare)!

calculate amt to pay ( )!

Page 135: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Effet de l’encapsulation

Presentation OO et UML pour Technofutur 3

135

Page 136: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Presentation OO et UML pour Technofutur 3

136

Liaison avec le code public class O1 { private int attribute1; private O2 lienO2; private O3 lienO3; public void jeTravaillePourO1(int a) { if (a > 0){ lienO2.jeTravaillePourO2(); } else{ lienO3.jeTravaillePourO3(a); } } } class O2 { private O3 lienO3; public void jeTravaillePourO2() { lienO3.jeTravaillePourO3(6); } }

class O3 { private O2 lienO2; public void jeTravaillePourO3(int a) { if (a > 0){

a--; jeTravaillePourO3(a); } else { lienO2.jeTravaillePourO2(); } } }

Page 137: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Presentation OO et UML pour Technofutur 3

137

Page 138: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Presentation OO et UML pour Technofutur 3

138

Nouvelle bouture UML2

o1 o2 o3 o4

loop

jeTravaillePourO1()

while i<100

alt if j > 20jeTravaillePourO2

[else]jeTravaillePourO3

optjeTravaillePourO4if j < 50

Page 139: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Presentation OO et UML pour Technofutur 3

139

opt! [card valid = true]!

card valid = validate credit card (card no.)!

IF!

transfer (toAcnt, amt)!

!:payerCarte!

deCrédit!:réserver!

Page 140: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Presentation OO et UML pour Technofutur 3

140

alt!

IF THEN ELSE!

send SMS (to text)!

!:SMSService!

[SMS Service available]!

!:EmailService!

[Email Service available]!

send SMS (from, to, subject, body)!

:réserver!

Page 141: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Presentation OO et UML pour Technofutur 3

141

loop!

:vol!

LOOP!

:places!

disponible (no. !de places, classe)!

get seat status (class)!

[more seats]!

Page 142: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

2011 Introduction à l'OO - H. Bersini 142

Page 143: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Presentation OO et UML pour Technofutur 3

143

Les diagrammes d ’états-transitions

•  Ce sont les diagrammes les plus parlant pour les aspects dynamiques du système

•  Similaire aux automates à états finis •  Ils ne concernent que le cycle de vie d ’une classe d ’objets. •  Il s ’agit de graphes dont les états sont les nœuds, les flèches sont les

transitions, portant des paramètres et des noms d ’évènements. Un événement cause une transition.

•  L ’état d ’un objet c ’est la valeur de ses attributs et la nature de ses relations avec les autres objets. C ’est une durée séparé par deux événements.

•  Un message est un événement impliqué dans l ’interaction de deux objets.

Page 144: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Presentation OO et UML pour Technofutur 3

144

Les diagrammes d ’états (suite) Classe: Personne

En activité

A la retraite

Au chômage

Plus de 60 ans

Plus de 60 ans

Perte d ’emplois

Embauche

État 1

État initial État 2

État final

Les états peuvent être imbriquès

Page 145: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Presentation OO et UML pour Technofutur 3

145

Le design pattern d’état en immunologie

Page 146: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Presentation OO et UML pour Technofutur 3

146

Les diagrammes d ’état (suite) État 1

-entry/action en entrant -do/activité pendant

- Événement 1/action en réponse -Événement 2/action en réponse

-exit/action en sortant

État 2

Événement (attributs) [gardien]/action

Au travail

En congé

Prendre congé (nombre de jours) [nombreRestant >nombre de jours]

Embauché

-entry/signer contrat -do/assurer fonction

-mutation/changer fonction -exit/rompre contrat

Page 147: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Presentation OO et UML pour Technofutur 3

147

Page 148: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Presentation OO et UML pour Technofutur 3

148

Page 149: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Génération de code (1)

2011 Introduction à l'OO - H. Bersini 149

Page 150: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Génération de code (2)

Presentation OO et UML pour Technofutur 3

150

Page 151: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Introduction aux Design Patterns

2011 Introduction à l'OO - H. Bersini 151

Page 152: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Bonnes pratiques OO

•  "Controlling complexity is the essence of computer programming."(Brian Kernighan)

•  Bonnes pratiques : –  Low Coupling (modifier une classe sans toucher aux autres) –  High Cohesion (idéalement, toutes les méthodes d’une classe

utilisent toutes ses donnes) –  Expert –  Don't talk to strangers –  Polymorphism

2011 Introduction à l'OO - H. Bersini 152

Page 153: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Patrons de conception

•  Concept de génie logiciel visant à résoudre des problèmes récurrents d’architecture et de conception logicielle suivant le paradigme objet.

•  Formalisation de bonnes pratiques. •  Capitalisation de l’expérience appliquéee à la conception logicielle.

•  Réduire les interactions entre les objets, diminuer le temps de développement –  à gagner des sous ;-)

•  Aussi appellé design pattern ou motif de conception

2011 153 Introduction à l'OO - H. Bersini

Page 154: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Patrons de conception

•  Formalisés en 1995 par le « Gang of Four » •  Trois grandes familles :

–  Patrons de construction : instancier et configurer des classes et des objets

–  Patrons structuraux : organiser les classes d’un programme en séparant l’interface de l’implémentation

–  Patrons comportementaux : organiser les objets pour que ceux-ci collaborent

2011 154 Introduction à l'OO - H. Bersini

Page 155: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

���Quelques patrons structuraux

Organiser les classes d’un programme en séparant l’interface de l’implémentation

2011 155 Introduction à l'OO - H. Bersini

Page 156: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Adapter

•  Convertir l'interface d'une classe en une autre interface que le client attend

2011 156 Introduction à l'OO - H. Bersini

Page 157: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Composite

•  Un objet composite est constitué d'un ou de plusieurs objets similaires (ayant des fonctionnalités similaires)

•  L'idée est de manipuler un groupe d'objets de la

même façon que s'il s'agissait d'un seul objet

•  Les objets regroupés doivent avoir des méthodes communes.

•  Souvent utilisé à l’aide du polymorphisme.

2011 157 Introduction à l'OO - H. Bersini

Page 158: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Composite

2011 158 Introduction à l'OO - H. Bersini

Page 159: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Facade •  B u t : c a c h e r u n e

c o n c e p t i o n e t u n e interface complexe difficile à comprendre

•  La façade permet de s i m p l i f i e r c e t t e complexité en fournissant une interface simple du sous-système.

2011 159 Introduction à l'OO - H. Bersini

Page 160: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

���Quelques patrons comportementaux

Organiser les objets pour que ceux-ci collaborent

2011 160 Introduction à l'OO - H. Bersini

Page 161: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Command •  Encapsuler une requête/commande comme un objet. •  Ex :

–  Annuler une commande

–  undo()

2011 161 Introduction à l'OO - H. Bersini

Page 162: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Command

2011 Introduction à l'OO - H. Bersini 162

Page 163: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Patron de conception Observer

2011 Introduction à l'OO - H. Bersini 163

Page 164: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Patron de conception Observer

•  Un observateur observe des observables. •  En cas de notification, les observateurs effectuent une

action en fonction des informations qui viennent des observables.

•  La notion d'observateur/observable permet de coupler des modules de façon à réduire les dépendances aux seuls phénomènes observés.

•  Notions d’événements (voir cours sur les événements)

2011 164 Introduction à l'OO - H. Bersini

Page 165: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Patron de conception Observer

2011 Introduction à l'OO - H. Bersini 165

Page 166: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Exemple : •  Le sujet concret est

un cours de bourse

•  L’observer concret et un Investisseur (Jean)

2011 Introduction à l'OO - H. Bersini 166

L’investisseur (ConcreteObserver) veut être notifié à chaque fois que le cours d’IBM (ConcreteSubject) change

Page 167: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

���Le patron Model-View-Controller

2011 167 Introduction à l'OO - H. Bersini

Page 168: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Model-View-Controller •  Méthode de conception pour organiser l’architecture d’une

application avec interface graphique.

•  On divise l’application entre : –  Modèle (de données, connection avec la DB, etc, notification de la vue) –  Vue (présentation, interface, notification du controleur, répond aux

notifications du modèle) –  Contrôleur (logique de contrôle, synchronisation, répond aux notifications

de la vue)

2011 Introduction à l'OO - H. Bersini 168

Page 169: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Modèle •  Comportement de l’application :

–  traitement des données –  interaction avec la base de données –  garanti l’intégrité des données –  Signale à la vue que les

données ont changé (via un événement)

•  Le modèle est le seul à modifier les données, il est le garant de ces données.

2011 169 Introduction à l'OO - H. Bersini

Page 170: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Vue •  Interface avec laquel le

l’utilisateur interagit •  Deux rôles :

–  Présenter les résultats renvoyés par le modèle

–  Recevoir les actions des utilisateurs (click,, …) et transmettre au contrôleur. (via un événement)

•  N ’ e f f e c t u e a u c u n t r a i t e m e n t , n e f a i t qu’afficher les données du modèle.

2011 170 Introduction à l'OO - H. Bersini

Page 171: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Contrôleur •  Gestion des évements pour mettre

à jour la vue ou le modèle. •  Synchronise la vue et le modèle. •  Reçoit les notifications de la vue, met

à jour le modèle au besoin et avertit la vue que les données ont changé pour que celle-ci se mette à jour.

•  Le contrôleur ne

modifie aucune donnée.

•  Le contrôleur est simplement les m é t h o d e s d e g e s t i o n d’événement (EventHandler)

2011 Introduction à l'OO - H. Bersini 171

Page 172: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

En résumé

•  L’utilisateur clique sur quelque chose (->notification) •  La requête est analysée par le controleur •  Le contrôleur demande au modèle de faire ces changements •  Le contrôleur renvoie la vue adaptée, si le modèle ne l’a pas

déjà fait.

2011 Introduction à l'OO - H. Bersini 172

Pointillés = notifications Plein = association

Page 173: Introduction à l’Orienté Objet · smalltalk,eiffel,C++,delphi,java,C#,Python – Aussi vieux que l’approche procédurale ou l’approche IA ... De la programmation fonctionnelle

Règles de base

•  Le modèle ne peut pas connaître la vue.

•  La vue peut connaître le modèle (et l’utilise en lecture seule).

2011 Introduction à l'OO - H. Bersini 173