Héritage Et la réutilisation de code. 2 Une nouvelle entreprise u Est-ce qu’une petite entreprise peut survivre sur la vente de composants logiciels ?

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

Spécialisation/généralisation Héritage Polymorphisme.
Spécialisation/généralisation Héritage Polymorphisme
Le mécanisme des exceptions
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Module Systèmes dexploitation Chapitre 6 Communication Interprocessus Partie III École Normale Supérieure Tétouan Département Informatique
GEF 435 Principes des systèmes dexploitation Communication Interprocessus (CIP) III (Tanenbaum 2.3)
Approfondissement du langage
(Classes prédéfinies – API Java)
C.
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
Leçon 3 : Héritage IUP 2 Génie Informatique
Introduction à la POO: Les classes vs les objets
Traitement des erreurs en Java
Javascript les spécificités du langage - Partie 7 -
Chapitre III Héritage (début)
Principes de programmation (suite)
Etude des Technologies du Web services
Programmation orientée objet
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Concepts de base : la Classe Pour faire une comparaison simple, une classe serait a priori, une structure C avec des variables et des fonctions.
Les exceptions. Quest ce quune exception ? Une erreur dans le programme Due à un bug ou un cas « anormal » Gestion complète en java : JVM Dans dautre.
IFT1025, Programmation 2 Jian-Yun Nie
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Classes abstraites et Interfaces
.Net Remoting.
Langage Oriente Objet Cours 2.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Test et débogage Tests unitaires. Gestion d’erreurs. Notion d’état, de pré-condition et de post-condition. Assertion. Traces de programme. Débogueur et.
Structures de données IFT Abder Alikacem Gestion des exceptions Département dinformatique et de génie logiciel Édition Septembre 2009.
Introduction au paradigme orienté-objet (suite)
P. Van Roy, LINF1251 LINF1251: Le Langage Java Peter Van Roy Département dIngénierie Informatique, UCL
Package IFT1025 Jian-Yun Nie.
PROGRAMMATION MULTI-TÂCHES (MULTITHREADING)
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Module 2 : Préparation de l'analyse des performances du serveur
CSI1502 Principes fondamentaux en conception des logiciels
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é.
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 6. Gestion des erreurs et des exceptions : Fonctionnement.
Programmer en langage c
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
Objets et classes.
GESTION ET TRAITEMENT DES ERREURS
Programmation objet La base.
Le contenu est basé aux transparents du 7 ème édition de «Software Engineering» de Ian Sommerville«Software Engineering» de Ian Sommerville B.Shishedjiev.
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
C++ L’HERITAGE Fayçal BRAÏKI DUT INFORMATIQUE.
Cours du 5 novembre.
MOCK.
Héritage H. Batatia. plan Notion (que signifie l’héritage) Ecriture en java Héritage multiple (interdit) Instanciation (partie propre et partie héritée)
Les classes Introduction aux Langages Orientés Objets
Master 1 SIGLIS Intégration des données dans l’entreprise Stéphane Tallard JDBC: Java Database Connectivity Master 1 SIGLIS1JDBC.
La programmation par objets Principes et concepts Etude de Smalltalk.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
6ième Classe (Mercredi, 17 novembre) CSI2572
Héritage Conception par Objet et programmation Java
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 2 – Java Premiers pas Master 1 SIGLIS1 Java Lecteur - Chapitre 2 - Java Premiers Pas.
Introduction à la Programmation Orientée Objet
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
Exception Handling "Unfortunately, it's almost accepted practice to ignore error conditions, as if we're in a state of denial about errors." Bruce Eckel.
Master 1 SIGLIS Jave Lecteur Stéphane Tallard Chapitre 5 – Correction TD.
PRÉSENTATION AGL LES TESTS LOGICIELS LES TEST LOGICIELS 1 Mickael BETTINELLI Brandon OZIOL Gaétan PHILIPPE Simon LUAIRE.
Java Réalisé par: Mouna POKORA. PLAN: Définition : Historique: Caractéristiques: un langage orienté objet: un langage interprété : un langage portable:
Transcription de la présentation:

Héritage Et la réutilisation de code

2 Une nouvelle entreprise u Est-ce qu’une petite entreprise peut survivre sur la vente de composants logiciels ? äUn composant est une classe (ou ensemble des classes) u Avec la documentation correspondante ! äLes librairies Java (JDK) montrent qu’une clientèle pour des composants pré-développés existe u Les éléments en faveur de l’entreprise ä1. Elle est reliée aux clients via l'Internet  Et le nombre de clients potentiels est gigantesque  Elle livre ses marchandises directement aux clients u Frais de transport minimaux !

3 Succès de l’entreprise u 2. Les clients (des programmeurs) savent que le développement coûte äIl est plus sage d’acheter un composant que de le faire soi- même  Un composant est complexe (p.ex: un driver) et on ne possède ni le temps ni le savoir faire pour le développer  Un composant est un standard, et on est obligé de l’utiliser u P.ex: les drivers pour les dispositifs matériels, le code pour le chiffrement, les outils systèmes de communication  La programmation d’un composant non-erroné reste une tâche difficile

4 Succès de l’entreprise u 3. Une classe est liée dynamiquement aux applications äUn programmeur n’a pas besoin d’avoir tout le code à la compilation ou à l’installation  Parmi ses clients se trouvent tout ceux qui font de la maintenance et la mise à jour des applications !!! u 4. Les clients peuvent espérer un niveau supérieur de äFiabilité : les composants sont utilisés, et donc testés, plus souvent äCompatibilité : assurée par la présence d’interfaces standards dans le système

5 Succès de l’entreprise... u 5. On aide le client à faire du prototypage rapide (rapid prototyping) äLe but du client est toujours de développer le plus vite possible äMais parfois la spécification n’est pas claire ; le client ne sait pas à 100% ce qu’il veut  Alors on construit une première version pour voir si elle marche et puis on le modifie petit à petit u La programmation à base de composants facilite le prototypage rapide puisque les composants sont encapsulés

6.. mais les problèmes surviennent ! u Après un moment, le gestion du rayon des composants commence à poser de problèmes äElle dépend trop des notions de classe et d’objet ! u 1. Trop de redondance dans le code äP.ex: les classes Carré et Cercle (dans Cours 2) possèdent 80% de code en commun !  Trop de temps perdu dans le développement  Rappel: le but dans le développement est de réutiliser l’expérience ainsi que le code (pour le fournisseur aussi !)

7 Les problèmes de l’entreprise u 2. Un composant ne satisfait pas les besoins à 100% äUn cercle possède une couleur ne peut pas être représenté par notre classe Cercle äLa classe StockProduit (cf. TP 2) est-elle adéquate pour la représentation des livres dans une bibliothèque ? äUn document dans une bibliothèque peut-être représenté par une classe Document  Les messages comprennent date(), texte()  Mais désormais, un document est multimédia u Il contient du son, des images, u Comment peut-on adapter les classes comme Document ?

8 Les problèmes de l’entreprise u 3. Recherche de composants äComment retrouver le composant qu’on cherche dans un vaste rayon de classes ?  Parfois on recherche un ensemble de classes pour une tache (un framework ou un pattern)  On peut chercher une classe à partir de son interface ou d’un descriptif textuel de son comportement u Ces besoins nécessitent l’utilisation d’une base de données avancée äEt lorsqu’on trouve une classe, comment vérifier qu’elle corresponde exactement aux besoins du programmeur ?

9 Les problèmes de l’entreprise u 4. Protection de droits de vente (le piratage) äMême si l’entrepreneur demande de paiement pour ses composants  Ses composants peuvent être facilement réutilisés ou copiés sans que l’entreprise ne reçoive un paiement äCe problème nécessite des solutions techniques ainsi que juridiques  Aspects techniques : cours sur la mise en œuvre des langages orientés-objets  Aspects juridiques : cours Outils-Internet (D. Tsichritzis)

10 Héritage - Rappel u L'héritage permet de définir une classe B à partir d’une classe existante A äB est une sous-classe de A äS’adresse aux problèmes 1 et 2 de l’entreprise u B peut comprendre plus de messages qu’A u B peut définir ses propres versions des méthodes qui sont définies dans A äCe mécanisme s’appelle overloading

11 Exemple de Carré et Cercle u Les classes Carré et Cercle partagent äUn positionnement sur la grille  Les variables x et y äLes méthodes xCoord(), yCoord(), dessiner(), et bouger() u Approche programmation objet äOn définit une classe Forme qui contient ces variables et ces méthodes äCarré et Cercle héritent de la classe Forme

12 Exemple: classe Forme class Forme{ int x, y; public Forme(int a, int b) { x=a; y=b;} public void bouger(int a,int b) { x = a; y = b;} /* La méthode surface() */ public float surface(){ return 0;} public int xCoord() { return x;} public int yCoord() { return y;} public void dessiner() { Ecran.afficher(this) } }

13 Exemple: classe Cercle class Cercle extends Forme{ int radius; /* les variables x et y sont définies implicitement */ public Cercle(int a, int b, int r) {/* on invoque le constructeur de la super-classe */ super(a,b); radius = r;} public float surface() { return 3.14*radius * radius} /* Les méthodes bouger(), xCoord(), yCoord(), dessiner() sont implicitement définies */ } Note : Over-loading de la méthode surface()

14 Utilisation de l’héritage u Regrouper les fonctionnalités communes äP.ex: la classe Forme regroupe la fonctionnalité commune aux classes Carré et Cercle äEn Java, toute classe hérite directement ou indirectement de la classe Object  La classe Object définit les méthodes dont toute classe a besoin u P.ex: les sémaphores pour la synchronisation u L’héritage est donc un moyen important pour la réutilisation du code et de l’expérience äOutil important de développement

15 Utilisation de l’héritage u L’héritage permet la spécialisation d’un composant äP.ex: Cercle est une forme spécialisée de Forme u L’héritage définit une relation est-une entre classes u Cercle est une (spécialisation de la classe) Forme äC-à-d : un Cercle est-une Forme  On peut donc utiliser un Cercle au lieu d’une Forme  Voilà pourquoi les objets de la classe Cercle doivent comprendre tous les messages qui sont compris par la classe Forme äOutil important d’exécution

16 L’utilisation de l'héritage Cercle c1 = new Cercle(2,3,4); Carre c2 = new Carre (3,6,7,4); Forme F; F = c1; F.dessiner() System.out.print(«Surface est» + F.surface()); F = c2; F.dessiner() System.out.print(«Surface est» + F.surface()); u La relation est-une spécifie quand un composant peut être remplacé par un autre u Liaison dynamique: La variable F peut référencer un objet de la classe Forme, de la classe Carré, ou de la classe Cercle au cours de son existence

17 L’utilisation de l'héritage u La liaison dynamique est la base de l'extensibilité dans la programmation objet  Et de la maintenance des systèmes äPour “F.surface()”, on ne sait pas à la compilation, quel est le code qui sera exécuté  La méthode surface() de Forme, de Carré ou de Cercle u À la différence des librairies en C où le code est recherché à la compilation  De nouveau code (via des nouvelles classes) peut être introduit dynamiquement sans même arrêter l’application qui tourne  Ceci permet de remplacer un composant (p.ex: un objet Forme) avec un autre (p.ex: un objet Cercle)

18 Héritage multiple u Dans quelques langages à objets, une classe peut hériter de plusieurs classes äUne classe peut ainsi être définie comme une généralisation de plusieurs classes äC++ et Eiffel mettent en œuvre de l'héritage multiple u La classe Mémoire-Sûre représente une page de mémoire qu’on peut chiffrer et déchiffrer CryptoMemoire Memoire Sûre Chiffrer() et Déchiffrer() Chiffrer() et Déchiffrer(), lire(), écrire() et swap() lire(), écrire() et swap()

19 Héritage multiple u L’héritage multiple pose des problèmes pour le gestion de noms äP.ex: supposons que la classe Mémoire et la classe Crypto définissent une variable r äSelon le principe de l’héritage, toute variable déclarée dans une classe est implicitement déclarée dans une sous-classe äAlors, quelle est la signification de r dans la classe Mémoire-Sûr ? u Ce problème a poussé les concepteurs de Java de n’utiliser que de l’héritage simple

20 Les 2 buts de l’héritage (multiple) u 1. Réutiliser du code de plusieurs sources dans une nouvelle classe u 2. Construire une classe qui peut être utilisée en place de plusieurs classes äP.ex: un objet Mémoire-Sûre peut être utilisé en place d’un objet Crypto, ou bien en place d’un objet Mémoire u En Java, une classe peut implanter plusieurs interfaces äAinsi, Java satisfait le deuxième but

21 La classe Object u Java possède une seule hiérarchie des classes  À la différence de C++ äLa classe Object se trouve à la racine et implante les méthodes de base u P.ex: equals(), hashcode(), clone(), getClass()  Donc, tout objet comprend un minimum de messages u La généricité äP.ex: Une classe Chiffrement peut contenir une méthode  public Object chiffrer(Object obj) qui opère sur n’importe quel objet !! u De n’importe quelle classe !

22 Coût de l'héritage u Un programme objet est généralement plus lent que le même programme écrit en C äPrincipalement à cause de la liaison dynamique de code u Complexité des programmes : äL’effet yo-yo : le comportement attendu d’un programme peut être défait par des sous-classes dynamiquement liées à l’application  Pour comprendre un système, il faut comprendre toute sous- classe

La programmation objet L’enrichissement du modèle - 1. La destruction d’objets - 2. Le traitement des exceptions

24 La destruction d’objets u L'opérateur new() exécuté sur une classe crée un objet de cette classe äIl n’y a pas d'opérateur pour détruire un objet !  Et pour optimiser l’utilisation de la mémoire primaire de la machine, il faut enlever les objets qui ne sont pas utilisés u En C, les opérateurs malloc() et free() alloue et détruit les régions mémoires äMais leur utilisation s'avère trop susceptible aux erreurs de programmation  Dans la programmation objet, un objet doit rester dans l’application jusqu’au moment où le runtime le supprime

25 La destruction d’objets u Un objet consomme du CPU & de la mémoire äEt doit être détruit lorsqu’il n’est plus utilisé par l’application u Un objet est une miette s’il n’est plus utilisable äSi aucun autre objet ne possède une référence sur cet objet äCar on ne peut pas envoyer un message à cet objet et donc, cet objet ne peut pas contribuer à l’application u Un processus de ramasse-miettes (garbage collection) tourne périodiquement pour enlever les miettes de la mémoire

26 Les exceptions u Le modèle d’objets simplifie la tolérance aux erreurs äUne erreur est contenue au sein d’un objet  P.ex: un débordement de valeur dans la méthode surface() de Carré d’un objet n’influence pas les données dans un autre objet u Il faut un moyen de récupérer des erreurs, car äUn objet client qui envoie surface() à un objet (provoquant un débordement de valeur) reste bloqué äP.ex: on envoie un message à un objet qui se trouve sur une autre machine, et le réseau et stoppé ….  (Trop) fréquente dans la programmation sur l’Internet

27 Les exceptions u Une exception est un événement anormal qui peut survenir dans un programme äElle doit être traitée pour que le programme puisse continuer u P.ex: en Java, FileNotFoundException, NullPointerException, ArrayIndexOutOfBoundsExceprion, UnknownHostException u 1. Il faut qu’un objet soit capable de signaler (throw) une exception à un autre objet u 2. Il faut qu’un objet puisse être notifié (catch) d’une exception

28 Les exceptions /* Dans Cercle */ public float surface() throws OverFlowException { if(radius>100000) /* pour éviter un débordement */ throw new OverFlowException(); else return radius*radius*3.14; } Pour signaler une exception u Une méthode doit spécifier dans son entête quelles sont les exceptions possibles äL’exception forme partie du contrat entre le programmeur et le client u Une exception est signalée avec l’opérateur throw

29 Les exceptions main(){ Cercle c1 = new Cercle(2,3,4); try {float f = c1.surface()} catch (OverFlowException e) { System.out.println("Caught exception" + e.toString();} finally {System.out.println("finally s’exécute toujours"); } u Dans le client, il faut vérifier si la méthode invoquée génère une exception ou pas ätry - catch - finally u try: essayer le code u catch : ce code s’exécute si l’objet appelé génère une exception

30 Les exceptions u Dans Java, une exception est aussi un objet ! äOn le crée de sa classe  new OverFlowException() äOn peut lui envoyer des messages  e.toString() äOn peut passer l’exception en paramètre à un autre objet äLa classe Throwable hérite de la classe Object class OverFlowException extends java.lang.Throwable{ public OverFlowException(){} public String toString(){ return new String(“Débordement de valeur”); }