Classe Abstaite Et Interface

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 18

classes abstraites et interface

Page 1
Classe abstraite

n Une des idées maîtresses de la programmation par objets consiste à construire


de nouvelles classes sur la base de classes déjà existantes.

n Cette technique de programmation ne révèle toute sa puissance que si les


classes de base sont génériques. Ainsi indépendantes de toute spécialisation,
elles seront réutilisables dans un spectre plus large de situations.

n La définition d'une classe abstraite se fait à l’aide du qualificatif abstract.

copyright ©Thierry Douchet


2
Janvier 2006
Exemple

import java.io.* ;
abstract class Vehicule
{
private int nbrPassager ;
private int nbKlm ;

// constructeurs + accesseurs

public abstract void demarrer();


public abstract void rouler ();
public abstract void stopper ();

public void transporter ( int nbr )


{ nbrPassager = nbr ;
this.demarrer();
this.rouler();
this.stopper();
}
}

copyright ©Thierry Douchet


3
Janvier 2006
Restrictions sur les classes abstraites

n Une classe abstraite n'est utilisable que comme classe de base par d'autres
classes.

n Toute tentative de création d'objet à partir d'une telle classe provoque une
erreur :

Vehicule unVehicule;
unVehicule = new Vehicule (); // erreur

n Toute classe contenant au moins une méthode abstraite est considérée comme
abstraite et définie comme telle à l’aide du qualificatif abstract.

copyright ©Thierry Douchet


4
Janvier 2006
Classes dérivées d'une classe abstraite

n Une classe dérivée d'une classe de base abstraite doit fournir une définition
pour chaque méthode déclarée abstraite, ou redéclarer ces méthodes
abstraites.

class Bus extends Vehicule


{ public void demarrer ()
{ System.out.println ( "Demarrer Bus"); }
public void rouler ()
{ System.out.println ( "Bus Rouler"); }
public void stopper ()
{ System.out.println ( "Bus Stopper"); }
}

public class Demo


{ public static void main (String args[ ])
{ Bus unBus;
unBus = new Bus ();
unBus.transporter (5);
}
}
copyright ©Thierry Douchet
5
Janvier 2006
Un autre exemple

n On veut réaliser un jeu qui consiste à afficher les caractéristiques d’un animal.
L’utilisateur doit deviner le nom de l’animal.

import java.io.* ;

abstract class Animal


{
private String nom ;
public abstract void seDeplace ();
public abstract void estRecouvertDe ();
public abstract void mange ();
public abstract void signeParticulier ();
public abstract String genreAnimal ();
protected Animal ( String unNom )
{ nom = unNom ; }
public String getNom ()
{ return nom ; }

copyright ©Thierry Douchet


6
Janvier 2006
Exemple (suite)

public void trouveAnimal ()


{
String inconnu;
BufferedReader entree = new BufferedReader ( new InputStreamReader ( System.in ));
this.seDeplace ();
this.estRecouvertDe ();
this.mange ();
System.out.println ( " Espece : " + this.genreAnimal () );
this.signeParticulier ();
System.out.println ( "Qui suis je ??? " );
try { inconnu = entree.readLine () ; } catch ( Exception e ) { ; }
if ( inconnu.equals ( nom ) )
System.out.println ("Bravo vous avez gagne ");
else
System.out.println ("La reponse est : " + this.getNom () );
}
}

copyright ©Thierry Douchet


7
Janvier 2006
Exemple (suite)

abstract class Mammifere extends Animal


{
protected Mammifere ( String unMammifere )
{ super ( unMammifere ); }
public String genreAnimal ()
{ return "Mammifere"; }

public void seDeplace()


{ System.out.println ("je me deplace sur mes jambes"); }
public void estRecouvertDe ()
{ System.out.println ("Je suis recouvert de poil" ); }
public void mange()
{ System.out.println ("Je mange de la viande" ); }
abstract public void signeParticulier ();
}

copyright ©Thierry Douchet


8
Janvier 2006
Exemple (suite)

abstract class Poisson extends Animal


{
protected Poisson ( String unPoisson )
{ super ( unPoisson ); }
public void seDeplace()
{ System.out.println ("je me deplace en nageant"); }
public void estRecouvertDe()
{ System.out.println (" Je suis recouvert d'ecailles"); }
public void mange()
{ System.out.println ("Je mange du plancton" ); }
public String genreAnimal ()
{ return "Poisson" ; }
abstract public void signeParticulier();
}

copyright ©Thierry Douchet


9
Janvier 2006
Exemple (suite)

class Lion extends Mammifere


{
public Lion()
{ super ( "Lion" ); }
public void signeParticulier()
{ System.out.println ("Je suis le roi des animaux"); }
}

class Raie extends Poisson


{
public Raie( )
{ super ("Raie" ); }
public void signeParticulier()
{ System.out.println ("Pour nager je vole"); }
}

copyright ©Thierry Douchet


10
Janvier 2006
Exemple (suite)

class Baleine extends Mammifere


{
public Baleine () { super ("Baleine"); }
public void signeParticulier()
{ System.out.println ("Je suis le plus gros animal vivant"); }

public void seDeplace()


{ System.out.println ("Je me deplace en nageant"); }

public void estRecouvertDe()


{ System.out.println ("Je suis recouvert de peau" ); }

public void mange()


{ System.out.println ("Je mange du plancton" ); }
}

copyright ©Thierry Douchet


11
Janvier 2006
Exemple (suite)

class Demo
{
public static void main (String args [ ])
{
Animal archeDeNoe [ ] = new Animal[3];
archeDeNoe[0] = new Lion ( );
archeDeNoe[1] = new Baleine ( );
archeDeNoe[2] = new Raie ( );

for ( int i= 0 ; i < 3 ; i++ )


archeDeNoe[i].trouveAnimal();
}
}

copyright ©Thierry Douchet


12
Janvier 2006
Les interfaces

n Une interface est une spécification formelle de composant, c’est un ensemble


de signatures de méthodes sans implémentation.

n Le mot réservé "interface" permet de définir des interfaces:

interface UneInterface
{
public void methode1(); // méthode abstract implicite
public String methode2 ( int val );
}

copyright ©Thierry Douchet


13
Janvier 2006
Utilisation d’interface

n Une interface sert de support de création pour les classes. Elle définit les
signatures des messages que doivent respecter les classes.

n La mise en œuvre d’une classe s’effectue par implémentation:

class Demo implements UneInterface


{
public void methode1()
{ // code }

public String methode2 ( int val )


{
// code
}
}

n Une classe qui implémente une interface doit donner un sens à l’ensemble des
méthodes de l’interface ou requalifier les méthodes d’abstraites.
copyright ©Thierry Douchet
14
Janvier 2006
Exemple

n On va définir une interface Musicable spécifiant les traitements que doit


respecter tout musicien :

public interface Musicable


{
void joueMusic () ;
}

n Un guitariste étant un musicien, il devra donc respecter l’interface

class Guitariste implements Musicable


{
public void joueMusic ( )
{
System.out.println ( " joue de la guitare " ) ;
}
}

copyright ©Thierry Douchet


15
Janvier 2006
Exemple

import java.util.* ;
class Orchestre
{
private ArrayList listeMusicien ;

public void ajouterMusicien ( Musicable m )


{ listeMusicien.add ( m ) ; }

public void jouer ( )


{
for ( int i ; i <listeMusicien.size () ; i++ )
(( Musicable ) listeMusicien[i].).joueMusic () ;
}
}

copyright ©Thierry Douchet


16
Janvier 2006
Héritage multiple

n L’héritage multiple n’est pas disponible en Java, mais une classe peut hériter
d’une classe et implémenter une interface :

class Musicien extends Personne implements Musicable


{
public void joueMusic ( )
{
System.out.println ( " joue de la guitare " ) ;
}
}

n Une classe peut implémenter plusieurs interfaces :

class Bidon implements interface1, interface2

copyright ©Thierry Douchet


17
Janvier 2006
Héritage d’interface

n Une interface peut hériter d’une autre interface:

public interface Partitionable extends Musicable


{
void ecrirePartition ( void ) ;
}

copyright ©Thierry Douchet


18
Janvier 2006

Vous aimerez peut-être aussi