Introduction à la programmation objet avec Java Cours 9 : Classe abstraite et Interface. Contrat. Méthode abstraite

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

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

Programmer en JAVA. par Tama

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

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

TD/TP PAC - Programmation n 3

Package Java.util Classe générique

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

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

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

Chapitre 10. Les interfaces Comparable et Comparator 1

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Premiers Pas en Programmation Objet : les Classes et les Objets

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

INITIATION AU LANGAGE JAVA

Langage Java. Classe de première SI

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

TP1 : Initiation à Java et Eclipse

TD/TP PAC - Programmation n 3

Initiation à JAVA et à la programmation objet.

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Corrigé des exercices sur les références

Serveur d'archivage 2007 Installation et utilisation de la BD exist

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

Synchro et Threads Java TM

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 )

Programme Compte bancaire (code)

Programmation par les Objets en Java

Java Licence Professionnelle CISII,

Auto-évaluation Programmation en Java

Cours 1: Java et les objets

RMI le langage Java XII-1 JMF

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

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

Remote Method Invocation (RMI)

Un ordonnanceur stupide

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

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

Support de cours et TD Programmation Orientée Objet

Interfaces graphiques avec l API Swing

Corrigés des premiers exercices sur les classes

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

Programmation Par Objets

Une introduction à Java

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

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

Remote Method Invocation Les classes implémentant Serializable

Développement Logiciel

Le langage JAVA G. Baulieu Institut de Physique Nucléaire de Lyon Septembre 2009

Programmation Objet Java Correction

Java DataBaseConnectivity

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

Projet de programmation (IK3) : TP n 1 Correction

Introduction au langage Java

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

ACTIVITÉ DE PROGRAMMATION

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

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Utiliser Java sans BlueJ

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

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

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

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

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

Diagramme de classes

Chapitre 2. Classes et objets

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

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

Solutions du chapitre 4

as Architecture des Systèmes d Information

Chapitre VI- La validation de la composition.

Calcul Parallèle. Cours 5 - JAVA RMI

PROGRAMMATION PAR OBJETS

Programmation avec des objets : Cours 7. Menu du jour

Projet gestion d'objets dupliqués

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

Notion de thread (1/2)

Remote Method Invocation en Java (RMI)

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

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

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

Threads. Threads. USTL routier 1

LOG4430 : Architecture logicielle et conception avancée

Java 1.5 : principales nouveautés

CPR Informatique. (poste 3159 ou 3164) Septembre 2002

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

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

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

GOL502 Industries de services

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

TP Programmation Java / JDBC / Oracle

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

2. Comprendre les définitions de classes

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

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)

Transcription:

Introduction à la programmation objet avec Java Cours 9 : Classe abstraite et Interface 1. Classes abstraites 2. Interface 3. Implémentations d'une interface 4. Une interface définit un type abstrait 5. Étendre une interface 6. L'interface Comparable 7. Interface de marquage 1. Classes abstraites 2 Contrat Une classe définit un contrat : l'ensemble des services qu'elle s'engage à rendre. Chaque méthode remplit une part du contrat : la signature et la documentation de la méthode décrit le service rendu. C est une spécification qui répond à la question : quoi? les instructions de la méthode établissent la façon dont ce service est rendu. C est un service concret (implémentation) qu on peut exécuter et qui répond à la question : comment? 3 Méthode abstraite Une méthode abstraite ne possède pas d'instructions (d'implémentation) c'est une signature (et une documentation) définissant le service que doit rendre la méthode, sans préciser la façon dont elle le rendra. Elle définit une spécification (service abstrait) Exemple : // vérifie que le coup arrivant sur la case (lig, col) est valide public abstract boolean coupok(int lig, int col) ; (une méthode static ne peut être abstraite) 4

Exemple Classe abstraite Une classe est abstraite lorsqu'on lui interdit d'avoir des instances public class Piece private int ligne ; private int colonne ; public abstract class Piece Le mot clé abstract signale que la classe est abstraite : on ne peut pas créer d'instances de la classe Piece. public Piece(int lig, int col ) this.ligne = lig ; this.colonne = col ;... public abstract boolean coupok(int lig, int col) ; // fin classe Piece Le mot clé abstract signale que la méthode coupok est abstraite 5 Piece p = new Piece(..) ; rejeté par le compilateur : la classe Piece est abstraite Une classe contenant au moins une méthode abstraite est nécessairement abstraite. Une classe ne contenant pas de méthode abstraite peut néanmoins être abstraite. 6 Exemple Utilisation d'une classe abstraite public abstract class Piece private int ligne ; private int colonne ; public Piece(int lig, int col ) this.ligne = lig ; this.colonne = col ; public abstract boolean coupok(int lig, int col) ; // fin classe Piece Le mot clé abstract signale que la classe est abstraite : on ne peut pas créer d'instances de la classe Piece. public int getligne( ) return this.ligne ; public int getcolonne( ) return this.ligne ; Une classe abstraite sert de modèle pour créer des classes concrètes (non abstraites) qui en hériteront Une classe abstraite définit une implémentation partielle (les méthodes concrètes ont des instructions, les méthodes abstraites n en ont pas) que les classes qui en hériteront devront compléter 7 8

public class Tour extends Piece public Tour(int lig, int col) super(lig, col) ; public boolean coupok(int lig, int col) return ( this.ligne = = lig this.colonne = = col ) ; // fin classe Tour Exemple (1/2) public abstract class Piece public abstract boolean coupok(int lig, int col) ; public class Fou extends Piece public Fou(int lig, int col) super(lig, col) ; public boolean coupok(int lig, int col) return ( Matt.abs(this.ligne lig) == Math.abs(this.colonne - col ) ) ; // fin classe Fou 9 public class TestPiece public static void main(string[] args) // fin classe TestPiece Exemple (2/2) Piece[] lespieces = new Tour(4,2), new Fou(5,6),... for (int i = 0 ; i < lespieces.length ; i++) int lig = s. nextint() ; int col = s.nextint() ; if (lespieces[i].coupok(lig, col)) System.out.println("ok") ; else System.out.println("pas ok") ; // fin for // fin main A la compilation : le compilateur accepte car il constate qu'une méthode de signature coupok(int, int) est définie dans Piece (le fait qu'elle soit abstraite ne change rien) A l'exécution : Polymorphisme, la classe de l objet référencé détermine la méthode coupok invoquée : celle de la classe Tour pour i = 0 celle de la classe Fou pour i = 1 10 Motivation Une classe concrète définit un contrat concret : chaque méthode rend un service concret (implémenté par des instructions) 2. Interface Une classe abstraite contenant des méthodes abstraites définit un contrat mixte (concret et abstrait) : chaque méthode concrète définit un service concret chaque méthode abstraite définit une spécification (service abstrait) sans implémentation Comment définir un contrat purement abstrait où rien ne doit prédéterminer la façon dont le contrat sera implémenté? 11 12

Interface Une interface définit un contrat purement abstrait, elle ne contient que : des constantes de classe publiques des méthodes abstraites publiques Exemple public interface Mediatheque le mot clé interface signale qu'on déclare une interface et non une classe public static final int CAPACITE = 5000 ; // nombre maximal de médias // retourne le media de numéro num public abstract Media getmedia(int num) ; On peut omettre public static final (qui est alors implicite) // retire le media de numéro num de la Médiathèque courante et le retourne public abstract Media retirermedia(int num) ; Une interface répond à la question quoi? et ne répond pas à la question comment? (elle ne définit aucune implémentation) 13 // ajoute le Media m a la Mediatheque courante public abstract void ajoutermedia(media m) ; // fin interface Mediatheque On peut omettre public abstract devant les méthodes (public abstract est alors implicite) 14 Principes Une interface est un modèle abstrait : Le contrat abstrait qu'elle définit (les spécifications) doit être implémenté par une classe pour être utilisé 3. Implémentations d'une interface Une classe implémente une interface lorsqu'elle donne une implémentation (un corps d'instructions) aux méthodes abstraites définies dans l'interface Mediatheque trait discontinu : signifie que la classe MediathequeTableau implémente l'interface Médiathèque (ne pas confondre avec l'héritage) MediathequeTableau 15 16

Une interface peut avoir plusieurs implémentations Chaque implémentation est une façon différente de réaliser le contrat abstrait (les spécifications) défini par l'interface Mediatheque MediathequeTableau MediathequeListe Exemple (1/3) La médiathèque est représentée public class MediathequeTableau implements Mediatheque par un tableau de Media(s) private String nommediatheque ; private Media[] medias ; // - contient les médias private int prochainidentifiant ; // - prochain numéro de media a attribuer private int prochainindice ; // - indice ou placer le prochain Media public MediathequeTableau( ) this.medias = new Media[Methiateque.CAPACITE] ; // retourne le media de numéro num Media getmedia(int num) // instructions // retire le media de numéro num de la Médiathèque courante et le retourne Media retirermedia(int num) //instructions méthodes concrètes utilisant le tableau medias void ajoutermedia(media m) //instructions 17 chaque méthode abstraite de l'interface Mediatheque a été implémentée dans la classe MediathequeTab 18 Exemple (2/3) public class MediathequeListe implements Mediatheque La médiathèque est représentée par une ArrayList private String nommediatheque ; private ArrayList medias ; // - contient les medias private int prochainidentifiant ; // - prochain numero de media a attribuer public MediathequeListe( ) this.medias = new ArrayList( ) // retourne le media de numéro num Media getmedia(int num) // instructions // retire le media de numéro num de la Médiathèque courante et le retourne Media retirermedia(int num) //instructions void ajoutermedia(media m) //instructions Les méthodes gèrent une ArrayList 19 public static void main(string[] args) Exemple (3/3) MediathequeTableau mt1 = new MediathequeTableau( ) ; MediathequeListe mt2 = new MediathequeListe( ) ; mt1.ajoutemedia(new Media()) ; mt2.ajoutemedia(new Media()) ; Media m1 = mt1.retirermedia(0) ; Media m2 = mt2.retirermedia(0) ; les signatures des méthodes de MediathequeListe et MediathequeTableau sont identiques : ces 2 classes s utilisent donc strictement de la même façon. 20

Une classe peut implémenter plusieurs interfaces Elle doit donner un corps aux méthodes abstraites des interfaces qu'elle implémente InterObjetGraphique InterObjetColore ObjetGraphiqueColore // gestion d'une objet graphique public interface InterObjetGraphique void afficher( ) ; void fermer( ) ; // fin interface Fenetre Exemple // gestion d'un objet colore public interface InterObjetColore int ROUGE = 0 ; int VERT = 1 ; int JAUNE = 2 ; void changercouleur(int couleur) ; // fin interface ObjetColore public class ObjetGraphiqueColore implements InterObjetGraphique, InterObjetColore public ObjetGraphiqueColore void afficher// instructions void fermer //instructions void changercouleur(int couleur) //instructions les méthodes abstraites des 2 interfaces ont été implémentées 21 // fin classe FenetreColore 22 Mixer héritage et implémentation Une classe ne peut hériter que d'une unique classe mais peut implémenter plusieurs interfaces 4. Une interface définit un type (abstrait) public class classex extends classey implements interfacez, interfacet 23 24

Une interface définit un type abstrait Une classe définit un type concret, une classe abstraite ou une interface (classe abstraite particulière) définit un type abstrait : On peut utiliser ce type pour référencer un objet mais pas pour créer un objet (new interdit) Mediatheque public static void main(string[] args) Exemple Mediatheque mt1 = new MediathequeTableau( ) ; Mediatheque mt2 = new MediathequeListe( ) ; Une MediathequeTableau peut être référencée en tant que Mediathèque MediathequeTab MediathequeListe Le type d'une interface est plus général que le type de ses implémentations : on peut donc utiliser le type défini par une interface à la place du type défini par une implémentation de cette interface 25 mt1.ajoutemedia(new Media()) ; mt2.ajoutemedia(new Media()) ; Media m1 = mt1.retirermedia(0) ; Media m2 = mt2.retirermedia(0) ; Une MediathequeListe peut être référencée en tant que Mediathèque 26 public static void main(string[] args) Exemple public class Essai public static Media retirepremierelement(mediatheque mt) return mt.retirermedia(0) ; La méthode est utilisable pour toute implémentation d une Mediatheque MediathequeTableau mt1 = new MediathequeTableau( ) ; MediathequeListe mt2 = new MediathequeListe( ) ; mt1.ajoutemedia(new Media()) ; mt2.ajoutemedia(new Media()) ; Media m1 = Essai.retirePremierElement(mt1) ; Media m2 = Essai.retirePremierElement(mt2) ; 27 Les interfaces permettent de palier partiellement l'absence d'héritage multiple en java Mammifere Mammifere MammifereMarin MammifereMarin AnimalMarin AnimalMarin impossible en java ok : la classe MammifereMarin hérite de Mammifere et implémente l'interface AnimalMarin 28

public class Mammifere int nbmamelles ; public int getnbmamelles( ) return this.nbmamelles ; Exemple (1/2) public interface AnimalMarin public class MammifereMarin extends Mammifere implements AnimalMarin int dureeplongee ; public MammifereMarin(float poids, int nbmamelles, int uneduree) public abstract void mafacondenager( ) ; Implémentation de la méthode public void mafacondenager( ) mafacondenager() System.out.println("je plonge et remonte apres " + this.dureeplongee + "minutes") ; super(poids, nbmam) ; this.dureeplongee = d ; 29 public class Test public class TraiteMammiferes public static void main(string[] args) public static void traiteunmammifere (Mammifere m) Exemple (2/2) MammifereMarin dauphin = new MammifereMarin(150, 6, 30) ; System.out.println(dauphin.getNbMamelles( )) ; dauphin.mafacondenager( ) ; TraiteMammiferes.traiteUnMammifere(dauphin) ; TraiteAnimauxMarins.traiteUnAnimalMarin(dauphin) ; public class TraiteAnimauxMarins dauphin peut être utilisé là où on attend un Mammifere et là où on attend un AnimalMarin public static void traiteunanimalmarin (AnimalMarin a) 30 Héritage multiple entre interfaces Une interface peut hériter d'une ou plusieurs autres interfaces (elle hérite des constantes et méthodes abstraites des interfaces mères) 5. Etendre une interface Etudiant EtudiantSalarie Salarie relation d'héritage public interface EtudiantSalarie extends Etudiant, Salarie 31 32

L'interface Comparable Contient une méthode abstraite définissant un ordre entre objets 6. L'interface Comparable public interface Comparable public int compareto(object o) ; retourne 1, 0 ou 1 selon que l'objet référencé par this est inférieur, égal ou supérieur à l'objet référence par o 33 Toute classe implémentant l'interface Comparable définit un ordre total sur les objets qu'elle crée 34 public class Point implements Comparable private double abscisse ; // retourne 1, 0 ou 1 selon que // le Point courant est d'abscisse inférieure, // égale ou supérieure à l'abscisse du // Point référencé par o public int compareto(object o) double x1 = this.abscisse ; double x2 = ((Point) o).abscisse ; if (x1 < x2) return 1 ; if (x1 == x2) return 0 ; return 1 ; // fin classe Point Exemple (1/2) public class Rectangle implements Comparable private float longueur ; private float largeur ; // retourne 1, 0 ou 1 selon que le Rectangle courant // a une surface inférieure, égale ou supérieure // au Rectangle référencé par o public int compareto(object o) Rectangle r = (Rectangle) o ; s1= this.longueur * this.largeur ; s2= r.longueur * r.largeur ; if (s1 < s2) return 1 ; if (s1 == s2) return 0 ; return 1 ; // fin classe Rectangle une exception non contrôlée sera levée par la machine virtuelle si o == null ou si l'instance référencée par o n'est pas une instance de Point 35 public class Comparer Exemple (2/2) public static boolean plusgrand(comparable c1, Comparable c2) return (c1.compareto(c2) == 1); // fin classe Comparer Point p1 = new Point(15) ; Point p2 = new Point(10) ; If (Comparer.plusGrand(p1, p2)) System.out.println(p1 + " est plus grand que " + p2) ; Rectangle r1 = new Rectangle(10, 15) ; Rectangle r2 = new Rectangle (5, 8) ; If (Comparer.plusGrand(r1, r2)) System.out.println(r1 + " est plus grand que " + r2) ; 36

Interface de marquage Certaines interfaces ne contiennent rien et sont utilisées pour désigner (marquer) les classes qui les implémentent à la machine virtuelle ex) Cloneable 7. Interface de marquage Une interface de marquage est assortie d'une documentation précisant les contraintes que toute classe qui l'implémente doit satisfaire. ex) une classe ClasseX implémentant Cloneable autorise le clonage (copie) de ses instances avec la méthode clone( ) de la classe Object 37 ClasseX x = new ClasseX( ) ; try Object y = x.clone( ) ; La machine virtuelle lèvera une exception si la classe X n'implémente pas l'interface Cloneable. catch (CloneNotSupportedException e) System.out.println(e + "clonage interdit") ; 38