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



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

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

Chapitre VI- La validation de la composition.

TP1 : Initiation à Java et Eclipse

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

UML. Diagrammes de classes (suite) Delphine Longuet.

Initiation à JAVA et à la programmation objet.

Une introduction à Java

Programmer en JAVA. par Tama

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

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

Traduction des Langages : Le Compilateur Micro Java

Premiers Pas en Programmation Objet : les Classes et les Objets

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

INITIATION AU LANGAGE JAVA

TD/TP PAC - Programmation n 3

UML (Diagramme de classes) Unified Modeling Language

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

Diagramme de classes

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

Programmation par les Objets en Java

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

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

Initiation à la programmation orientée-objet avec le langage Java

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 )

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

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

Université de Bangui. Modélisons en UML

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

TD/TP PAC - Programmation n 3

Remote Method Invocation (RMI)

TP, première séquence d exercices.

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

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

basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB Olivier Augereau Formation UML

Cours 1: Java et les objets

Java c est quoi? Java pourquoi?

Programmation Orientée Objet application au langage Java Version Novembre 2007

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

Java Licence professionnelle CISII,

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

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

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

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

GOL502 Industries de services

Programmation Orientée Objet

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

OCL - Object Constraint Language

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Synchro et Threads Java TM

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

Langage Java. Classe de première SI

Java Licence Professionnelle CISII,

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

Programmation MacOSX / ios

TP1 : Initiation à Java et Eclipse

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

Support de cours et TD Programmation Orientée Objet

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

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

Auto-évaluation Programmation en Java

Cours de Java. Sciences-U Lyon. Java - Introduction Java - Fondamentaux Java Avancé.

Chapitre VIII. Les bases de données. Orientées Objet. Motivation

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

GOL-502 Industrie de services. Travaux Pratique / Devoir #7

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

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Programmation en Java IUT GEII (MC-II1) 1

Programmation Objet Java Correction

Par Laurent DESECHALLIERS. Mastère Spécialisé en Management de Projets en Milieu Industriel. CESI de Rouen Promotion 2002/2003.

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Chapitre 2. Classes et objets

Anne Tasso. Java. Le livre de. premier langage. 6 e édition. Groupe Eyrolles, 2000, 2002, 2005, 2006, 2008, 2010, ISBN :

Programmer en Java. OC Informatique GYMNASE DE BURIER

Gestion distribuée (par sockets) de banque en Java

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

La gestion des exceptions

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Package Java.util Classe générique

Classes et Objets en Ocaml.

Développement d un interpréteur OCL pour une machine virtuelle UML.

UML et les Bases de Données

as Architecture des Systèmes d Information

3. UML - Unified Modeling Language Diagrammes statiques

INF 321 : mémento de la syntaxe de Java

Approche Contract First

Projet de programmation (IK3) : TP n 1 Correction

Projet Active Object

Plan du cours. Historique du langage Nouveautés de Java 7

RMI le langage Java XII-1 JMF

Programmation Par Objets

Patrons de Conception (Design Patterns)

Tp 1 correction. Structures de données (IF2)

La plate-forme DIMA. Master 1 IMA COLI23 - Université de La Rochelle

Rappel sur les bases de données

Présentation générale de la méthode orientée objet : O.M.T. (Rumbaugh & al.)

Interfaces graphiques avec l API Swing

Transcription:

Langage et Concepts de Programmation Objet Travaux Dirigés no2 Pôle Informatique École Nationale Supérieure des Mines de St-Etienne Vous trouverez plus de détails sur les concepts abordés lors de ce TD dans le livret de cours : Chapitre 3 : variables et méthodes de classes et visibilité des membres Chapitre 4 : héritage Annexe B : la notation UML des diagrammes de classes 1 Attributs et Méthodes d instance ou de classe Jusqu à présent, les attributs et méthodes que nous avons définis étaient attachés à une instance particulière. La classe définit le nombre et le type des attributs ainsi que les instructions de traitement attachées à des opérations, mais la valeur de chaque attribut et l exécution des opérations restent attachées à un objet donné, instance de cette classe. Néanmoins, il est parfois utile de pouvoir représenter un attribut dont la valeur est partagée par toutes les instances d une classe, de même qu il peut y avoir des méthodes dont l exécution est indépendante de tout objet. Ces membres particuliers sont appelés attributs ou méthodes de classe par opposition aux attributs ou méthodes d instance. Attribut Méthode d instance Chaque objet encapsule une variable distincte (dont la valeur est propre à cet objet). La méthode est exécutée sur un objet donné (habituellement, ses instructions de traitement font référence à d autres membres de l instance) de classe Une unique variable attachée à la classe, partagée par toutes les instances de la classe. La méthode est exécutée indépendamment de tout objet (elle peut éventuellement faire référence à d autres membres de classe). Certaines classes ne contiennent que des attributs et méthodes de classe. Ces classes ne disposent pas de constructeur (il est impossible de les instancier en des objets) car elles fournissent des méthodes utilitaires générales. C est le cas par exemple de la classe java.lang.math qui implémente quelques opérations de traitement mathématique classique (cos, log, puissance, max de deux nombres, ). En UML : les attributs et méthodes de classe sont soulignés. La classe Livre décrite dans la figure ci-dessous montre un exemple d attribut et de méthode de classe. On peut remarquer dans cet exemple qu un unique compteur est attribué à la classe Livre afin de dénombrer tous les livres et de leur attribuer un numéro de série. Pour récupérer la valeur de ce compteur, indépendamment de l instance, nous créons une méthode getnombretotaldelivres() qui renvoie la valeur de nblivres. En Java : la déclaration d un attribut ou d une méthode de classe nécessite l ajout du mot-clé. Pour y faire référence, on utilise le nom de la classe comme si c était un objet. Par exemple : 1

Livre - nblivres : Entier - titre : Chaine - auteur : Chaine - retourdepret : Date - id : Entier + Livre(titre : Chaine, auteur : Chaine) + gettitre() : Chaine + getauteur() : Chaine + getquantité() : Entier + getnombretotaldelivres() : Entier + getid() : Entier + emprunte(lecteur : Personne) : Date FIGURE 1 Exemple d un attribut et d une méthode de classe { nblivres = 0 ; String titre ; String auteur ; id ; Livre(String titre, String auteur) {.titre = titre ;.auteur = auteur ; id = ++nblivres ; getnombretotaldelivres() { nblivres ; getid() { id ; main(string[] args) { System.out.println( Total : + Livre.getNombreTotalDeLivres()); Livre l1 = Livre( Germina, Zola ); System.out.println( Total : + Livre.getNombreTotalDeLivres()); Livre l2 = Livre( Le Seigneur des anneaux, Tolkien ); System.out.println(l1); System.out.println( Total : + Livre.getNombreTotalDeLivres()); L exécution de cette classe affiche le résultat suivant : Total : 0 Total : 1 Livre@4310b053 Total : 2 Par convention, les attributs de classe non modifiables (mot-clé final) représentant des constantes sont entièrement écrits avec des majuscules. Exemples (issus de l API du SDK) : Attribut de classe : PI est un attribut de la classe java.lang.math. Sa valeur est commune à tous les objets ; Méthode de classe : int parseint(string) est une méthode de la classe java.lang.integer. Elle tra- 2

duit une chaîne de caractères en un entier. Son exécution est indépendante de tout objet et n utilise que l argument fourni en paramètre. 2 La relation d héritage Il arrive que certaines classes aient en commun des variables, méthodes de traitement ou même des signatures de méthode. Le mécanisme d héritage entre classes permet de factoriser ces membres communs. Le principe de l héritage est de créer une relation, dite d héritage, entre deux classes pour définir qu une classe est une spécialisation (on parle aussi de dérivation) de l autre. On dit alors que la classe plus spécifique hérite de la classe la plus générale. La factorisation de membres communs est rendue possible lorsque plusieurs classes héritent d une même classe car celle-ci encapsule tous ces membres communs. 2.1 Principe général Compte # solde : Entier - propriétaire : Personne + crédite(montant : Réel) + consulter() : Réel CompteEpargne - txinteret : Réel + ajouteinterets() FIGURE 2 Exemple d héritage L idée principale de l héritage est d organiser les classes de manière hiérarchique. La relation d héritage est unidirectionnelle et, si une classe B hérite d une classe A, on dira que B est une sous-classe de A. Cette notion de sous-classe signifie que la classe B est un cas particulier de la classe A et donc que les objets instanciant la classe B instancient également la classe A. Dans de nombreuses approches de la programmation orientée-objet, seul l héritage simple est permis, c est-à-dire qu une classe n hérite au plus que d une autre classe. En UML : L héritage se représente par une flèche à la pointe creuse. La figure 2 décrit deux classes Compte et CompteEpargne. La classe CompteEpargne hérite de la classe Compte. Concrètement, cet héritage se traduit par le fait que toute instance de CompteEpargne est également une instance de Compte. Par conséquent, tous les membres de Compte sont également encapsulés dans la classe CompteEpargne. En Java : Le mot-clé extends est utilisé dans l en-tête de déclaration d une classe pour définir une relation d héritage. Il est suivi du nom de la classe dont hérite la classe comme dans l exemple suivant : Compte { En Java : Toute classe hérite directement ou indirectement de la classe Object. Cette classe notamment une méthode tostring() qui renvoie une chaîne de caractères représentant l instance de l objet. Par défaut, cette méthode renvoie une chaîne de format <nom de la classe>@<un nombre hexadecimal> (par exemple, Compte@4310b053). 2.2 Visibilité des membres Une classe encapsule tous les membres de la classe dont elle hérite mais ceux-ci n y sont pas forcément visibles de la même manière. En Java, les quatre niveaux de visibilité suivants sont distingués : 3

public, le membre est visible par toutes les classes, et donc bien sûr par les sous-classes ; private, le membre n est visible que dans sa classe d appartenance et pas par les sous-classes ; protected, le membre est uniquement visible par sa classe d appartenance, par ses sous-classes et par les classes du même package. par défaut, si aucun niveau n est spécifié dans le code, le membre est uniquement visible par les classes du même package que sa classe d appartenance. UML ne distingue que les niveaux public, private et protected. Il est en général déconseillé d utiliser le niveau par défaut de Java car il réduit la lisibilité du code en faisant référence à des notions implicites. 2.3 Redéfinition La redéfinition est la pratique consistant à ré-écrire dans une classe une méthode héritée d une autre classe. Pour qu une méthode d une classe B redéfinisse la méthode d une classe A, il faut que : B hérite de A ; les deux méthodes aient le même nom ; les deux méthodes aient les mêmes types d arguments en paramètre d entrée ; les deux méthodes aient le même type de retour ; les deux méthodes émettent le même type d exception. Dans l exemple des comptes bancaires, si l on souhaite que des intérêts temporaires soient calculés et ajoutés au solde du compte avant d y créditer une somme, il faut redéfinir la méthode credite. Compte # solde : Entier - propriétaire : Personne + crédite(montant : Réel) + consulter() : Réel CompteEpargne - txinteret : Réel + ajouteinterets() + crédite(montant : Réel) FIGURE 3 Exemple de redéfinition Voilà ci-dessous une implémentation possible de ce cas de redéfinition en Java. Le code de la classe Compte est : { solde ; Personne proprietaire ; credite( montant) { solde = solde + montant ; consulter() { solde ; Et celui de la classe CompteEpargne qui redéfinit la méthode credite : 4

Compte { txinteret ; credite( montant) { ajouteinterets(); solde = solde + montant ; ajouteinterets() { nbjours = ; interets = (solde * txinteret)*nbjours/365 ; solde = solde + interets ; Une classe peut encore invoquer une méthode redéfinie telle qu elle est implémentée par sa surclasse. En Java, le mot-clé super est utilisé à cet effet. La méthode credite de la classe CompteEpargne, pourrait ainsi s appuyer sur celle de la classe Compte en écrivant : credite( montant) { ajouteinterets();.credite(montant); Le constructeur d une surclasse est invoqué avec ce même mot-clé comme nom de méthode, par exemple : { Compte( montantinitial) { montant = montantinitial ; Compte { CompteEpargne( montantinitial) { (montantinitial); 2.4 Polymorphisme Le polymorphisme est la faculté de désigner un objet comme étant une instance de plusieurs classes différentes et donc d effectuer un traitement différent pour l appel d un même symbole. Comme la classe CompteEpargne hérite de la classe Compte, toutes les instances de CompteEpargne sont aussi des instances de Compte. L invocation de la méthode credite sur une instance de Compte provoquera des traitements différents selon que cette instance est une instance de CompteEpargne ou non. L exemple de code Java ci-dessous montre un exemple d utilisation du polymorphisme sur de tels objets : 5

Vector<Compte> listedecomptes = Vector<Compte>(); listedecomptes.add( Compte()); listedecomptes.add( Compte()); listedecomptes.add( CompteEpargne()); listedecomptes.add( Compte()); listedecomptes.add( CompteEpargne()); ( i = 0 ; i < listedecomptes.size(); i++) { listedecomptes.get(i).credite(100); Exercice 2a Interprétez et complétez (multiplicité, direction, etc.) le diagramme de classes UML de la figure 4. Proposez des améliorations et éliminez les redondances grâce à l utilisation de l héritage. Véhicule modèle année gage Prêt compte taux solde prête Personne nom âge emploie emprunte Société nom SIRET emprunte Banque nom SIRET emprunte Local année surface gage FIGURE 4 Diagramme de classes UML de l exercice 3a. Exercice 2b Comment faire pour que les lignes de code suivantes : affichent un tel résultat : Exercice 2c Modifiez le diagramme de classes du TD précédent (simulateur) en utilisant l héritage. 6