0% ont trouvé ce document utile (0 vote)
37 vues16 pages

Introduction à la Programmation par Objets

Ce document décrit les concepts de base de la programmation orientée objet, notamment les caractéristiques des objets, classes, messages, encapsulation et héritage.

Transféré par

foxnw42
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
37 vues16 pages

Introduction à la Programmation par Objets

Ce document décrit les concepts de base de la programmation orientée objet, notamment les caractéristiques des objets, classes, messages, encapsulation et héritage.

Transféré par

foxnw42
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Programmation par Objets (1)

• Caractérisée par la programmation avec des


objets, messages, et hiérarchies des objets.
Programmation par Objets • La PO est une abstraction, généralisation de la
Programmation impérative (PI):
– P.I implique un état et un ensemble d ’opérations
Nabil Hameurlain transformant l ’état;
LIN2 – P.O implique une collection d ’objets, chacun
avec un état et un ensemble d ’opérations
transformant l ’état.

1 2

Programmation par Objets(2) Programmation par Objets(3)


• S ’intéresse beaucoup plus aux données • Programmer en Objets signifie développer
qu’au contrôle. des abstractions qui modélisent le problème
à résoudre:
• Utilise la métaphore de communication par – se focaliser sur les données, les objets, et les
opérations nécessaires pour satisfaire une tâche
messages pour capturer les interactions
particulière.
entre objets.
• Un objet peut être vu comme un Serveur:
nécessite des opérations et (parfois) des
3
données. 4
Programmation VS langages à
Langage à Objets (1)
Objets
• On peut faire de la programmation à Objets dans • Un Objet renferme son état et ses opérations
n ’importe quel langage de programmation. (encapsulation):
– cache les détails de l ’implémentation d ’un
objet.
• Un langage à objets offre des mécanismes qui
facilitent la programmation par objets • Différents objets receveurs d ’un même
(mécanismes d’encapsulation, de classification, message peuvent répondre différemment
d ’héritage, etc). (polymorhisme).

5 6

Langage à Objets (2)


Historique: approche procédurale
• Le code à exécuter en réponse à un message Modules
est déterminé dynamiquement (liaison
différée); Données

• Les objets sont crées à partir d’un moule


(classe);
• Une classe peut être construite par héritage
d’une autre classe déjà existante.
Sous-programme
– La sous-classe peut hériter de la structure et du
comportement de sa super-classe.
7 8
Historique: approche orientée
Historique: Objets
objets
• Programmation dirigée par les données et
les traitements:
– la tâche à réaliser est décomposée en un
ensemble d’objets.
• Idée : diviser (en sous-programmes
autonomes) pour mieux faire évoluer et
réutiliser
Objet = données + traitements

9 10

Terminologie (2)
Terminologie (1)
• Méthode: le corps d ’une procédure qui
• Objet: collection de données privés et des implémente une opération;
opérations publics; • Message: appel de procédure. Requête
• Classe: description d ’un ensemble d ’objets d ’exécuter une méthode;
(type encapsulé: partionner en privé et • Héritage: Extension d’une classe précédemment
public); définie;
• Instance: une instance d ’une classe est un • Sous-typage (principe) : il peut apparaître si un
objet de cette classe; objet d ’un supertype est attendu:
– c’est un mécanisme d ’héritage qui distingue entre
11 les types et les classes 12
Les Objets (1) Les Objets (2)
• Collection d ’opérations partageant un état; • Les variables représentant l ’état interne d ’un
objet sont appelées des instances de variables,
• Les opérations déterminent les messages et les opérations sont appelées des méthodes;
(appels) auxquels l ’objet peut répondre;
• La collection de méthodes d ’un objet
• L ’état partagé est caché depuis le monde détermine son interface et son comportement
extérieur, et est accessible seulement aux
opérations de l ’objet;
13 14

Types d ’Objets Objets Fonctionnels


• Objets Fonctionnels: collection de fonctions • Ils sont comme les valeurs, ayant une sorte
mais n’ayant pas d ’état; d ’interface objet, mais aucune identité
• Objets Impératifs: Objets ayant un état que persiste entre les changements d ’état.
l ’on peut mettre à jour; • Utilisés dans les langages fonctionnels et
• Objets Actifs: peuvent être activés quand un logique.
message arrive; contrairement aux Objets • Syntaxiquement, ils peuvent être représentées
fonctionnels et impératifs qui sont passifs, à par exemple par :
name: object
moins qu’ils sont activés par un message methods
….
15 16
Objets Impératifs Objets Actifs
• Les Objets Actifs ont trois modes:
• Sont comme les variables, ayant un état que – quand il y a rien à faire, ils dorment;
l ’on peut mettre à jour (Simula, Smalltalk, – quand un objet (« agent » ) est en train de
C++); s ’exécuter il est actif;
• Ont une identité, et une collection de: – et quand un objet est en attente d ’une ressource
– méthodes qui sont activées par la réception de ou l ’accomplissement des tâches il est en attente.
messages depuis les autres objets • Les messages envoyés à l ’objet doivent
– Instances de variables qui sont partagées par les attendre dans une file jusqu’à ce que l ’objet
méthodes de l ’objet, mais inaccessibles par les finisse sa tâche:
autres Objets.
– L ’envoie peut être synchrone ou asynchrone.
17 18

Les classes(1)
Implémentation d’un Objet
• Les classes servent de moule à partir duquel
les Objets peuvent être crées.
Instance data Shared methods code

methods method1 • Les classe ont les mêmes instances de


variables et d ’opérations que les objets
data field1 ...
correspondant mais l ’interprétation diffère:
…. methodn – Une instance de variable dans l ’objet représente
data fieldn les variables actuelles, alors que les instances de
variables d ’une classe sont potentielles, étant
instanciées à la création d ’un objet.
19 20
Les classes(2) Approches de définition de
L ’héritage
• Logique: exprimé par un prédicat, A(x) est
• On peut penser d ’une classe comme la vraie si x ∈ A. B hérite de A ssi,
spécification du comportement commun à tous
les objets de la classe.
∀ x, si A(x) alors B(x).
• Ensembliste: le prédicat est exprimé par une
• les opérations publics d ’une classe déterminent
inclusion d ’ensembles. B hérite de A ssi,
le comportement,
• Les instances de variables spécifient une
∀ x, si x ∈ A alors x ∈ B.
structure (de données) pour réaliser ce • Conceptuelle: exprimée par une spécialisation.
comportement; B hérite de A ssi B « est une sorte de » A.
21 22

L ’héritage (1) L ’héritage (2)


• Permet la réutilisation du comportement d ’une • Permet la classification des classes de la
classe dans la définition de la nouvelle classe. même façon que les classes permettent la
• La sous-classe hérite des opérations de la classification des valeurs (premier niveau).
classe parente (super classe) et peut rajouter de – Offre un pouvoir de modélisation conceptuelle et
de classification (du second ordre).
nouvelles opérations et de nouvelles instances
de variables. • Offre la possibilité de gérer, de manipuler, et
de partager le comportement (du second
• L ’héritage capture une forme d ’abstraction,
niveau), complémentaire à celui des classes
appelée super-abstraction, qui est
vis à vis des objets (premier niveau).
complémentaire à l ’abstraction de données.
23 24
Relation et graphe d ’héritage(1)
Relation et Graphe d ’héritage(2)
• Une relation d ’héritage est préordre (réflexive et
transitive), liant une classe à sa super-classe: • Simple: une classe ne possède qu’une seule
– A hérite (sous-classe) de B est représenté par A <h B; super-classe directe:
• La représentation graphique de l ’héritage forme – L ’ensemble des classes est structuré (graphe
le graphe d ’héritage Gh=(Racine, Nœud, Arc): d ’héritage) sous forme d ’une arborescence.
– Racine=classe la plus générale, • Multiple: une classe possède plusieurs
– Nœud=l ’ensemble des classes du système. super-classes directes:
– Arc: il existe un arc orienté A---->B ssi A hérite de B. – le graphe d ’héritage forme un graphe orienté
sans circuit.
25 26

Les Types et les Classes(1) Les Types et les Classes(2)


• Le concept d ’un type et celui d ’une classe • La distinction entre les types et les classes peut
sont liés et peuvent ne pas être distingués: être détectée quand on compare la relation
– Le typage est utilisé pour la vérification de type; d ’héritage entre types et sous-types avec la
– les classes sont utilisés pour gérer et générer des relation d ’héritage entre classes et sous-
objets ayant des propriétés et des comportements classes.
uniformes. • L ’ensemble des valeurs satisfaisant un sous-
• Toute classe est un type alors qu’un type type est un sous-ensemble de l ’ensemble des
n ’est pas forcement une classe, puisque les valeurs satisfaisant le type.
prédicats ne déterminent pas nécessairement
des moules d ’un objet. 27 28
Sous-types et Sous-classes Implémentation de l ’héritage
Objet supertype Shared methods code
• Exemple1: les entiers naturels sont un sous-
type des réels, mais quand la soustraction est methods methods
définie pour toutes les paires des réels, elle
n ’est pas définies pour toutes les paires des field
entiers naturels.
• Exemple 2: les réels sont une sous-classe des Objet sous-type
entiers naturels, puisque l ’opération de methods shared methods
soustraction sur les entiers naturels peut être
shared field new methods
étendue à celle des réels.
new field
29 30

Héritage Vs Composition

• L ’héritage multiple permet de définir de


nouveaux objets par fusion de la structure et Typage et sous-typage dans les
du comportement de plusieurs autres et non
par composition.
Langages à Objets
• La composition d ’objets peut toujours être N. Hameurlain
réalisée par les variables d’instance. Lin2
• Exemple:
Automobile=Moteur+roue+Carosserie, +...
31 32
Objectifs du typage?
Réalisation du Typage
• Introduire une plus grande fiabilité dans le
langage en détectant les expressions qui ne • Regrouper les objets en catégories
sont pas bien formées distinctes: types;
– f(x) est bien formée si x appartient au domaine de
• Définir un ensemble de règles appelées
définition de f.
règles de typage;
• Exemples d ’expressions mal formés
• Simuler l ’exécution du programme en
– diviser par zéro, affecter une valeur à un indice
suivant les règles de typage, mais en tenant
hors des bornes d ’un tableau, envoyer un message
à un objet qui ne connaît pas, opérateur appliqué compte uniquement des types obtenus à
sur des objets pour lesquels il n ’est pas défini, etc chaque étape de simulation;
33 34

Les problèmes de typage dans les


Catégories de typages L.O
• Quel est le type d ’un objet, c ’est à dire
• Typage dynamique: réalisé pendant comment représenter le type d ’un objet (état
l ’exécution: interne+méthodes);
– les tests sont insérés dans le code et compilé, et • Comment typer les utilisations de self (par
sont ainsi réalisés pendant l ’exécution. une méthode par exemple d ’un objet)? Ce
• Typage statique: fait à la compilation type change t-il avec l ’héritage?
– la cohérence des types est vérifiée avant la • Comment typer la liaison tardive?
traduction en code machine.
• Qu’est ce que c ’est le polymorphisme et quel
est son lien avec l ’héritage
35 36
Langage des types Typage d’une expression
• Types atomiques (int, bool, float, …); • Se fait relativement à un environnement ou
• Types construits: contexte (noté E).
– d’opérateurs prédéfinis : ->, * • Environnement de typage: Liste de liaisons
• int --> int, int*int-->int (idf, type). Exemples:
– d’enregistrements déclarés (point, cercle, … – Un idf x est de type t dans un environnement E,
• Types récursifs si (x, t) est présente dans E;
– Arbre, etc.. – If e1: bool dans E e2 : t dans E e3: t dans E
If e1 then e2 else e3 : t dans E
• Notation: on notera t1, t2, t’ un type, et e:t se
lit « l’expression e est de type t » – e1: t->t’ dans E e2: t dans E
e1(e2): t’ dans E
37 38

Construction de l’environnement
Construction de l’environnement
de typage
• A partir des déclarations:
de typage (par synthèse)
– Toute déclaration introduit une liaison (idf, type) • Exemples (de règles):
– Le système vérifie que l’utilisation de l’idf est
conforme au type associé. – Si x est une constante entière, type(x) = int;
• Par synthèse: – Si e = (e1, e2), type (e) = type(e1)*type(e2)
– Le type de chaque idf est calculé à partir des – Si e = (fun x. e1),
occurrences d’utilisation de l’idf.
• Pas besoin de déclarer le type.
type (e) = type(x) -> type(e1);
– Le calcul est analogue à la résolution d’eqs en – Si e = e1 (e2), type (e1) = type (e2)->type (e)
mathématiques (notions de constantes, de variables et
de contraintes).

39 40
I. Le Polymorphisme
Le Polymorphisme
• Class point {
var x;
method getx{return x;} • Peut-on appliquer la fonction Origin aux
method move (d) {x:= x+d;}
};
objets de type Colorpoint?
• Class Colorpoint : hérite point{ • Oui, s’il existe une notion de
Var c; polymorphisme dans le langage.
method getcolor{return c;}
method setcolor (c’){c:= c’;} • Définition: une fonction, une méthode ou un
};
objet est polymorphe si on peut l’employer
• Soit la fonction Origin (p : point) {
avec plusieurs types.
return([Link]= =0)}
41 42

Polymorphisme paramétrique:
Problème du polymorphisme
définition
• Soit F(o: t) = … /*opérations sur o*/ • Si les opérations effectuées sur o ne sont pas
• On veut faire F(a) où a : t’ et t’≠ t. dépendantes de son type (recopie,
– Comment assurer que cet appel ne provoque pas comparaison, égalité), le type de F est
d’erreurs de typages à l’exécution?
polymorphe paramétrique, et on peut utiliser
– Quelles conditions doit remplir tout type t’?
F avec tout type qui est une instance de ce
• Il existe trois formes du polymorphisme:
type polymorphe.
– Polymorphisme paramétrique;
– Polymorphisme d’inclusion ou sous-typage
– Surcharge;
43 44
Polymorphisme d’inclusion ou Surcharge
sous-typage: définition
• Le code des fonctions n’est pas partagé,
• Si le type t’ est tel que: toutes les opérations contrairement au poly. par. et d’inclusion.
sur t sont aussi définies sur t’, alors on peut • Exemple: surcharge d’opérateurs ‘+’
utiliser tout objet a: t’où un objet de type t (entiers, réels, etc…)
était attendu: • Pour chaque utilisation de l’opérateur
– t = {réels} et t’= {entiers} surchargé, le compilateur doit décider quel
• On dira que t’ est un sous type de t ou t’ est code exécuter, et ceci selon le type des
inclus dans t. arguments donnés.

45 46

II. Quel polymorphisme pour les


Polymorphisme (conclusion)
objets
• Le poly. d’inclusion et paramétrique ont en • « Peut – on utiliser les opérations définies pour les
commun une propriété très importante: super-classes sur les objets des sous classes? »
– Une fonction polymorphe peut être appliquée • Exemple: Colorpoint est sous-classe de Point,
sans changement de code à une infinité de types peut-on utiliser Origin avec des points de couleur.
d’arguments. • L’héritage doit garantir le poly. des méthodes et
des opérations des super-classes:
• Le poly. d’inclusion et paramétrique est un
– N’importe quelle opération définie sur une super-classe
moyen de partager aussi bien le code source doit pouvoir s’utiliser sur une sous-classe.
que du code exécutable.
47 48
Polymorphisme paramétrique:
Polymorphisme paramétrique :
variable de types
Instanciation
• Le langage de type est étendu avec des variables,
notées a, b, c, … • Définition: t(a b c) une expression de type
• Une expression de type peut contenir des var. a-> int, qui contient les var. a, b, c. On dit que t’ est
b->b, … une instance de t(a b c) s’il existe des types
• La valeur de la sous-expression qui est typée par une ta, tb, tc tel que t’ = t(a b c) [a/ta, b/tb; c/tc],
var. de type n’a pas de contraintes associées et donc
n’intervient pas dans le calcul où [x/t] est la substitution de x par t.
– Identite (x) = {x} a pour type a->a • Dans le cas où les types sont déclarés, la
• L’introduction de var. de type permet une abstraction substitution est donnée par l’utilisateur.
sur le code.

49 50

Polymorphisme paramétrique:
Polymorphisme d’inclusion
définition
• Fonction ayant dans son type des par. ou variable de • Connu sous le nom du sous-typage:
types qui pourront être spécialisés (instanciées) à
– pas d’instances de type mais plutôt d’inclusion de type
n’importe quel type
– L’instanciation d’une variable de type a vers un type t est
• Définition 1: un type t’ est un sous-type d’un (inclus
notée par [a/t]. dans un) type t, noté t’ ≤ t, si n’importe quelle
opération définie sur t est aussi définie sur les
• Définition: un type τ’ est une instance polymorphe
éléments du type t’.
du type τ s’il existe une spécialisation [a/t] des var.
de type τ telle que τ’= τ[a/t]. – Un objet de type t’ peut (être vu) remplacer sans danger
un objet de (comme ayant le) type t;
• Caractérisé par la relation d’instantiation qui existe • Définition 2: si a a le type t’, et si t’ est un sous type
entre le type général de la fonction et le type de t, alors a a le type t.
particulier de chaque spécialisation.
– Colorpoint est sous-type de Point?
51 52
Langage à Objets et III. Sous-typage et L.O
polymorphisme – « La notion d’héritage assure t-elle l’utilisation
polymorphe des méthodes héritées? »
• La plupart des L.O font le choix du Poly. • Appel de fonctions avec sous-typage:
d’inclusion ou sous-typage. Ce mode de – Sous quelle conditions un appel de fonction est bien typé
poly. pose problème lors de l’héritage: en présence du sous-typage.
• Sous-typage entre objets:
– Faire « comme ci » le poly. est « transmis » par
– Quand est-ce que deux types d’objets sont en relation de
héritage: erreur de typage lors de l’exécution. sous-typage?
– Restreindre l’ensemble des classes que l’on • Sous-typage entre fonctions:
peut écrire: l’expressivité du langage est réduite – Comment savoir si deux types (fonctionnelles) de
de manière importante (C++, par exemple). fonctions sont en relation de sous-typage

53 54

Appel de fonctions avec sous- Sous-typage entre objets (1)


typage • Soit t = <m1: τ1; m2: τ2;…, mn: τn >, quelle est la
• Prend en compte le fait que le typage du par. effectif forme de tout type t’ sous-type de t, i.e. qui peut
peut être un sous-type du par. formel. remplacer t de manière sûre?
• Règle: f:στ • On doit pouvoir appliquer aux objets de type t’ au
moins toutes les opérations valides sur t:
a : σ’ dans A et σ‘≤ ≤σ – t’ doit avoir au moins toutes les méthodes de t, mais
Alors, f(a) est bien typé dans A et a le type τ peut éventuellement en avoir plus.
– En effet: si σ‘≤
≤ σ alors toutes les op. sur σ sont aussi • Les types de méthodes communes sont en relation
définies sur σ’.Ainsi f, qui attend un argument de type σ de sous-typage:
peut recevoir un type σ’ en toute sécurité. – Si m a le type τ’ dans t’ et τ dans t alors τ’≤
≤ τ.

55 56
Sous-typage entre objets (2) Sous-typage entre fonctions
• Règle: t = <m1: τ1; m2: τ2;…; mn: τn >, • Class A = { Class B = {
t’ = <m1: σ1; m2: σ2; …, mn: σn; τ’ >, où …. ….
τ’ est une suite de méthodes. method f : t->q} method f : m->n}
t’ est sous-type de t dans A (t’ ≤ t), si σi ≤ τi, i =1, …,n; Pour établir B ≤ A il faut vérifier (m->n) ≤ (t->q)
– En effet, si o: t et o’:t’, et si m est une méthode de o avec le • Règle: deux types fonctionnelles, (m->n) et (t->q),
type τ , alors o’.m: τ’ pourra être vu comme ayant le type τ sont en relation de sous-type, i.e. (m->n) ≤ (t->q)
ssi τ’ ≤ τ. ssi t ≤ m et n ≤ q.
• Remarque: dans la plupart des L.O, l’ordre des • On dit que la règle de sous-typage entre fonctions est
méthodes n’a pas d’importance dans la comparaison co-variante (va dans le même sens) pour les types
des types d’objets. résultats, alors qu’elle est contre-variante (change de
• Exemple: Colorpoint ≤ point sens) pour les types arguments (en entrée).
57 58

Sous-classe ≠ Sous-type (1) Sous-classe ≠ Sous-type (2)


• Le sous-typage entre deux classes impose le sous-
typage entre les types de leurs méthodes; • Class A= { Class B = hérite de A{
• Le sous-typage fonctionnel doit satisfaire la règle de …. …
variance/covariance method m(a : t); } method m (a : t’);}
• Problème: souvent la contre-variance est contraire à • Sachant que l’on veut faire une spécialisation
la manière dont le programmeur veut définir les
classes, les méthodes par héritage, à savoir, par des arguments, c à d, t’ ≤ t, alors que la règle
spécialisation des types pour les arguments des impose:
méthodes:
B ≤ A, si t ≤ t’ (règle de contre-variance)
• Ce problème connu sous le nom « Problème de
contre-variance ».
59 60
Sous-classe ≠ Sous-type: Sous-classe ≠ Sous-type:
exemple (1) exemple (2)
• Soient les classes: aliments, viande, et
légumes telles que: • végétarien est une sous-classe de personne ;
– viande ≤ aliments et légumes ≤ aliments Mais est – elle un sous-type de personne?,
• Class Personne () { c’est à dire végétarien ≤ personne (1).
method manger (a : aliments) {} • Si (1) est vrai, par la règle de sous-typage
} fonctionnelle, on a :
• Class végétarien(): hérite personne {
– aliments ≤ légumes, ce qui est contraire aux
method manger (a : légumes){} hypothèses
}
61 62

Sous-classe ≠ Sous-type: Sous-classe ≠ Sous-type:


exemple (3) conclusion
• Intuitivement: Soit la fonction • Il est fondamentale de préserver l’égalité,
Chez_Macdo (p : personne) = {[Link](BigMac);} « sous-classe = sous-type » dans L.O:
où BigMac: viande. – Permet d’utiliser les opérations de la super-classe de
• Si (1) est vraie, soit GND: végétarien, qui peut être manière polymorphe.
utilisé à la place du type personne, on obtient donc • Quand cette égalité risque de ne pas être vérifiée
GND. manger(BigMac)!!!!!!!;
– Interdire l’écriture de la classe héritière;
• Cet appel est sémantiquement incorrect, et il est mal
– Imposer à l’utilisateur de lui donner le même type que
typé: la méthode manger d’un végétarien n’accepte
dans la classe parente, ceci interdit l’utilisation de cette
pas le type viande. méthode de manière polymorphe (C++).
• En réalité (1 ) n’est pas vérifiée!
63 64

Vous aimerez peut-être aussi