isbn 0-321-49362-1 chapitre 12 langages orientés objets

39
ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

Upload: donatienne-cloarec

Post on 04-Apr-2015

109 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

ISBN 0-321-49362-1

Chapitre 12

Langages orientés objets

Page 2: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-2

Chapitre 12

• Langages orientés objets• Choix de conception• C++• Java• C#• Implémentation

Page 3: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-3

Langages orientés objets (POO)

Doit supporter:• Types de données abstraits

– Discutés au chapitre précédent

• Héritage– Un concept central en POO

• Liaison dynamique des méthodes– Permet le polymorphisme

Page 4: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-4

Héritage

• Limites des types de données abstraits:– Les TDA peuvent rarement être réutilisés sans

modification.– Tous les TDA sont indépendents (au même

niveau) ce qui ne réflète pas la structure des problèmes

• L'héritage permet de définir une classe A en termes d'une autre classe B– A hérite des types de données et des

fonctionalités de B

• Permet d'outrepasser les limites des TDA et d'augmenter la productivité

Page 5: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-5

Terminologie

• Les TDA sont des classes• Une instance de classe est appelée objets• Si une classe B hérite des données et des

fonctionalités d'une classe A alors on dit:– B est une sous-classe ou classe dérivée de A– A est un parent ou super-classe de B

• Les sous-programmes définissant les opérations sur les objets sont appelés méthodes

Page 6: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-6

Terminologie (suite)

• Un appel à une méthode est appelé messages

• L'ensemble des méthodes d'un objet est appelé interface ou protocole.

• Un message possède deux parties:– Un nom de méthode– Un objet destinataire

• Dans le cas le plus simple une sous-classe hérite de toutes les entités (données et méthodes) de son parent.

Page 7: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-7

Terminologie (suite)

• L'héritage peut être plus compliqué en raison de la présence de contrôles d'accès:– Un classe peut cacher certaines entités à ses

sous-classes– Elle peut cacher certaines entités à ses clients– Elle peut cacher certaines entités à ses clients

et les montrer à ses sous-classes

• Une sous-classe peut modifier une méthode qu'elle a héritée– La nouvelle méthode remplace (overrides)

alors l'ancienne

Page 8: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-8

Terminologie (suite)

• Deux types de variables dans une classe:– Variable de classe (une par classe)– Variable d'instance (une par objet)

• Deux types de méthodes:– Méthode de classe – Le destinataire est une

classe– Méthode d'instance– Le destinataire est un objet

• Héritage simple et multiple• Désavantage de l'héritage:

– Crée une interdépendance entre les classes qui peut être difficile à gérer.

Page 9: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-9

Liaison dynamique des méthodes

• Polymorphisme: Une variable peut contenir des objets d'un type de base ainsi que de tous les sous-types.

• Lorsqu'une variable polymorphique appelle une méthode, le choix de la méthode est déterminé à l'exécution.

• Facilite le développement et la maintenance de logiciels.

Page 10: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-10

Liaison dynamique: concepts

• Méthode abstraite (ou virtuelle): pas de définition, seulement le protocole.

• Classe abstraite: Au moins une méthode virtuelle

• On ne peut pas instancier une classe abstraite

Page 11: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-11

Choix de conception

• Exclusivité des objets• Est-ce que les sous-classes sont des sous-

types?• Polymorphisme et vérification de types• Héritage simple et multiple• Allocation et libération d'objets • Liaison statique et dynamique• Classes imbriquées

Page 12: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-12

Exclusivité des objets

• Tout est un objet– Avantages - élégance et uniformité– Désavantages - Ralenti les opérations sur les types élémentaires

• Ajouter les objets à un système de typage impératif– Avantages - Opérations rapides sur les types conventionnels– Désavantages - Perte de lisibilité (2 sortes d'entités)

• Système de typage impératif pour les types élémentaires; tout le reste est objet– Avantage - Les opérations sur les types élémentaires (les plus

utilisés) sont rapides– Désavantage - Toujours un peu de confusion à cause des deux

système de typage.

Page 13: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-13

Une sous-classe est-elle un sous-type?

• Si B est une classe dérivé de A et sib est une instance B, est-ce que b est un objet de type A?– Dans ce cas b doit se comporter comme les

instances de A

• S'il existe une telle relation etre A et B alors on dit que B est un sous-type de A– B peut seulement ajouter des variables et des

méthodes– B peut remplacer les méthodes de A

seulement si la compatibilité est préservée

Page 14: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-14

Polymorphisme et vérification de types• Le polymorphisme peut nécessiter la vérification

dynamique des types– Par exemple, x peut être un entier dans la classe de

base et un réel dans la classe dérivée.– La vérification dynamique des types ralentie l'exécution

et retarde la détection des erreurs

• Si le remplacement des méthodes par une sous-classe est restreint à respecter le type des paramètres et la valeur de retour alors la vérification peut être effectué à la compilation

Page 15: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-15

Héritage simple et multiple

• L'héritage multiple permet à une classe d'hériter de plusieurs classes parents

• Désavantages:– La complexité du langage et de son implémentation est

augmenté – Que se passe-t-il si les deux parents possèdent une

méthode ayant le même nom?– Peut affecter l'efficacité - La liaison dynamique est un peu

plus couteuse

• Avantages: – Quelques fois très utile– Permet de mieux représenter la structure de certains

problèmes

Page 16: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-16

Allocation et libération d'objets

• Les objets sont placés dans quelle partie de la mémoire?– Comme les TDA ils peuvent être placés n'importe où

• Sur la pile• Créé explicitement sur le tas (via new)

– S'ils sont tous dynamique sur tas alors on peut y accéder de façon uniforme à l'aide de pointeurs ou de références

– Si les objets peuvent être dynamiques sur pile alors cela rend plus difficile l'implémentation des sous-types

• La libération des objets est-elle implicite ou explicite?

Page 17: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-17

Liaison statique et dynamique

• Est-ce que toutes le liaisons des méthodes doivent être dynamique? – La liaison statique est plus efficace

• On peut permettre à l'usager de le spécifier

Page 18: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-18

Classes imbriquée

• Si une classe n'est utile qu'à une seule autre classe alors il est inutile de la rendre accessible à toutes les autres classes

• Supposons que la classe A contient la classe B:– Quelles composantes de A sont visibles dans B– Quelles composantes de B sont visibles dans A

Page 19: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-19

Exemple C++

• Langage OO le plus utilisé• À la fois OO et impératif• Héritage

– Une classe n'a pas nécessairement de classe parent

– Contrôles d'accès – Private – Public – Protected

Page 20: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-20

Exemple C++ (2)

• Une classe peut être dérivé de trois façons:– Private - Les membres publiques et protégés

hérités de la classe parent deviennent privée– Public - Pas de changement– Protected - Les membres publiques deviennent

protégés.

Page 21: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-21

Exemple C++ (3)

class base_class { private: int a; float x; protected: int b; float y; public: int c; float z;};

class subclass_1 : public base_class { … };// b et y sont protégés// c et z sont publique

class subclass_2 : private base_class { … };// b, y, c, et z sont privés,// aucune classe dérivée n'a accès aux// membres de la classe de base

Page 22: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-22

Exemple C++ (4)

• Si V est une instance de subclass_2 alors les variables c et z de base_class ne sont pas directement accessible à V

• On peut les rendre accessibles en utilisant l'opérateur de portée ::

• Par exemple:class subclass_3 : private base_class { base_class :: c; …}subclass_3 S;S.c=0;

Page 23: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-23

Exemple C++ (5)

• L'héritage multiple est supporté

– Si deux membres hérités ont le même nom alors on doit utiliser l'opérateur de portée

– Exemple: supposons que A et B possède une variable publique entière X

class sous-classe: public A, public B{ ...

}; sous-classe V; V.A::x=0; V.B::x=1;

Page 24: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-24

Exemple C++ (6)

• Liaison dynamique– On peut utiliser le mot clef virtual devant

une méthode– Cela signifie que la liaison de cette fonction

sera dynamique et qu'elle peut être appelée par des variables polymorphiques

– Une fonction virtuelle pure ne contient aucune définition

– Une classe contenant au moins une fonction virtuelle pure est appelée classe abstraite

Page 25: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-25

Exemple Java

• Caractéristiques générales– Toutes les données sont des objets sauf les types

élémentaires– Tous les types élémentaires posèdent une classe

enveloppe (wrapper)– Tous les objets sont dynamiques sur tas– L'espace des objets peut être alloué à l'aide de

l'opérateur new– On réfère aux objets à l'aide de variables références– Une méthode finalize est implicitement appelée

lorsque le ramasse miette récupète la mémoire occupée par l'objet. Cette méthode ne peut être appelée explicitement.

Page 26: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-26

Exemple Java (2)

• Héritage– Seule l'héritage simple est supporté– Une interface est une sorte de classe abstraite

permettant de procurer certains des avantages de l'héritage multiple.

– Une interface ne peut inclure que des déclarations de méthodes et des définition de constantes:

– Par exemple:public interface Comparable {

public int comparedTo (Object b);

}

Page 27: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-27

Exemple Java (3)

• Liaison dynamique– En java, les messages sont liés

dynamiquement au méthodes à moins que la méthode soit final

– Un méthode final ne peut pas être remplacée– La liaison statique est utilisée si la méthode

est static ou private (les deux interdisent le remplacement de la méthode).

Page 28: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-28

Exemple Java (4)

• Évaluation– Similaire à C++– Ne supporte pas la programmation

procédurale– Toutes les classes ont une classe parent (sauf

la classe Object)– Par défaut la liaison dynamique est utilisée– Les interfaces sont utilisée pour fournir une

forme simple d'héritage multiple

Page 29: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-29

Exemple C#

• Caractéristiques générales– Similaire à Java sauf que, par défaut les

méthodes, sont statiques– classes et structs– structs: moins puissants que les classes; ne

supporte pas l'héritage; dynamique sur pile

Page 30: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-30

Exemple C# (2)

• Héritage– Syntaxe similaire au C++– Une méthode peut être remplacé en utilisant

le mot clef new– La méthode du parent peut être utilisée en

préfixant le message avec le nom du parent

base.Draw()

Page 31: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-31

Exemple C# (3)

• Liaison dynamique:– On ajoute à la méthode de la classe de base le

mot clef virtual– On ajoute à la méthode de la classe dérivé le

mot clef override EX. http://msdn.microsoft.com/fr-fr/library/ms173153(VS.80).aspx

– Une méthode abstraite est précédée du mot clef abstract et doit être implémenté dans toutes les sous-classes

– Toutes les classes dérivent ultimement de la classe racine Object

Page 32: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-32

Exemple C# (4)

• Évaluation– C# est le plus récent langage OO dérivé du C– Les différences entre Java et C# sont mineures

en ce qui a trait au support à la programmation OO

Page 33: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-33

Implémentation

• Deux points d'intérêts– Structure de donnée pour les instances de

classes– Liaison dynamique

Page 34: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-34

Table d'instance de classe (TIC)

• Une table d'instance de classe (Class instance record) contient les variables membres d'un objet– Statique (construit à la compilation)

• Si une classe est dérivée d'une autre alors sa TIC contient les entrées de la TIC du parent ainsi que ses propres variables membres.

• Puisque la TIC est statique, l'accès aux variables membres est effectué comme s'il s'agissait d'une structure en C– Efficace

Page 35: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-35

Table de méthodes virtuelles (vtable)

• Les méthodes qui sont liées statiquement n'ont pas besoin d'apparaître dans la TIC– Leur adresse est connue avant l'exécution

• Les choses sont différentes lorsque la liaison est dynamique– On ne sait pas à la compilation à quelle méthode un message

s'adresse – On ajoute un pointeur à la TIC vers une table de pointeurs

(vtable)– La vtable contient l'adresse des méthodes – Un message à une méthode virtuelle consiste à:

• trouver l'adresse de la vtable• calculer le décallage approprié• aller à l'adresse de la méthode

– Plusieurs vtables sont nécessaires lorsqu'il y a héritage multiple.

Page 36: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-36

Exemple: héritage simple

class A {

public int a, b;

public void draw(){...}

public int area(){...}

}

class B: public A{

public int c, d;

public void draw(){...}

public void sift(){...}

}

Page 37: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

Copyright © 2007 Addison-Wesley. All rights reserved. 1-37

Page 38: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

1-38

Exemple: héritage multiple

class A {public:

int a;virtual void fun(){...}virtual void init(){...}

}class B{

public:int b;

virtual void sum(){...} }class C: public A, public B{

public:int c;virtual void fun(){...}virtual void dud(){...}

}

Page 39: ISBN 0-321-49362-1 Chapitre 12 Langages orientés objets

Copyright © 2007 Addison-Wesley. All rights reserved. 1-39