Héritage et spécialisation/généralisation. Faculté des Sciences / Université de Montpellier Conception et programmation par objets

Documents pareils
UML. Diagrammes de classes (suite) Delphine Longuet.

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Diagramme de classes

Chapitre VI- La validation de la composition.

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Héritage presque multiple en Java (1/2)

Programmer en JAVA. par Tama

Bases Java - Eclipse / Netbeans

UML (Diagramme de classes) Unified Modeling Language

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Classes et Objets en Ocaml.

Génie Logiciel avec Ada. 4 février 2013

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

GOL502 Industries de services

Initiation à JAVA et à la programmation objet.

Premiers Pas en Programmation Objet : les Classes et les Objets

TP1 : Initiation à Java et Eclipse

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

TD/TP PAC - Programmation n 3

Objets et Programmation. origine des langages orientés-objet

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Auto-évaluation Programmation en Java

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Traduction des Langages : Le Compilateur Micro Java

Généricité. en Java. (polymorphisme paramétrique) Philippe GENOUD UJF Janvier

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

TP, première séquence d exercices.

OCL - Object Constraint Language

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Généralités sur le Langage Java et éléments syntaxiques.

2 e édition JAVA 5 et 6. Jérôme Bougeault. TSoft et Groupe Eyrolles, 2003, 2008, ISBN :

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Programmation Objet Java Correction

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

INITIATION AU LANGAGE JAVA

Procédure de sauvegarde pour AB Magique

PG208, Projet n 3 : Serveur HTTP évolué

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Remote Method Invocation (RMI)

Java c est quoi? Java pourquoi?

TP1. Outils Java Eléments de correction

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Université de Bangui. Modélisons en UML

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Générer du code à partir d une description de haut niveau

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Langage Java. Classe de première SI

Algorithmique et Programmation, IMA

TD3: tableaux avancées, première classe et chaînes

Programmation Par Objets

Support de cours et TD Programmation Orientée Objet

Environnements de développement (intégrés)

Synchro et Threads Java TM

Algorithmique et programmation : les bases (VBA) Corrigé

TD/TP PAC - Programmation n 3

3. UML - Unified Modeling Language Diagrammes statiques

Etude d Algorithmes Parallèles de Data Mining

Information utiles. webpage : Google+ : digiusto/

Cours 1: Java et les objets

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

Certificat Big Data - Master MAthématiques

PROGRAMMATION PAR OBJETS

F. Barthélemy. 17 mai 2005

STAGE IREM 0- Premiers pas en Python

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Table des matières Sources

Ingénérie logicielle dirigée par les modèles

Machines virtuelles fonctionnelles (suite) Compilation ML Java

IFT2255 : Génie logiciel

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Intergiciels pour la répartition CORBA : Common Object Request Broker. Patrice Torguet torguet@irit.fr Université Paul Sabatier

Applet pour visualiser les variables «automate» notifiées

Cours No 3 : Identificateurs, Fonctions, Premières Structures de contrôle.

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Plan Pédagogique du cours

2. Comprendre les définitions de classes

Programmation par les Objets en Java

Programmation en Java IUT GEII (MC-II1) 1

30.avr.10 Présentation miniprojet. 9.mars.10 Cours 3 4.mai.10 Cours C mars.10 Cours 4 11.mai.10 Cours C++ 2

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007

Analyse et Conception objet du logiciel Analyse et conception objet du logiciel : Méthode de conception objet et notation UML.

Sélection du contrôleur

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

Java - RMI Remote Method Invocation. Java - RMI

Design patterns. Design patterns - définition. Design patterns - avantages

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Les frameworks au coeur des applications web

Cours d initiation à la programmation en C++ Johann Cuenin

Programmation C++ (débutant)/instructions for, while et do...while

Complémentaire Santé Obligatoire des Salariés

Logiciel Libre Cours 3 Fondements: Génie Logiciel

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Rappel sur les bases de données

Transcription:

Héritage et spécialisation/généralisation Faculté des Sciences / Université de Montpellier Conception et programmation par objets 2015

Héritage et spécialisation/généralisation Concept Extension : ensemble des objets couverts Intension : prédicats, caractéristiques des objets couverts Classes et interfaces Java, classes C++ Concept Rectangle Extension : ensemble des rectangles Intension : ensemble des caractéristiques des rectangles, posséder quatre côtés parallèles 2 à 2, deux côtés consécutifs forment un angle droit, notion de largeur, de hauteur, etc.

Héritage et spécialisation/généralisation Classification par organisation des concepts inclusion des extensions héritage et raffinement des intensions Concept Carré spécialise Concept Rectangle Point de vue extensionnel : l ensemble des carrés est inclus dans l ensemble des rectangles Point de vue intensionnel : les propriétés des rectangles s appliquent aux carrés et se spécialisent (largeur = hauteur)

Héritage et spécialisation/généralisation Cas d étude Contexte d une agence immobilière Gestion de la location d appartement Appartement tous sont décrits par : une adresse, une année de construction, une superficie, un nombre de pièces deux sous-catégories nous intéressent les appartements de luxe décrits en plus par leur quartier les appartements normaux décrits en plus par les nuisances de leur environnement

Solution 1 Réaliser deux classes Sans spécialisation/généralisation Inconvénients répétition des attributs et de parties dans le code des méthodes risque d incohérence (sur les parties communes) entre les différentes sortes d appartements toute modification sur les parties communes demandera d intervenir à plusieurs endroits (avec de nouveaux risques d erreurs)

Solution 2 Réaliser une seule classe Sans spécialisation/généralisation Inconvénients certains attributs (quartier, nuisance) ne sont pas toujours utilisés on ne peut pas ajouter facilement une sous-catégorie (ex. appartement de fonction)

La solution de la spécialisation/généralisation Solution spécifique des approches à objets Réaliser trois classes et les connecter par spécialisation Avantages pas de répétition, pas de risque d incohérence, pas d attributs inutiles facile à étendre, par une nouvelle sous-classe

Quelques instances

Précisions sur les relations de généralisation/spécialisation Discriminant critère de classification est représenté par une classe et par une annotation sur un ensemble de relations de spécialisation/généralisation Contraintes annotent, entre accolades, un ensemble de relations de spécialisation/généralisation il en existe quatre (deux paires) : complet, incomplet : les sous-classes couvrent (ne couvrent pas) l ensemble des objets de la superclasse disjoint, chevauchement : les sous-classes ne peuvent pas (peuvent) avoir d instances communes

Discriminants et contraintes il existe des appartements autres que de luxe ou normaux un appartement ne peut être en même temps de luxe et normal un appartement est soit privé, soit pour une entreprise (pas d autre cas) un appartement peut être utilisé à la fois pour un usage privé et pour un usage par une entreprise

Traduction en Java Listing 1 Classe Appartement / attributs 1 p u b l i c c l a s s Appartement { 2 p r i v a t e S t r i n g a d r e s s e ; 3 p r i v a t e i n t anneeconst ; 4 p r i v a t e f l o a t s u p e r f i c i e ; 5 p r i v a t e i n t n b P i e c e s ; 6..... 7 }

Traduction en Java Listing 2 Classe Appartement de luxe/ attributs 1 p u b l i c c l a s s AppartementLuxe extends Appartement { 2 p r i v a t e S t r i n g q u a r t i e r ; 3..... 4 }

Traduction en Java Listing 3 Classe Appartement de normal / attributs 1 p u b l i c c l a s s AppartementNormal extends Appartement { 2 p r i v a t e A r r a y L i s t <Nuisance > n u i s a n c e s ; 3..... 4 }

Traduction en Java Listing 4 enum Nuisance 1 p u b l i c enum Nuisance { 2 a u t o r o ute, a e r o p o r t, d e c h e t t e r i e, c e n t r e _ v i l l e, 3..... 4 }

Création d objets Listing 5 Creation 1 AppartementLuxe a1 = new AppartementLuxe (... ) ; 2 Appartement a2 = new AppartementLuxe (... ) ; 3 Object a3 = new AppartementLuxe (... ) ; Les lignes 2 et 3 sont des affectations polymorphes : la variable a un type (Appartement) différent du type de l instance (AppartementLuxe) Notez que l affectation polymorphe se fait "en remontant" : on affecte une instance de la sous-classe à une variable de la superclasse Object est la super-classe implicite de toutes les classes en Java.

Constructeurs / dans la super-classe Listing 6 Constructeurs dans la super-classe 1 p u b l i c c l a s s Appartement { 2 p u b l i c Appartement ( ) 3 { a d r e s s e = " inconnue " ; anneeconst = 1970; s u p e r f i c i e = 1 5 ; n b P i e c e s = 1 ; } 4 p u b l i c Appartement ( S t r i n g ad, i n t ac, f l o a t s, i n t n ) 5 { a d r e s s e = ad ; anneeconst = ac ; s u p e r f i c i e = s ; n b P i e c e s = n ; } 6 } Règle Toujours écrire un constructeur sans paramètre Le constructeur initialise les attributs propres à la classe

Constructeurs / dans la sous-classe Listing 7 Constructeurs dans la sous-classe 1 p u b l i c c l a s s AppartementLuxe extends Appartement { 2 p u b l i c AppartementLuxe ( ) { q u a r t i e r = " inconnu " ; } 3 p u b l i c AppartementLuxe ( S t r i n g ad, i n t ac, f l o a t s, i n t n, S t r i n g q ) 4 { super ( ad, ac, s, n ) ; q u a r t i e r = q ; } 5 } Règle super : transmet les paramètres au constructeur de la super-classe La super-classe doit disposer d un constructeur admettant ces paramètres

Constructeurs / Appel Listing 8 Creation 1 Appartement a1 = new AppartementLuxe ( ) ; 2 Appartement a2 = new AppartementLuxe ( " 8, ch. L i l a s, Mulhouse ", 1988, 150, 4, "La p e t i t e r i v i e r e " ) ; Constructeurs exécutés les constructeurs de toutes les super-classes sont appelés du haut vers le bas Ligne 1 : Object() ; Appartement() ; AppartementLuxe() Ligne 2 : Object() ; Appartement(String ad, int ac, float s, int n) ; AppartementLuxe(String ad, int ac, float s, int n, String q)

Définition des méthodes Trois configurations Héritage : la méthode est écrite dans une classe et accessible dans ses sous-classes Masquage : la méthode est écrite dans une classe et entièrement réécrite dans une sous-classe Spécialisation : la méthode est écrite dans une classe ; dans la sous-classe on fait référence à la méthode de la super-classe pour modifier légèrement le comportement initial

Héritage de méthode Listing 9 Héritage de méthode 1 p u b l i c c l a s s Appartement { 2... 3 p u b l i c f l o a t v a l e u r L o c a t i v e B a s e ( ) 4 { return s u p e r f i c i e 5 (1 + n b P i e c e s /n ) ; } 5 } 6 p u b l i c c l a s s AppartementLuxe extends Appartement { 7... 8 // r i e n q u i c o n c e r n e l a v a l e u r l o c a t i v e de base 9 } 10... 11 AppartementLuxe a1 = new AppartementLuxe ( " 8, ch. L i l a s, Mulhouse ", 1988, 150, 4, "La p e t i t e r i v i e r e " ) ; 12 System. out. p r i n t l n ( a1. v a l e u r L o c a t i v e B a s e ( ) ) ;

Masquage de méthode Listing 10 Masquage de méthode 1 p u b l i c c l a s s Appartement { 2 p u b l i c S t r i n g t o S t r i n g ( ) { return " appt a d r e s s e ="+ a d r e s s e + " s u p e r f i c i e = "+s u p e r f i c i e+" m2" ; } 3 } 4 p u b l i c c l a s s AppartementNormal extends Appartement { 5 p u b l i c S t r i n g t o S t r i n g ( ) { return " annee de c o n s t r u c t i o n = "+anneeconst ; } 6 } 7... 8 Appartement a2 = new AppartementNormal ( " 8, ch. L i l a s, Mulhouse ", 1988, 150, 4, Nuisance. c e n t r e _ v i l l e ) ; 9 System. out. p r i n t l n ( a2. t o S t r i n g ( ) ) ; Ligne 11 : annee de construction = 1988

Spécialisation de méthode Listing 11 Spécialisation de méthode 1 p u b l i c c l a s s Appartement { 2... 3 p u b l i c S t r i n g t o S t r i n g ( ) { return " appt a d r e s s e ="+ a d r e s s e + " s u p e r f i c i e = "+s u p e r f i c i e+" m2" ; } 4 } 5 p u b l i c c l a s s AppartementLuxe extends Appartement { 6... 7 p u b l i c S t r i n g t o S t r i n g ( ) { return super. t o S t r i n g ( )+" q u a r t i e r = "+q u a r t i e r ; } 8 } 9... 10 Appartement a3 = new AppartementLuxe ( " 8, ch. L i l a s, Mulhouse ", 1988, 150, 4, "La p e t i t e r i v i e r e " ) ; 11 System. out. p r i n t l n ( a3. t o S t r i n g ( ) ) ; Ligne 11 : appt - adresse = 8, ch. Lilas, Mulhouse superficie = 150 m2 quartier = La petite riviere

Classes et méthodes abstraites Loyer Le loyer se calcule comme produit de : la valeur locative de base le coefficient modérateur Coefficient modérateur Le coefficient modérateur vaut : 1.1 pour les appartements de luxe 1-0.1*nombre de nuisances La méthode calculant le coefficient modérateur est donc nécessaire pour écrire la méthode de calcul de loyer, mais elle ne peut être écrite de manière générale pour les appartements.

Classes et méthodes abstraites Listing 12 Classe et méthode abstraite 1 p u b l i c abstract c l a s s Appartement { 2... 3 p u b l i c abstract f l o a t c o e f f ( ) ; // pas de c o r p s!!! 4 } 5... 6 p u b l i c c l a s s AppartementNormal extends Appartement { 7... 8 p u b l i c f l o a t c o e f f ( ) 9 { return 1 0. 1 n u i s a n c e s. s i z e ( ) ; } 10 } 11... 12 p u b l i c c l a s s AppartementLuxe extends Appartement { 13... 14 p u b l i c f l o a t c o e f f ( ) { return 1. 1 ; } 15 }

Classes et méthodes abstraites la classe abstraite peut toujours servir de type pour des variables on ne peut plus créer d instance de la classe abstraite (car sa définition est incomplète) Listing 13 Classe abstraite 1 Appartement a1 = new AppartementLuxe ( " 8, ch. L i l a s, Mulhouse ", 1988, 150, 4, "La p e t i t e r i v i e r e " ) ; 2... 3 // DEVIENT IMPOSSIBLE : Appartement a2 = new Appartement ("8, ch. L i l a s, Mulhouse ", 1988, 150, 4) ;

Classes et méthodes abstraites Représentation en UML (italiques, stéréotype)

Choix d une méthode à appeler Liaison dynamique Lorsqu une méthode est appelée, elle est recherchée à partir de la classe de l objet et en remontant vers ses superclasses jusqu à la trouver On parle de liaison dynamique car le choix est réalisé lors de l exécution Listing 14 Classe abstraite 1 Appartement a1 = new AppartementLuxe ( " 8, ch. L i l a s, Mulhouse ", 1988, 150, 4, "La p e t i t e r i v i e r e " ) ; 2 System. out. p r i n t l n ( a1. l o y e r ( ) ) ; Exécute : loyer et valeurlocativebase de Appartement ; coeff de AppartementLuxe