Vous êtes sur la page 1sur 10

TP N°6 : Les Interfaces

Langage JAVA

Rappel :

I. Interface

Une interface est constituée d'un ensemble de déclarations de méthodes sans


implantation.

On n'y trouve uniquement, pour chaque méthode, que la définition de son profil, c'est-à-
dire son en-tête suivi de ;.

Les interfaces sont définies par le mot clé interface.

Public interface NomInterface {


public void affiche() ;
//
}

Si les interfaces permettent de déclarer des variables de référence portant leur type,
elles ne sont pas, par contre, instanciables. En particulier une interface ne possède pas
de constructeur.

Une classe peut implanter une ou plusieurs interface(s) : la définition de la classe


comporte alors le mot clé implements suivi d'une liste de noms d'interfaces (les noms
des interfaces implantées y sont séparés par une virgule).

Public class Classe implements interface1, interface 2 {


}

Conclusion :

Une interface est un protocole de communication entre objets.

Le langage Java support les interfaces que vous utiliser pour définir un protocole de
comportement qui peut être implémenté par toute classe dans la hiérarchie des classe.

Une interface définit un ensemble de méthodes mais ne donne pas leurs


implémentations. Chaque classe qui implémente cette interface accepte d’implémenter
toutes les méthodes définies dans l’interface, par conséquent accepter un certain
comportement.

Page 1
M. LACHGAR Med
Exercice 1 :
Soit le diagramme de classe suivant :
IPersonne

+ affiche () : void
+ calculerSalaire () : double

Profil
Personne
- id : int
- id : int
- nom : String * - code : int
- libelle : int
- prenom : String 1..1
- dateNais : Date
- salaire : double

1. Créer l’interface IPersonne dans le package «ma.projet.inter ».

2. Créer les classes Personne et Profil dans le package « ma.projet.bean »

Sans redéfinir les méthodes de l’interface, qui ce que vous remarquez ?

3. Redéfinir les méthodes affiche () et calculerSalaire () dans la classe Personne.

Sachant que :

 La méthode affiche () affiche une chaine de caractère sous la forme :

Je suis le directeur SAlMI Karim né le 02 juin 1970 mon salaire est 20 000dh

 Le directeur aura une augmentation de 20% par rapport à son salaire normal,

 Les autres employés auront une augmentation de 10%.

4. Ecrire un programme de test.

Page 2
M. LACHGAR Med
Exercice 2 :
Soit le diagramme de classe suivant :

IOperation
IAffichage

+ plus (Object obj) : Object


+ moins (Object obj) : Object + affiche () : String

Complexe
- im : double Reel
- re : double - x : double

1. Créer l’interface IOperation et IAffichage dans le package «ma.projet.inter ».

2. Créer les classes Complexe et Reel dans le package « ma.projet.bean ».

3. Redéfinir les méthodes moins (), plus () et affiche () dans la classe complexe sachant que :

Un nombre complexe est un nombre qui comporte deux parties : une partie réelle et une

partie imaginaire.

Un nombre complexe est généralement écrit sous la forme : 4+3i (partie réelle = 4 et partie

imaginaire = 3).

L'addition (la soustraction) de deux nombres complexes consiste à additionner (soustraire)

les parties réelles de ces deux nombres pour obtenir la partie réelle du résultat et à

additionner (soustraire) les deux parties imaginaires pour obtenir la partie imaginaire du

résultat.

4. Surcharger les méthodes plus () et mois () dans la classe Reel.

Nouvelle signature :

o double plus (double…x)

o double moins (double …x)

Qui ce que vous remarquez ?

5. Créer un programme de test.

Page 3
M. LACHGAR Med
Exercice 3 :

Soit le diagramme de classe suivant :

IOperation Affichage
{abstract}

+ plus (Object obj) : Object


+ moins (Object obj) : Object + affiche () : String

<<implements>>
<<extends>>

Complexe
- im : double Reel
- re : double
- x : double

1. Créer l’interface IOperation dans le package « ma.projet.inter ».

2. Créer la classe abstraite Affichage dans le package « ma.projet.abstract ».

Qui ce que vous remarquez ?

3. Créer la classe Complexe et la classe Reel dans le package « ma.projet.bean ».

4. Créer un programme de test.

Page 4
M. LACHGAR Med
Correction :
Exercice 1 :
Arborescence du projet :

L’interface IPersonne :

package ma.projet.inter;

public interface IPersonne {

public void affiche();


public double calculerSalaire ();

La classe Profil :

package ma.projet.bean;

public class Profil {


private int id;
private String code;
private String libelle;
private static int comp;

public Profil(String code, String libelle) {


comp++;
this.id = comp;
this.code = code;
this.libelle = libelle;
}

public String getCode() {


return code;
}

public String getLibelle() {


return libelle;
}
}

Page 5
M. LACHGAR Med
La classe Personne :

package ma.projet.bean;

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import ma.projet.inter.IPersonne;

public class Personne implements IPersonne{

private int id;


private String nom;
private String prenom;
private Date dateNais;
private double salaire;
private Profil profil;
private static int comp ;

public Personne(String nom,String prenom,Date dateNais ,Double salairee,Profil profil){


comp++ ;
this.id = comp;
this.nom = nom;
this.prenom = prenom;
this.dateNais = dateNais;
this.salaire = salairee;
this.profil = profil;
}

public void affiche() {


DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE);
String date = df.format(dateNais);
System.out.println("Je suis le "+this.profil.getLibelle() +" "+nom+" "+prenom+ " né le "
+date+ " mon salaire est "+calculerSalairee()+ " dh") ;
}

public double calculerSalairee() {


if(this.profil.getCode().equals("DG"))return this.salaire= this.salaire +
0.2*this.salaire;
if(this.profil.getCode().equals("EMP"))return this.salaire= this.salaire +
0.1*this.salaire;
return this.salaire;
}

La classe Test :
package ma.projet.bean;

import java.util.Date;

public class Test {


public static void main(String[] args) {

Profil profiles[] = new Profil[2];

profiles[0] = new Profil("EMP","Employé");


profiles[1] = new Profil("DG","Directeur Géneral");

Personne personnes[] = new Personne[3];

personnes[0] = new Personne("ELALAOUI", "Mohamed",new


Date("1986/04/04") ,9000.0, profiles[0]);
personnes[1] = new Personne("DOURID", "Raouan",new
Date("1960/03/24") , 10000.00, profiles[1] );
personnes[2] = new Personne("ALAOUI", "Sara",new
Date("1940/09/11") , 8200.00, profiles[0] );

for (Personne per : personnes){


per.affiche();
}
}
}

Page 6
M. LACHGAR Med
Résultat d’exécution :

Je suis le Employée ELALAOUI Mohamed né le 4 avril 1986 mon salaire est 9900.0 dh
Je suis le Directeur Géneral DOURID Raouan né le 24 mars 1960 mon salaire est 12000.0 dh
Je suis le Employée ALAOUI Sara né le 11 septembre 1940 mon salaire est 9020.0 dh

Exercice 2 :
Arborescence du projet :

L’interface IOperation :
package ma.projet.inter;

public interface IOperation {


public Object plus (Object obj);
public Object moins (Object obj);
}

L’interface IAffichage :
package ma.projet.inter;

public interface IAffichage {


public String affiche ();
}

La classe Complexe :
package ma.projet.bean;

import ma.projet.inter.IAffichage;
import ma.projet.inter.IOperation;

public class Complexe implements IOperation,IAffichage{

private double im ;
private double re;

public Complexe ( double re , double im){


this.re=re;
this.im=im;
}

public Object plus(Object c){


Complexe com = (Complexe) c;
return new Complexe (this.re + com.re, this.im + com.im);
}

public Object moins (Object c){


Complexe com = (Complexe) c;
return new Complexe (this.re - com.re, this.im - com.im);
}

public String affiche() {


if(this.im > 0) return this.re +" + "+this.im+" i";
else if(this.im < 0) return this.re +" "+this.im+" i";
else return this.re+"";
}
}

Page 7
M. LACHGAR Med
La classe Reel :

package ma.projet.bean;

import ma.projet.inter.IAffichage;
import ma.projet.inter.IOperation;

public class Reel implements IOperation,IAffichage{

private double x;

public Reel(double x){


this.x=x;
}

public Object moins(Object obj) {


Reel reel = (Reel) obj;
return new Reel(this.x - reel.x);
}

public Object plus(Object obj) {


Reel reel = (Reel) obj;
return new Reel(this.x - reel.x);
}

public double plus(double ... x) {


double som = this.x;
for(Double d : x)
som += d;
return som;
}

public double moins(double ... x) {


double s = this.x;
for(Double d : x)
s -= d;
return s;
}

public String affiche() {


return (x+"");
}
}

La classe Test :

package ma.projet.bean;

public class Test {

public static void main (String[] args){

Complexe c1 = new Complexe(2,2) ;


Complexe c2 = new Complexe(-3,4) ;
Complexe c3, c4 ;
Reel r1=new Reel(3.4);
Reel r2=new Reel(3.89);
Reel r3;
c3 =(Complexe)(c1.plus(c2));
c4=(Complexe)(c1.moins(c2));
System.out.println("c2 + c1 = " +c3.affiche());
System.out.println("c2 - c1 = " +c4.affiche());
r3=(Reel)(r1.plus(r2));
System.out.println("r1 + r2 = " +r3.affiche());
r3 = new Reel(100);
System.out.println("{1} = "+r3.plus(1,3,4));
System.out.println("{2} = "+r3.plus(1,3,4,6,9));
System.out.println("{3} = "+r3.moins(22,3,4,6,9));
System.out.println("{4} = "+r3.moins(2,4,6,9));

}
}

Page 8
M. LACHGAR Med
Exercice 3 :
Arborescence du projet :

L’interface IOperation :

package ma.projet.inter;

public interface IOperation {


public Object plus (Object obj);
public Object moins (Object obj);
}

La classe Affichage :

package ma.projet.abstrac;

public abstract class Affichage {


public abstract String affiche();

La classe Complexe :

package ma.projet.bean;

import ma.projet.abstrac.Affichage;
import ma.projet.inter.IOperation;

public class Complexe extends Affichage implements IOperation {

private double im ;
private double re;

public Complexe (double re , double im){


this.re=re;
this.im=im;
}

public Object plus(Object c){


Complexe com = (Complexe) c;
return new Complexe (this.re + com.re, this.im + com.im);
}

public Object moins (Object c){


Complexe com = (Complexe) c;
return new Complexe (this.re - com.re, this.im - com.im);
}

public String affiche() {


if(this.im > 0) return this.re +" + "+this.im+" i";
else if(this.im < 0) return this.re +" "+this.im+" i";
else return this.re+"";
}
}

Page 9
M. LACHGAR Med
La classe Reel :
package ma.projet.bean;

import ma.projet.abstrac.Affichage;
import ma.projet.inter.IOperation;

public class Reel extends Affichage implements IOperation{

private double x;

public Reel(double x){


this.x=x;
}

public Object moins(Object obj) {


Reel reel = (Reel) obj;
return new Reel(this.x - reel.x);
}

public Object plus(Object obj) {


Reel reel = (Reel) obj;
return new Reel(this.x - reel.x);
}

public String affiche() {


return x+"";
}
}

La classe Test :

package ma.projet.bean;

public class Test {

public static void main (String[] args){

Complexe c1 = new Complexe(2,2) ;


Complexe c2 = new Complexe(-3,4) ;
Complexe c3,c4 ;
Reel r1=new Reel(3.4);
Reel r2=new Reel(3.89);
Reel r3;
c3 =(Complexe)(c1.plus(c2));
c4=(Complexe)(c1.moins(c2));
System.out.println("c2 + c1 = " +c3.affiche());
System.out.println("c2 - c1 = " +c4.affiche());
r3=(Reel)(r1.plus(r2));
System.out.println("r1 + r2 = " +r3.affiche());
}
}

Page 10
M. LACHGAR Med