Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
Langages orientés objets
Chapitre 12 Langages orientés objets
2
Chapitre 12 Langages orientés objets Choix de conception C++ Java C#
Implémentation 2
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
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é
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
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.
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
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.
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.
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
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
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.
13
Une sous-classe est-elle un sous-type?
Si B est une classe dérivé de A et si b 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
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
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
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?
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
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
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
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.
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
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;
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;
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
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.
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); }
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).
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
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
30
Exemple C# (2) Héritage base.Draw() 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()
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. 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
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
33
Implémentation Deux points d'intérêts
Structure de donnée pour les instances de classes Liaison dynamique
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
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.
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 sift(){...}
37
Copyright © 2007 Addison-Wesley. All rights reserved.
38
Exemple: héritage multiple
class A { public: int a; virtual void fun(){...} virtual void init(){...} } class B{ int b; virtual void sum(){...} class C: public A, public B{ int c; virtual void dud(){...}
39
Copyright © 2007 Addison-Wesley. All rights reserved.
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.