53
Andrea G. B. Tettamanzi, 2012 1 Algorithmique Algorithmique Programmation Objet Programmation Objet Python Python Andrea G. B. Tettamanzi Université de Nice Sophia Antipolis Département Informatique [email protected]

Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 1

AlgorithmiqueAlgorithmiqueProgrammation ObjetProgrammation Objet

PythonPython

Andrea G. B. TettamanziUniversité de Nice Sophia Antipolis

Département Informatique

[email protected]

Page 2: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 2

CM - Séance 3

Introductionà la programmation

orientée objet

Page 3: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 3

Plan

• Introduction

• Encapsulation

• Types de données abstraits

• Héritage et polymorphisme

• Programmation OO en langage Python

• Éléments d'UML

• Patrons de conception orientés objet

Page 4: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 4

Origines

• La programmation orientée objet surgit dans les années '80

• Logiciels de plus en plus complexes, travail en équipe

• Contrôler la complexité des logiciels

• Code réutilisable pour contenir les coûts du développement

• Contenir les coûts de la maintenance :

– Ajout de nouvelles fonctionnalités

– Modification de fonctionnalités existantes

– portage sur d'autres plate-formes ou environnements

• Coordonner et répartir le travail de développement

• Modularité

Page 5: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 5

Evolution de la programmation

1940 1950 1960 1970 1980 1990 2000

Assembly

Langage machine

Fortran

Cobol

CAlgol

Forth

Pascal

programmationstructurée

programmationorientée objet

Lisp

Basic

PL/1

Prolog

Smalltalk

Scheme

Modula-2

ADA

C++

Java

patrons deconception

Python

Page 6: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 6

Programmation orientée objet

Discipline de programmation dans laquelle le programmeur établit

• non seulement les structures de données,

• mais aussi les opérations qui peuvent leurs être appliquées.

Ainsi,

• la structure de données devient un objetobjet qui inclut

– Données, appelées attributsattributs

– Opérations, appelées méthodesméthodes

• Le programmeur peut définir des relationsrelations entre les objets

Page 7: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 7

Encapsulation

• Seules les opérations définies à l'intérieur d'une structure de données peuvent manipuler les données de cette structure :

– L'utilisation d'opérations certifiées sur les structures de données garantit leur consistence

– Élimine une parmi les causes d'erreur les plus importantes

• Cacher les détails de réalisation :

– Avère la modularité du code

– facilite l'extension et la maintenance

– facilite l'individuation des erreurs

Page 8: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 8

Type abstrait de données

• Possède un type

• Définit un ensemble d'opérations, qui constituent son interface

• Les opérations de l'interface sont la seule manière d'accéder au type abstrait de données

• Son domaine d'application est défini par des axiomes et des préconditions

Page 9: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 9

Exemple : Type abstrait de données“Nombre Naturel”

• Type : “Nombre Naturel”

• Opérations définies (Interface) :

– S(n), n + m, n x m, etc.

– n = m, n < m, n | m, premier(n), etc.

• Axiomes et préconditions :

– n + 0 = 0 + n = n

– n + S(m) = S(n) + m

– n x 0 = 0 x n = 0

– n x S(m) = (n x m) + n

– etc.

Page 10: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 10

Objets et Classes

NomClasse

attributs

méthodes

C'est-à-dire, données

objet1: NomClasse instances de la classe

C'est-à-dire, opérations, fonctions

objet2: NomClasse

Page 11: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 11

Visibilité

NomClasse

- données privées

données protégées

+ données publiques

- méthodes privées

méthodes protégées

+ méthodes publiques

visibles que au codede la classe

visibles que au codede la classe et dessous-classes

Page 12: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 12

Héritage : Définition

L'héritage est la caractéristique d'un langage orienté objet qui fait

que les objets d'une classe “héritent” toutes les propriétés définies

pour les classes de niveau supérieur :

– attributs;

– méthodes;

– etc.

Historiquement, c'est une des caractéristiques les plus

controversées.

Page 13: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 13

Héritage

A

B

C

a

a

a

b

b

Page 14: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 14

Vision naïve-intuitive

Agenda

Par jour Semanale Mensuelle

Page 15: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 15

Sous-classe = sous-type

“B sous-type de A pour chaque programme qui utilise des objets

de classe A, on peut utiliser des objets de classe B à leur place

sans que le comportement logique du programme change”.

Une sous-classe ne peut pas contraindre le comportement des

super-classes.

Principe de substitution de Liskov

Page 16: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 16

Exemple

?

Page 17: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 17

Exemple

protected double b, h;

setBase(double);setHeight(double);

Page 18: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 18

Exemple

protected double b;

setBase(double);

protected double h;

setHeight(double);

Page 19: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 19

Deux notions cohabitent dans l'héritage :

– Héritage d'interface ou subtyping;

– Héritage de réalisation ou subclassing.

Types d'héritage

Page 20: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 20

Héritage de réalisation

Il s'agit d'un mécanisme de réutilisation du code.

La sous-classe réutilise les méthodes des super-classes.

Page 21: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 21

Héritage d'interface

Il s'agit d'un mécanisme de compatibilité entre des types.

Il permet le polymorphisme par sous-typage.

Une sous-classe est un sous-type compatible vers le haut avec

tous les types définis tout au long de sa chaîne d'héritage.

Page 22: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 22

Héritage

A

a, b

+ f(x)+ g(x, y)

B

c

+ h(x)

O1 : A

O2 : B

codef(x)

f(x)

h(x)

A

B

o1

o2

Page 23: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 23

Deux ordres d'avantages :

– fusion d'interfaces provenant de sources différentes ;

– réutilisation de code provenant de sources différentes.

Héritage d'interface :

– La correction peut être vérifiée statiquement (= au moment de la compilation);

Héritage de réalisation :

– Plus problématique : ex., la même méthode réalisée (comment ?) en deux super-classes distinguées.

Héritage multiple

Page 24: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 24

Polymorphisme

Proprieté d'une même entité qui se manifeste dans des formes

différentes dans de contextes différents…

In Informatique :

Idée d'autoriser le même code à être utilisé avec différents types,

ce qui permet des implémentations plus abstraites et générales.

Page 25: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 25

Exemple : monomorphisme

int max(int a, int b) :

if(a > b) : return a

else : return b

double maxd(double a, double b) :

if(a > b) : return a

else : return b

Page 26: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 26

Exemple : monomorphisme

int max(int a, int b) :

if(a > b) : return a

else : return b

double maxd(double a, double b) :

if(a > b) : return a

else : return b

Page 27: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 27

Classification selon Cardelli-Wegner

Polymorphisme

universel

ad hoc

paramétré

par sous-typage

overloading

coercion

Page 28: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 28

La même fonction ou les mêmes opérateurs peuvent être

appliqués à des types différents.

Exemple (en C):

double x, y, z;

int i, j, k;

z = x + y;

k = i + j;

Overloading

Page 29: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 29

Coercion

Les arguments d'une fonction ou opérateur sont transformés

implicitement en le type applicable.

Exemple (en C):

double pow(double, double);

double x, y;

int n;

y = pow(x, n);

Page 30: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 30

Polymorphisme paramétré

Fonctions et opérateurs paramétrés selon le type auquel il peuvent

être appliqués.

Exemple (en C++):

template <typename T> T max(T a, T b)

{

if(a > b) return a;

else return b;

}

Typique de la “programmation générique”.

Page 31: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 31

Polymorphisme par sous-typage

• Une méthode (c'est-à-dire une opération) peut être appliquée à tous les objets qui appartiennent à la classe qui la prévoit dans son interface.

• Le principe de substitution de Liskov s'applique

• Typique de la programmation orientée objet

Page 32: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 32

Exemple : max

interface Comparable

{

int compareTo(Comparable c);

}

static Comparable max(Comparable a, Comparable b)

{

if(a.compareTo(b) > 0) return a;

else return b;

}

Page 33: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 33

Programmation OO en Python

• Les objets sont l'abstraction des données en Python.

• Toutes les données dans un programme Python sont représentés par des objets, y compris le code.

• Un objet possède :

– Une identité (= son adresse en mémoire) : id()

– Un type (opérations supportées + valeurs possibles)

– Une valeur (mutable ou immutable, selon le type)

• Chaque classe et instance de classe possède un espace de noms (namespace), réalisé par un dictionnaire.

• Python n’adhère pas au fait de protéger le code vis-à-vis du programmeur. Python encapsule les objets comme un namespace unique mais c’est une encapsulation transparente

Page 34: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 34

Définition d'une classe

class NomCls(cl1,cl2,cl3): """documentation""" # bloc instructions, définition des méthodes, etc.

nom de la classe (identificateur)superclasses desquelles las classe hérite

def __init__(self,arg1,arg2): """documentation""" # initialisation d'une instance. self.arg1 = arg1 self.arg2 = arg2

Pas de définition explicite d'interface, on utilise les classes pour cela

Page 35: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 35

Création et utilisation d'une instance

instance = NomCls(arg1,arg2)

instance.méthode(x,y)

instance.attribut

NomCls.attribut_de_classe

Page 36: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 36

UML

Le langage universel de modélisation (Unified Modeling Language, UML) est une famille de notations graphiques qui aide à décrire et concevoir des logiciels, notamment

ceux construits en utilisant un style orienté objet•

Page 37: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 37

Ingrédients de UML

• Le “vocabulaire” de UML inclut trois types d'ingrédients :

– Entités (choses, things): abstractions pertinentes

– Relations : lient des entités entre elles

– Diagrammes : regroupent ensembles intéressants d'entités

Page 38: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 38

Types d'entités

• Structurales :

– Classes, interfaces, collaborations, cas d'utilisation, composantes, nœuds

• Comportementales :

– Messages, états

• De regroupement :

– Paquets

• Annotations :

– Notes

Page 39: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 39

Entités structurales

Windoworiginsizeopen()close()move()display()

Classes

Interfaces

ISpelling

Collaborations

Chaîne deresponsabilité

Cas d'utilistion

Insertion ordre

Composantes

Noeuds

Server

OrderForm.java

Page 40: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 40

Entités comportementales

Messages

display

Etats

Waiting

Page 41: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 41

Entités de regroupement

Règles de gestion

Paquets

Page 42: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 42

Entités d'annotation

Note

Revient avec une référence au clientstub de l'objet distant

Page 43: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 43

Types de Relations

Dépendences Associations

Généralisations Réalisations

0..1 *employeur employé

Page 44: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 44

Diagrammes

• Il existe 13 types distingués de diagrammes UML :

– Activité

– Cas d'utilisation

– Classes

– Communication

– Composantes

– Déploiement

– Interaction

– Machines à états

– Objets

– Paquets

– Séquence

– Structure des composantes

– Temporisation

Page 45: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 45

Patrons de conception

La programmation orientée objet toute seule ne suffit pas.

Idée de “patron de conception” = schema.

Aggrégations de plusieurs classes logiquement liées.

Page 46: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 46

Concevoir un programme orienté objet réutilisable signifie :

– Identifier des objets pertinents ;

– Les regrouper dans des classes de la juste granularité ;

– Définir leurs interfaces ;

– Définir la hiérarchie des classes et des interfaces ;

– Établir des relations signifiantes entre elles ;

– Répondre aux spécificités du problème ;

– Se maintenir assez généraux pour pouvoir traiter d'autres

problèmes du même type.

Conception orientée objet (1)

Page 47: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 47

Conception orientée objet (2)

Difficilement un projet « réussit bien » au premier essai :

– Il va être recyclé dans des contextes différents ;

– Il va être modifié à chaque fois pour repondre à des besoins différents ;

– Il pourra être amélioré ;

– Finalement, la meilleure solution sera trouvée.

Page 48: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 48

Expertise de conception

La différence entre un concepteur débutant et un expert :

– Parcours par essais et erreurs ;

– répertoire de solutions déjà conçues ;

– Aptitude à trouver la solution la plus appropriée.

Autrement dit, le concepteur expert possède un répertoire de schémas de conception prouvés qu'il peut adapter à des nouvelles situations.

Ceci est le sens de patron de conception.

Page 49: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 49

Patron de conception

Un patron de conception décrit :

– Un problème que l'on retrouve souvent en écrivant des programmes ;

– Le noyau de sa solution.

Page 50: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 50

Structure d'un patron

Un patron de conception est constitué par :

– Son nom;

– La description du problème, du contexte d'application ;

– La solution :

– Éléments (classes et objets) constitutifs ;

– Les relations entre les éléments ;

– Les conséquences de son application :

– résultats;

– Avantages/désavantages.

Page 51: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 51

Exemples de patrons

Des patrons sont la réédition orientée objet de techniques de

programmation très anciennes :

ex. interprète.

D'autres patrons peuvent servir comme des briques de base pour construire des architectures logicielles versatiles et performantes :

ex. adaptateur, itérateur, etc.

Page 52: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 52

Pour approfondir

Il existe des ouvrages qui examinent les patrons de conception les

plus importants. Par exemple :

Gamma, Helm, Johnson, Vlissides

Design Patterns: Elements of reusable object-oriented software

Addison-Wesley, 1995

Page 53: Algorithmique Programmation Objettettaman/Classes/AlgoProgObjet/2012/...Programmation orientée objet Discipline de programmation dans laquelle le programmeur établit • non seulement

Andrea G. B. Tettamanzi, 2012 53

Merci de votre attention