Interface et Classe - PowerPoint PPT Presentation

Loading...

PPT – Interface et Classe PowerPoint presentation | free to download - id: 2a87b9-NjFmZ



Loading


The Adobe Flash plugin is needed to view this content

Get the plugin now

View by Category
About This Presentation
Title:

Interface et Classe

Description:

Interface comme un type abstrait de donn es (par rapport aux tableaux) ... Chaque type abstrait poss de des m thodes ' standard ' Interface: exiger ces m thodes ... – PowerPoint PPT presentation

Number of Views:38
Avg rating:3.0/5.0
Slides: 48
Provided by: NIE125
Category:

less

Write a Comment
User Comments (0)
Transcript and Presenter's Notes

Title: Interface et Classe


1
Interface et Classe
  • IFT1025, Programmation 2
  • Jian-Yun Nie
  • Stéphane Vaucher

2
Dans le cours précédant
  • Vous avez appris
  • Comment fonctionne le polymorphisme
  • Comment utiliser lhéritage (conception)
  • En gros
  • Le polymorphisme indique que limplantation dune
    méthode de lobjet est invoqué (indépendamment de
    la référence)
  • Lhéritage doit refléter le domaine quon
    modélise (étudiant sinscrit à un cours…)

3
La conception et lhéritage
  • Conception identification des concepts qui
    seront utilisés dans le système
  • Programmation par objets décomposition
    hierarchique
  • Relation de  est un  ou de généralisation
  • Les méthodes sont des fonctions qui sont liés aux
    concepts (un étudiant sinscrit à un cours)

4
Problème 1
  • Conception dun outil pour travailler avec des
    figures
  • Notion de figure, cercle, carrée, rectangle
  • un cercle est une figure
  • Les notions daire et de périmètre sont liées au
    concept de figure
  • On veut ajouter les méthodes correspondantes
    (aire(), perimetre()) dans la classe figure, mais
    le calcul dépend du sous-type de figure

5
Problème 2
  • Plusieurs hiérarchies peuvent être possibles
  • Ex1
  • Un poisson et un oiseau sont des animaux
  • Un avion et un oiseau sont capables de voler
  • Ex2
  • Je suis un étudiant
  • Je suis également un chargé de cours
  • Comment gérer ceci en tenant compte quon est
    limité à une super-classe?

6
Contrat dun objet
  • En OO, on cache limplantation (attributs ne sont
    pas visibles)
  • On résout les problèmes en invoquant des méthodes
  • Les méthodes cachent les détails dimplantation,
    ceci est lencapsulation
  • Pour que le paradigme fonctionne, il faut que les
    méthodes (principalement publiques) offrent des
    contrats clairs
  • API application public interface

7
Concepts importants
  • Interface un contrat quune classe doit se
    conformer (ensemble de méthodes offertes)
  • Favorise la réutilisation du code
  • Il suffit de savoir quune classe se conforme à
    une interface pour pouvoir lutiliser (sans
    connaître les détails de son implantation)
  • Classe normale une classe implantée (dont les
    méthodes sont toutes implantées)
  • Classe abstraite une classe qui nest pas
    complètement implantée
  • Mi-chemin entre classe normale et interface

8
Utilisation des classe
  • Soit la classe BankAccount et les sous-classes
    CheckingAccount et SavingsAccount
  • On peut faire des opérations en commun sur
    lensemble dobjets de la classe BankAccount (y
    compris ceux des sous-classe)
  • Méthodes de linterface deposit, withdraw,
    balance…
  • Principe
  • Pour tout objet ref de BankAccount
  • ref.operation
  • Conditions
  • operation est définie pour la classe mère (pour
    que ref.operation ne génère pas une erreur de
    compilation)
  • Operation est héritée ou redéfinie dans les
    sous-classes (polymorphisme)
  • Polymorphisme assure quon utilise la version de
    linstance

9
Exemple trivial trouver balance max
  • public BankAccount maxAccount(BankAccount
    compte)
  • BankAccount ref, refMax
  • int i
  • double max 0
  • for (i0 iltcompte.length i)
  • ref comptei
  • if (ref.getBalance() gt max)
  • max ref.getBalance()
  • refMaxref
  • return refMax
  • Cest possible grâce à getBalance() dans la
    classe BankAccount (et héritée dans les
    sous-classes)
  • Utilisation

10
Cas non trivial
  • On ne peut pas implanter une méthode pour la
    classe mère, mais seulement dans les sous-classes
  • Exemple
  • Classe Forme draw() non implantables
  • Sous-classes Rectangle draw() implanté
  • Rond draw() implantée
  • Mais on veut quand même utiliser la référence ref
    de classe Forme pour ref.draw()

11
Généralisation
  • On veut créer des opérations applicables pour
    toutes les instances dune classe
  • Si une méthode est implantée pour la classe mère
    et toutes les sous-classe (héritée ou redéfinie)
  • Cas trivial la méthode est applicable
  • Deux cas non triviaux
  • La méthode ne peut pas être implantée pour la
    classe mère, mais elle le peut pour les
    sous-classes
  • On désire appeler la même méthode pour
    différentes classes (non reliées)

12
Premier cas classe abstraite
  • On veut définir une classe correspondant un
    concept (abstraite) englobant toutes les formes
    (rectangle, triangle, etc.)
  • On sait que chaque forme a une surface
  • On souhaite définir une méthode getSurface pour
    chaque forme
  • Problème
  • Il existe pas une façon générale pour calculer la
    surface pour une forme
  • Le calcul est possible seulement pour les
    sous-classes (Rectangle, Triangle, Rond, etc.)

13
Hiérarchie
Non implantable
  • Forme getSurface()
  • Rectangle Triangle Rond …
  • getSurface() getSurface() getSurface()
  • On ne veut pas créer une instance de Forme
  • Solution classe abstraite pour la classe mère

14
Deuxième cas
  • On veut pouvoir appliquer une opération sur des
    objets
  • Ex comparer les objets de la même classe pour
    connaître un ordre lt, gt, etc.
  • Cette comparaison doit sappliquer sur des
    classes très différentes
  • BankAccount, Rectangle, etc. avec des critères
    différents
  • Impossible dutiliser classes abstraite pour ce
    cas
  • Les classe ne sont pas sous la même classe mère

15
Illustration
Ordre
  • Object
  • BankAccount Mot Personne Forme
  • CheckingAccount Rectangle Triangle Rond
  • SavingsAccount
  • Classes pour lesquelles on veut définir
    lordre
  • Impossible de regrouper les classes sous une
    autre classe mère
  • Héritage simple
  • Solution interface

16
Classe abstraite
  • Déclaration
  • abstract public class Nom …
  • Exemple
  • abstract class Forme
  • int x, y // coordonnée du début de la forme
  • abstract float getSurface()

17
Caractéristiques de classe abstraite
  • Déclaration de classe avec abstract
  • Dans le corps …
  • On peut définir une méthode abstraite
  • abstract float getSurface()
  • Méthode abstraite na pas de corps (non
    implantée)
  • Mais une classe abstraite peut ne pas avoir de
    méthode abstraite
  • On peut déclarer des attributs et implanter des
    méthodes
  • On ne peut pas créer dinstance dune classe
    abstraite
  • new Forme() Erreur de compilation

18
Sous-classes dune classe abstraite
  • class SousClasse extends Classe
  • Si une sous-classe nest pas abstraite
  • Toutes les méthodes abstraites héritées doivent
    être implantées (avec un corps)
  • Sinon, la sous-classe doit aussi être abstraite
  • Instance possible pour une sous-classe non
    abstraite

19
Exemple
  • abstract class Forme
  • int x, y // coordonnée repère de la forme
  • abstract float getSurface()
  • abstract void draw()
  • public class Rectangle extends Forme
  • int longueur, largeur
  • public float getSurface()
  • return (float) longueur largeur
  • public void draw()
  • … // dessiner le rectangle

20
Exemple (cont.)
  • public class Rond extends Forme
  • int rayon
  • public float getSurface()
  • …
  • // Une forme composée de deux autres formes
  • abstract class FormeComposee extends Forme
  • Forme f1, f2
  • Si une sous-classe nimplante pas toutes les
    méthodes abstraite, elle continue à être abstract

Hérités int x, y abstract float
getSurface() abstract void draw()
21
Interface
  • Interface contrat exigence de certains types
    de comportements
  • Exigences applicables sur des classes
    différentes BankAccount, Mot, …
  • Exemple ordonner les objets
  • BankAccount selon la balance
  • Mot selon lordre de mot, …
  • Si on utilise seulement classe (abstraite)
  • On doit définir ces comportements séparément dans
    chaque classe
  • Pas moyen de regrouper ces objets

22
Utilisation désirée (exemple)
  • Pour un groupe dobjets avec un comportement
    commun ordre(Objet)
  • Faire le même traitement de tri
  • Programme général qui fonctionne sur tous les
    objets possédant ordre(Objet)
  • Pour tous ref1 et ref2 de ce type
  • ref1.ordre(ref2) gt0, ref1.ordre(ref2) 0,
    ref1.ordre(ref2) lt0
  • Réordonner selon leur comparaison
  • Ce programme ne doit pas seulement fonctionner
    pour une classe
  • Solution la déclaration explicite dune interface

23
Interface
  • Une interface permet de regrouper les objets qui
    peuvent manifester le même type de comportement
    (mêmes méthodes)
  • Déclaration des méthodes fournies (sans
    implantation)
  • Interface na pas la même contrainte de héritage
    simple pour les classe
  • Une classe peut se conformer à plusieurs
    interfaces
  • Ex
  • Mot peut se comparer par ordre(…) et peut être
    mesuré en longueur, etc.
  • Interface 1 pour ordre, interface 2 pour
    longueur, …

24
Définition dune interface
  • public interface Measurable
  • double getMeasure()
  • Lister toutes les méthodes (comportements)
    désirées sans implantation (juste la signature)
  • Méthodes sont automatiquement abstract et public
  • Pas dattribut (sauf constante)

25
Utiliser une interface
  • Une classe se conforme à une interface
  • class BankAccount implements Measurable
  • …
  • public double getMeasure()
  • return value
  • La classe doit implanter toutes les méthodes
    exigées par linterface

26
Utiliser une interface
  • Une autre classe peut se conformer à la même
    interface
  • public class Coin implements Measurable
  • public double getMeasure()
  • return value
  • . . .
  • Mécanisme similaire à un héritage multiple, mais
    différent

27
Utiliser une interface
  • On peut utiliser une interface comme un type
  • Ex déterminer le max et la somme
  • public class DataSet
  • . . .
  • public void add(Measurable x)
  • sum sum x.getMeasure()
  • if (count 0 maximum.getMeasure() lt
    x.getMeasure())
  • maximum x count
  • public Measurable getMaximum()
  • return maximum
  • private double sum
  • private Measurable maximum
  • private int count

x est du type Measurable - possède getMeasure()
28
Utiliser une interface
  • 01 /
  • 02 This program tests the DataSet class.
  • 03 /
  • 04 public class DataSetTester
  • 05
  • 06 public static void main(String args)
  • 07
  • 08 DataSet bankData new DataSet()
  • 09
  • 10 bankData.add(new BankAccount(0))
  • 11 bankData.add(new BankAccount(10000))
  • 12 bankData.add(new BankAccount(2000))
  • 13
  • 14 System.out.println("Average balance "
  • 15 bankData.getAverage())
  • 16 Measurable max bankData.getMaximum()
  • 17 System.out.println("Highest balance "
  • 18 max.getMeasure())
  • 19

Average balance 4000.0 Highest balance
10000.0 Average coin value 0.13333333333333333
Highest coin value 0.25
29
Relation entre classe et interface
  • class BankAccount implements Measuarable
  • Convertir le type dune classe à une interface
  • BankAccount account new BankAccount(10000) Meas
    urable x account // OK
  • System.out.println(x.getMeasure())
  • Casting une référence du type interface en une
    classe
  • Ajouter un objet à DataSet DataSet coinData new
    DataSet() coinData.add(new Coin(0.25,
    "quarter")) coinData.add(new Coin(0.1,
    "dime")) . . . Measurable max
    coinData.getMaximum() // Get the largest coin
  • String name max.getName() // ERROR
  • Coin maxCoin (Coin) max String name
    maxCoin.getName() // OK

30
Classe abstraite vs. Interface
  • Classe abstraite
  • Certaines méthodes peuvent être abstraites
  • Peut contenir des attributs
  • Peut implanter des méthodes
  • Héritage simple
  • Interface contrat
  • Aucune implantation de méthode
  • Différentes classes peuvent signer le même
    contrat
  • Classe famille
  • posséder le même nom de famille
  • a la même habileté (peut être une méthode
    abstraite)
  • Interface contrat
  • Contrat commun pour différentes familles

31
Exemple Interface Movable
32
Interface Weapon
interface
wields
Explorer
Weapon
Pen
MissileLauncher
Sword
33
Héritage Multiple dinterfaces par une classe
class Sword implements Weapon, Movable …
34
Extension dinterface
  • Assume all weapons are movable

interface Weapon extends Movable …
Interface
35
Modifier une interface?
  • Si une classe définie nest plus suffisante
  • Ajouter des attributs et des méthodes
  • Les autres classes utilisant cette classe
    continuent à fonctionner
  • Si une interface nest plus suffisante
  • Ne pas ajouter des méthodes abstraites
  • Sinon, les classe qui sont conformes à
    linterface ne le seront plus (très coûteux à
    modifier toutes ces classes!)
  • On définit plutôt une sous-interface
  • interface SousInterface extends SuperInterface

36
Extension multiple dinterface
  • Une interface peut extends plusieurs autres
    interfaces
  • interface DataIO extends DataInput, DataOutput

37
instanceOf
  • Tester si une instance est dune classe
    (sous-classe)
  • Fonctionne aussi pour tester si une instance est
    du type dune interface (se conforme à une
    interface)
  • Exemple
  • interface DataIO extends DataInput, DataOutput
  • DataIO refInterface
  • BankAccount compte
  • …
  • if (refInterface instanceOf DataOutput) …
  • if (compte instanceOf Movable) …

38
Utilisation dinterface et de classe
  • Interface comme type de donnée
  • Partagent les méthodes
  • Classe comme type de données
  • Partagent les méthodes et attributs
  • Les deux peuvent se convertir
  • refInterface instance
  • refClasse instance
  • Casting
  • (Interface) refClasse utile?
  • refClasse peut faire la même chose que
    (Interface).refClasse.
  • (Classe) refInterface utile!
  • Accéder à dautres attributs et méthodes de la
    Classe

39
Exemple dutilisation dinterfaces
  • Interface comme un type abstrait de données (par
    rapport aux tableaux)
  • Liste on ajoute, retire des éléments
  • Arbres binaires on ajoute, retire, parcourt en
    préordre, postordre
  • Chaque type abstrait possède des méthodes
     standard 
  • Interface exiger ces méthodes

40
Exemple dinterface en Java
  • Collection

41
Collection
  • public interface CollectionltEgt extends
    IterableltEgt
  • //Basic operations
  • int size()
  • boolean isEmpty()
  • boolean contains(Object element)
  • boolean add(E element) //optional
  • boolean remove(Object element) //optional
  • Iterator iterator()
  • //Bulk operations
  • boolean containsAll(Collectionlt?gt c)
  • boolean addAll(Collectionlt? extends Egt c)
    //optional
  • boolean removeAll(Collectionlt?gt c)
    //optional
  • boolean retainAll(Collectionlt?gt c)
    //optional
  • void clear() //optional
  • //Array operations
  • Object toArray()
  • ltTgt T toArray(T a)

42
Traverser une collection (aperçu)
  • public interface IteratorltEgt
  • boolean hasNext()
  • E next()
  • void remove() //optional
  • Utilisation
  • Supposons boolean cond(Object)
  • static void filter(Collection c)
  • for (Iterator i c.iterator() i.hasNext()
    )
  • if (!cond(i.next()))
  • i.remove()

43
List
  • public interface ListltEgt extends CollectionltEgt
  • //Positional access
  • E get(int index)
  • E set(int index, E element) //optional
  • boolean add(E element) //optional
  • void add(int index, E element) //optional
  • E remove(int index) //optional
  • abstract boolean addAll(int index,
  • Collectionlt? extends Egt c) //optional
  • //Search
  • int indexOf(Object o)
  • int lastIndexOf(Object o)
  • //Iteration
  • ListIteratorltEgt listIterator()
  • ListIteratorltEgt listIterator(int index)
  • //Range-view

44
ArrayList
  • java.util Class ArrayListltEgt
  • java.lang.Object
  • java.util.AbstractCollectionltEgt
  • java.util.AbstractListltEgt
  • java.util.ArrayListltEgt
  • All Implemented Interfaces
  • Serializable, Cloneable, IterableltEgt,
    CollectionltEgt, ListltEgt, RandomAccess

Hiérarchie des classes
45
Comparaison avec AbstractList
  • public abstract class AbstractListltEgt
  • extends AbstractCollectionltEgt
  • implements ListltEgt
  • // Méthodes implantées
  • void add(int index, E element) …
  • void clear() …
  • int hashCode()
  • …

46
Inner class concept
  • Définir une classe qui a une utilité locale comme
    inner classs
  • public class DataSetTester3
  • public static void main(String args)
  • class RectangleMeasurer implements Measurer
  • . . .
  • Measurer m new RectangleMeasurer()
  • DataSet data new DataSet(m)
  • . . .
  • Dans une inner class, on peut accéder aux
    méthodes et attributs de la classe qui lenglobe
    (DataSetTesters)

47
Interfaces importantes
  • Cloneable (pour tp) oblige un objet a fournir
    une méthode clone() qui retourne une copie de
    lui-même
  • Comparable int comparesTo(Object o) où une
    valeur de retour lt0 , 0 ou gt0 implique que this
    est respectivement plus petit que, égal à ou plus
    grand que o. De plus, le contrat (de la javadoc)
    indique que la comparaison est transitive
About PowerShow.com