Langages orientés objets

Slides:



Advertisements
Présentations similaires
Un environnement de développement éducatif
Advertisements

La programmation orientée objet avec Java L3-MIAGE Plan
Chapitre annexe. Récursivité
Erratum C Surcharge For(int x=0; … 2.
Spécialisation/généralisation Héritage Polymorphisme.
Spécialisation/généralisation Héritage Polymorphisme
1 Quelques précisions sur l'héritage. 2 Signification de super.f() appel à la méthode f() masquée super : désigne l'objet appelant comme s'il était de.
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Langages objet Définitions Traduction des méthodes en C++
Architecture de réseaux
C.
Tarak Chaari, Stéphane Frénot, Frédérique Laforest, Frédéric Le-Mouël JAV1 JAV – TD 5 Lhéritage en Java.
Programmation Orientée Objet (POO)
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Leçon 3 : Héritage IUP 2 Génie Informatique
Introduction à la POO: Les classes vs les objets
Mr: Lamloum Med LES NOMBRES PREMIERS ET COMPOSÉS Mr: Lamloum Med.
Chapitre III Héritage (début)
Programmation orientée objet
1 Cours numéro 3 Graphes et informatique Définitions Exemple de modélisation Utilisation de ce document strictement réservée aux étudiants de l IFSIC.
Principes de la technologie orientée objets
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Langage Oriente Objet Cours 4.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
© 2007 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java et les Exceptions Peter Van Roy Département dIngénierie Informatique,
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Classes abstraites et Interfaces
Projet poker 1/56. Introduction Présentation de léquipe Cadre du projet Enjeux Choix du sujet 2.
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
Langage Oriente Objet Cours 2.
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Structures de données IFT-2000
Structures de données IFT-10541
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
GPA789 Analyse et conception orientées objet 1 Professeur: Tony Wong, Ph.D., ing. Chapitre 6 Correspondance UML et C++
Introduction au paradigme orienté-objet (suite)
Programmation concurrente
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Chapitre 9 Les sous-programmes.
Expressions et affectations
Types de données abstrait et mécanismes d'encapsulation
1-1 Chapitre 5: Les variables Introduction Les noms Les variables Les attributions (bindings) Portée et durée de vie L'environnement de référence Les noms.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
Héritage Licence Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier.
Héritage et composition
‘‘Open Data base Connectivity‘‘
Objectifs À la fin de ce cours, vous serez capables de :
LES PILES ET FILES.
Notions de pointeurs en C
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
La notion de type revisitée en POO
Les Chiffres Prêts?
11/04/ L'héritage Cours 7 Cours 7.
Variables et accès en Java. Déclaration des variables final transient static private Printer hp; transient => ne doivent pas être sérialisées volatile.
© 2005 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java Peter Van Roy Département d’Ingénierie Informatique, UCL
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
C++ L’HERITAGE Fayçal BRAÏKI DUT INFORMATIQUE.
ISBN Chapitre 10 L'implémentation des sous- programmes.
Les classes Introduction aux Langages Orientés Objets
La programmation par objets Principes et concepts Etude de Smalltalk.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Transcription de la présentation:

Langages orientés objets Chapitre 12 Langages orientés objets

Chapitre 12 Langages orientés objets Choix de conception C++ Java C# Implémentation 2

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

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é

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

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.

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

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.

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.

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

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

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.

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

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

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

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?

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

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

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

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.

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

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;

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;

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

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.

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); }

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).

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

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

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()

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

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

Implémentation Deux points d'intérêts Structure de donnée pour les instances de classes Liaison dynamique

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

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.

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(){...}

Copyright © 2007 Addison-Wesley. All rights reserved.

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(){...}

Copyright © 2007 Addison-Wesley. All rights reserved.