SlideShare une entreprise Scribd logo
CHAPITRE 5
CLASSES ABSTRAITES ET
INTERFACES
1. Idée de base des classes abstraites
Lorsque nous représentons une classe comme un type, nous partons de l’hypothèse que
des objets de ce type seront instanciés. Ce n’est pas toujours vrai.
Une classe concrète est une classe qu’on instancie pour obtenir des objets.
Par opposition à la classe concrète, une classe abstraite ne peut pas être instanciée.
Les classes abstraites sont utilisés en héritage pour permettre d’avoir de superclasses
appropriées dont d’autres classes peuvent hériter l’interface et l’implantation.
La super classe Employé est définie comme classe abstraite. L’objectif sera d’obliger les
classes filles de redéfinir la méthode abstraite calculSalaire(). Cette méthode ne sera pas
implémentée dans la classe Employé mais elle le sera dans les classes filles concrètes.
Ainsi, le mécanisme des classes abstraites permet de définir des comportements (méthodes)
qui devront être implémentés dans les classes filles, mais sans implémenter ces
comportements.
2. Définir des classes abstraites
Une classe devient abstraite à l’aide du mot clé abstract.
Syntaxe:
public abstract class <Nom_Classe> { … }
Une méthode abstraite est une méthode dont on donne l’entête mais sans donner son
implémentation (son corps), suivie d’un point-virgule.
Une méthode abstraite est aussi déclarée avec le mot clé abstract.
Exemple :
public abstract class Employe {
public abstract void calculSalaire() ; }
Si on déclare une méthode abstraite dans une classe alors celle-ci doit être abstraite.
Une classe abstraite contient obligatoirement au moins une (ou plusieurs) méthode
abstraite, mais peut contenir aussi d’autres méthodes implémentées.
Une méthode abstraite peut être soit public soit protected mais pas private.
Exemple :
public abstract class Employe { //classe abstraite
protected float salaire;
protected String nom;
public Employe (String n){
nom = n;
}
public void afficher(){
System.out.println("nom = "+ nom + "salaire =" + salaire);
}
protected abstract void calculSalaire(); //méthode abstraite
}
Une classe héritant d’une classe abstraite, doit donner une implémentation à toutes les
méthodes abstraites de sa superclasse (redéfinition) sinon elle doit être déclarée
abstraite (l’abstraction continue).
Exemple :
public class Permanent extends Employe{
public Permanent (String a){
super (a);
}
//redéfinition de la méthode abstraite, sinon Permanent doit être déclarée abstraite
public void calculSalaire(){
super.salaire = Clavier.lireFloat();
}
}
Remarques :
On ne peut pas utiliser new pour instancier une classe abstraite, néanmoins, on peut
déclarer des variables qui font référence à des classes abstraites.
On ne peut pas combiner les modificateurs : abstract et final.
Employe p = new Employe ("ali"); //Erreur car classe abstraite
Permanent p = new Permanent ("ali");
Employe e = p ; //e et p désignent le même objet
e.calculSalaire();// appel de calculSalaire() de Permanent
p.afficher();// appel de afficher() de Employe
3. Les interfaces
Une interface est une forme particulière de classe.
Une interface remplace habituellement une classe abstraite qui ne fournit aucune
implantation à hériter, c’est-à-dire aucune variable d’instance, ni d’implantation par défaut
d’une méthode.
Pour définir une interface, on utilise le mot clé interface.
Syntaxe:
public interface <Nom_Interface> { … }
Une interface correspond à un type comportant uniquement des méthodes abstraites et des
constantes statiques (on n’a pas à préciser les modificateurs : abstract, final et static).
Comme les classes abstraites public, une interface correspond habituellement à un type
public. Elle repose ainsi dans son propre fichier (nom_interface.java).
Exemple :
public interface Employe {
public final static float salaire = 1000;
public abstract void calculSalaire();
public abstract void afficher();
}
Remarques :
Les constantes statiques et les méthodes abstraites d’une interface, ne peuvent pas
être private ou protected.
Les interfaces ne sont pas instanciables.
4. Implémentation des interfaces
Une classe peut implémenter une ou plusieurs interfaces. C’est-à-dire avoir les mêmes
caractéristiques définies au niveau de ces interfaces.
Réciproquement, une interface peut être implémentée par plusieurs classes.
L’implémentation d’une interface par une classe veut dire redéfinir les méthodes abstraites
de l’interface au niveau de la classe concrète.
Pour qu’une classe implémente une interface il faut utiliser le mot clé implements.
Syntaxe:
public class <Nom_Classe> implements <Interface1>, <Interface2>, ...
{ … }
Exemple :
public class Permanent implements Employe{
public String nom;
public float salaire;
public Permanent(String a){
nom = a ;
}
// Redéfinition de la méthode calculSalaire()
public void calculSalaire(){
float primeMensuelle = Clavier.lireFloat();
// accès à la constante salaire de l’interface par le nom de l’interface
salaire = Employe.salaire + primeMensuelle;
}
// Redéfinition de la méthode afficher()
public void afficher(){
System.out.println("nom = "+ nom + "salaire =" + salaire);
}
}
Remarque :
Le concept d’interface est proposé en langage Java pour résoudre le problème de
l’héritage multiple.
class Classe_C extends Classe_A, Classe_B { ... }
// Erreur (héritage multiple interdit pour les classes en Java)
class Classe_C implements Interface_A, Interface_B { ... }
// Héritage multiple à travers les inetrfaces
5. Interfaces et héritage
Lors de la définition d’une classe, il est possible de combiner l’héritage avec
l’implémentation d’interfaces.
Il faut commencer par spécifier la classe mère par un extends, puis spécifier la liste des
interfaces par un implements.
Syntaxe:
public class <Nom_Classe> extends <Classe_Base> implements <Interface1>,
<Interface2>, ... { … }
Exemple :
public class Personne {
String nom, prenom;
public Personne (String a, String b){
nom = a;
prenom =b;
}
}
public class Permanent extends Personne implements Employe {
public float salaire;
public Permanent(String a, String b){
super(a,b) ; //Appel du constructeur de la classe mère Personne
}
//Les méthodes afficher() et calculSalaire() de Employe doivent être redéfinie ici
public void afficher(){
...
}
public void calculSalaire(){
...
}
}
Une interface peut hériter d’une ou de plusieurs autres interfaces. L’héritage multiple est
autorisé pour les interfaces. Il s’agit d’une extension de propriétés sous forme de
méthodes abstraites et de constantes statiques.
Syntaxe:
public interface <Interface1> extends <Interface2>, <Interface3>, ... { … }
Exemple :
interface MonInterfaceB {
void f();
}
interface MonInterface1 extends MonInterfaceB {
void f1();
}
interface MonInterface2 extends MonInterfaceB{
void f2();
}
interface MonInterface extends MonInterface1, MonInterface2 {
void fd();
}
Les classes implémentant MonInterface doivent implémenter f(), f1(), f2(), et fd().
Remarques :
Une interface peut servir à définir des constantes :
interface Mois{
final int JANVIER = 1, FERVRIER = 2, … DECEMBRE = 12 ;
}
Il est possible de déclarer des références de types interfaces afin de désigner des objets
qui implémentent l’interface en question.
Employe e = new Permanent ("Ali", "Ben Salah");
L’opérateur instanceOf peut être utilisé pour savoir si un objet implémente une
interface donnée.
6. Exercices
Exercice 1 :
1. Ecrire la classe Figure, contenant l’attribut privé nom de la figure et les méthodes
suivantes :
- un constructeur avec argument
- getNom()
- setNom(String)
- une méthode abstraite float calculAire ()
- une méthode abstraite void afficher ()
2. Ecrire la classe Rectangle, contenant les attributs longueur et largeur. Elle dispose des
méthodes suivantes :
- un constructeur par défaut
- un constructeur avec deux arguments
- une méthode calculAire ()
- une méthode afficher ()
3. Ecrire une classe TestFigure qui permet d’instancier un rectangle, de l’afficher et de
calculer son aire.
4. Les instructions suivantes sont-elles correctes et pourquoi ?
a. Figure f = new Figure ("figure");
b. Figure f = new Rectangle ("rectangle");
c. Figure fig = new Rectangle(10,5);
d. Rectangle r = new Rectangle(10,5); fig =r;
5. Ajouter la méthode void affichage () à Figure pour qu’elle affiche la liste des attributs
ainsi que l’aire d’une figure.
Exercice 2 :
1. Ecrire une interface Homme possédant une seule méthode : void indentite() dont le rôle
est d’afficher les informations concernant un homme.
2. Ecrire une classe Personne implémentant cette interface et possédant deux attributs privés
nom et prenom de type String et un constructeur avec argument.
3. Ecrire une classe Client héritant de la classe Personne et implémentant l’interface
Homme avec un attribut privé supplémentaire nommé numero de type entier et un
constructeur avec argument en conséquence.
4. Ecrire une classe Peuple contenant deux attributs privés : un tableau d’Hommes nommé
pays de capacité 100 et un entier nbHommes représentant le nombre d’hommes dans pays.
Cette classe contient aussi deux méthodes :
void naissance (Homme h) : permet d’ajouter un homme dans pays
void explorer () : affiche l’identité de chaque homme dans pays.
5. Dans la méthode void main, tester les méthodes naissance () et explorer () après avoir
placé dans pays des personnes et des clients
Exercice 3 :
Les deux classes C1 et C11 sont abstraites.
Indiquer pour chacun des cas suivants si les instructions sont acceptées par le compilateur ou
non :
1. C1 x = new C1();
2. C1 y = new C11();
3. C1 z = new C111();
4. C1 t = new C12();
5. z = t ;

Contenu connexe

Tendances

Chapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphismeChapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphisme
Amir Souissi
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
Abdoulaye Dieng
 
POO Java Chapitre 1 Classe & Objet
POO Java Chapitre 1 Classe & ObjetPOO Java Chapitre 1 Classe & Objet
POO Java Chapitre 1 Classe & Objet
Mouna Torjmen
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
ENSET, Université Hassan II Casablanca
 
Polymorphisme (cours, résumé)
Polymorphisme (cours, résumé)Polymorphisme (cours, résumé)
Polymorphisme (cours, résumé)
Anis Bouhachem Djer
 
Chapitre 3 elements de base de java
Chapitre 3  elements de base de javaChapitre 3  elements de base de java
Chapitre 3 elements de base de java
Amir Souissi
 
Chapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En JavaChapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En Java
Aziz Darouichi
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-Correction
Lilia Sfaxi
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El Hassani
Shellmates
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
Olivier Le Goaër
 
Chapitre 01 - Notions de base
Chapitre 01 - Notions de baseChapitre 01 - Notions de base
Chapitre 01 - Notions de base
L’Université Hassan 1er Settat
 
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Mansouri Khalifa
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
slimyaich3
 
Formation python
Formation pythonFormation python
Formation python
j_lipaz
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objets
Aziz Darouichi
 
TP C++ : enoncé
TP C++ : enoncéTP C++ : enoncé
Rapport Pfe Application Web e-commerce Symfony2
Rapport Pfe Application Web e-commerce Symfony2Rapport Pfe Application Web e-commerce Symfony2
Rapport Pfe Application Web e-commerce Symfony2
Ben Abdelwahed Slim
 
Cours design pattern m youssfi partie 3 decorateur
Cours design pattern m youssfi partie 3 decorateurCours design pattern m youssfi partie 3 decorateur
Cours design pattern m youssfi partie 3 decorateur
ENSET, Université Hassan II Casablanca
 
Support POO Java Deuxième Partie
Support POO Java Deuxième PartieSupport POO Java Deuxième Partie
Support POO Java Deuxième Partie
ENSET, Université Hassan II Casablanca
 
Support de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfiSupport de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfi
ENSET, Université Hassan II Casablanca
 

Tendances (20)

Chapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphismeChapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphisme
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
POO Java Chapitre 1 Classe & Objet
POO Java Chapitre 1 Classe & ObjetPOO Java Chapitre 1 Classe & Objet
POO Java Chapitre 1 Classe & Objet
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 
Polymorphisme (cours, résumé)
Polymorphisme (cours, résumé)Polymorphisme (cours, résumé)
Polymorphisme (cours, résumé)
 
Chapitre 3 elements de base de java
Chapitre 3  elements de base de javaChapitre 3  elements de base de java
Chapitre 3 elements de base de java
 
Chapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En JavaChapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En Java
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-Correction
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El Hassani
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Chapitre 01 - Notions de base
Chapitre 01 - Notions de baseChapitre 01 - Notions de base
Chapitre 01 - Notions de base
 
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
Formation python
Formation pythonFormation python
Formation python
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objets
 
TP C++ : enoncé
TP C++ : enoncéTP C++ : enoncé
TP C++ : enoncé
 
Rapport Pfe Application Web e-commerce Symfony2
Rapport Pfe Application Web e-commerce Symfony2Rapport Pfe Application Web e-commerce Symfony2
Rapport Pfe Application Web e-commerce Symfony2
 
Cours design pattern m youssfi partie 3 decorateur
Cours design pattern m youssfi partie 3 decorateurCours design pattern m youssfi partie 3 decorateur
Cours design pattern m youssfi partie 3 decorateur
 
Support POO Java Deuxième Partie
Support POO Java Deuxième PartieSupport POO Java Deuxième Partie
Support POO Java Deuxième Partie
 
Support de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfiSupport de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfi
 

Similaire à Chapitre 5 classes abstraites et interfaces

chapitre5-Classesabstraitesetinterfaces.pdf
chapitre5-Classesabstraitesetinterfaces.pdfchapitre5-Classesabstraitesetinterfaces.pdf
chapitre5-Classesabstraitesetinterfaces.pdf
Moez Moezm
 
JAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVAJAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVA
Aymen Bedwivski
 
Java uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 javaJava uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 java
Amel Morchdi
 
Memo java
Memo javaMemo java
Memo java
Ghazouani Mahdi
 
Interface collectionsinter
Interface collectionsinterInterface collectionsinter
Interface collectionsinter
RYMAA
 
Cours5-heritage.pptx
Cours5-heritage.pptxCours5-heritage.pptx
Cours5-heritage.pptx
RihabBENLAMINE
 
Cours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweightCours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweight
ENSET, Université Hassan II Casablanca
 
Programmation_Orientée_Objet_POO-cours.pdf
Programmation_Orientée_Objet_POO-cours.pdfProgrammation_Orientée_Objet_POO-cours.pdf
Programmation_Orientée_Objet_POO-cours.pdf
hakima29
 
Chapitre 4 la programmation oriénté objet
Chapitre 4 la programmation oriénté objetChapitre 4 la programmation oriénté objet
Chapitre 4 la programmation oriénté objet
Säß Ŕî
 
Héritage et redéfinition de méthode
Héritage et redéfinition de méthodeHéritage et redéfinition de méthode
Héritage et redéfinition de méthode
ECAM Brussels Engineering School
 
chapitre4-HeritageetPolymorphisme.pdf
chapitre4-HeritageetPolymorphisme.pdfchapitre4-HeritageetPolymorphisme.pdf
chapitre4-HeritageetPolymorphisme.pdf
Moez Moezm
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07
haythem_2015
 
Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objet
Amir Souissi
 
POO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdfPOO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdf
YasushiTsubakik
 
c++,language hgkuhyijlkkj,mojiuhjknkjnuin
c++,language hgkuhyijlkkj,mojiuhjknkjnuinc++,language hgkuhyijlkkj,mojiuhjknkjnuin
c++,language hgkuhyijlkkj,mojiuhjknkjnuin
chaimaabaoub09
 
Chapitre 5_Heritage.pptxygygilyiuhoijoijoi
Chapitre 5_Heritage.pptxygygilyiuhoijoijoiChapitre 5_Heritage.pptxygygilyiuhoijoijoi
Chapitre 5_Heritage.pptxygygilyiuhoijoijoi
inesslimane4
 
POO - Chapitre6.pptx
POO - Chapitre6.pptxPOO - Chapitre6.pptx
POO - Chapitre6.pptx
RAYENBOUAFIF1
 
Chapitre 04 : les fonctions
Chapitre 04 : les fonctionsChapitre 04 : les fonctions
Chapitre 04 : les fonctions
L’Université Hassan 1er Settat
 
CorrigesDesExercices_ProgrammationOrienteeObjet_Bersini.pdf
CorrigesDesExercices_ProgrammationOrienteeObjet_Bersini.pdfCorrigesDesExercices_ProgrammationOrienteeObjet_Bersini.pdf
CorrigesDesExercices_ProgrammationOrienteeObjet_Bersini.pdf
hakima29
 

Similaire à Chapitre 5 classes abstraites et interfaces (20)

chapitre5-Classesabstraitesetinterfaces.pdf
chapitre5-Classesabstraitesetinterfaces.pdfchapitre5-Classesabstraitesetinterfaces.pdf
chapitre5-Classesabstraitesetinterfaces.pdf
 
JAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVAJAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVA
 
Java uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 javaJava uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 java
 
Memo java
Memo javaMemo java
Memo java
 
Interface collectionsinter
Interface collectionsinterInterface collectionsinter
Interface collectionsinter
 
Cours5-heritage.pptx
Cours5-heritage.pptxCours5-heritage.pptx
Cours5-heritage.pptx
 
Cours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweightCours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweight
 
Programmation_Orientée_Objet_POO-cours.pdf
Programmation_Orientée_Objet_POO-cours.pdfProgrammation_Orientée_Objet_POO-cours.pdf
Programmation_Orientée_Objet_POO-cours.pdf
 
Chapitre 4 la programmation oriénté objet
Chapitre 4 la programmation oriénté objetChapitre 4 la programmation oriénté objet
Chapitre 4 la programmation oriénté objet
 
Héritage et redéfinition de méthode
Héritage et redéfinition de méthodeHéritage et redéfinition de méthode
Héritage et redéfinition de méthode
 
chapitre4-HeritageetPolymorphisme.pdf
chapitre4-HeritageetPolymorphisme.pdfchapitre4-HeritageetPolymorphisme.pdf
chapitre4-HeritageetPolymorphisme.pdf
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07
 
Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objet
 
POO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdfPOO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdf
 
c++,language hgkuhyijlkkj,mojiuhjknkjnuin
c++,language hgkuhyijlkkj,mojiuhjknkjnuinc++,language hgkuhyijlkkj,mojiuhjknkjnuin
c++,language hgkuhyijlkkj,mojiuhjknkjnuin
 
Polymorphisme
PolymorphismePolymorphisme
Polymorphisme
 
Chapitre 5_Heritage.pptxygygilyiuhoijoijoi
Chapitre 5_Heritage.pptxygygilyiuhoijoijoiChapitre 5_Heritage.pptxygygilyiuhoijoijoi
Chapitre 5_Heritage.pptxygygilyiuhoijoijoi
 
POO - Chapitre6.pptx
POO - Chapitre6.pptxPOO - Chapitre6.pptx
POO - Chapitre6.pptx
 
Chapitre 04 : les fonctions
Chapitre 04 : les fonctionsChapitre 04 : les fonctions
Chapitre 04 : les fonctions
 
CorrigesDesExercices_ProgrammationOrienteeObjet_Bersini.pdf
CorrigesDesExercices_ProgrammationOrienteeObjet_Bersini.pdfCorrigesDesExercices_ProgrammationOrienteeObjet_Bersini.pdf
CorrigesDesExercices_ProgrammationOrienteeObjet_Bersini.pdf
 

Plus de Amir Souissi

Chap5 diagramme d'etats-transitions
Chap5 diagramme d'etats-transitionsChap5 diagramme d'etats-transitions
Chap5 diagramme d'etats-transitions
Amir Souissi
 
Chapitre 4 persistance des donnees
Chapitre 4  persistance des donneesChapitre 4  persistance des donnees
Chapitre 4 persistance des donnees
Amir Souissi
 
Chapitre 3 activites et intents
Chapitre 3   activites et  intentsChapitre 3   activites et  intents
Chapitre 3 activites et intents
Amir Souissi
 
Chapitre 1 introduction generale
Chapitre 1   introduction generaleChapitre 1   introduction generale
Chapitre 1 introduction generale
Amir Souissi
 
Chapitre 2 elements graphiques android
Chapitre 2   elements graphiques androidChapitre 2   elements graphiques android
Chapitre 2 elements graphiques android
Amir Souissi
 
Chapitre 1 decouverte du developpement android
Chapitre 1  decouverte du developpement androidChapitre 1  decouverte du developpement android
Chapitre 1 decouverte du developpement android
Amir Souissi
 
Atelier symfony n 3
Atelier symfony n 3Atelier symfony n 3
Atelier symfony n 3
Amir Souissi
 
Atelier symfony n 2
Atelier symfony n 2Atelier symfony n 2
Atelier symfony n 2
Amir Souissi
 
Atelier symfony n 1
Atelier symfony n 1Atelier symfony n 1
Atelier symfony n 1
Amir Souissi
 
Tp n 6 linux
Tp n 6 linuxTp n 6 linux
Tp n 6 linux
Amir Souissi
 
Tp n 5 linux
Tp n 5 linuxTp n 5 linux
Tp n 5 linux
Amir Souissi
 
Tp n 4 linux
Tp n 4 linuxTp n 4 linux
Tp n 4 linux
Amir Souissi
 
Tp n 3 linux
Tp n 3 linuxTp n 3 linux
Tp n 3 linux
Amir Souissi
 
Tp n 1 linux
Tp n 1 linuxTp n 1 linux
Tp n 1 linux
Amir Souissi
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UML
Amir Souissi
 
diagramme de classe
diagramme de classediagramme de classe
diagramme de classe
Amir Souissi
 
diagramme des cas d'utilisation
diagramme des cas d'utilisationdiagramme des cas d'utilisation
diagramme des cas d'utilisation
Amir Souissi
 
introduction à la modélisation objet
introduction à la modélisation objetintroduction à la modélisation objet
introduction à la modélisation objet
Amir Souissi
 

Plus de Amir Souissi (18)

Chap5 diagramme d'etats-transitions
Chap5 diagramme d'etats-transitionsChap5 diagramme d'etats-transitions
Chap5 diagramme d'etats-transitions
 
Chapitre 4 persistance des donnees
Chapitre 4  persistance des donneesChapitre 4  persistance des donnees
Chapitre 4 persistance des donnees
 
Chapitre 3 activites et intents
Chapitre 3   activites et  intentsChapitre 3   activites et  intents
Chapitre 3 activites et intents
 
Chapitre 1 introduction generale
Chapitre 1   introduction generaleChapitre 1   introduction generale
Chapitre 1 introduction generale
 
Chapitre 2 elements graphiques android
Chapitre 2   elements graphiques androidChapitre 2   elements graphiques android
Chapitre 2 elements graphiques android
 
Chapitre 1 decouverte du developpement android
Chapitre 1  decouverte du developpement androidChapitre 1  decouverte du developpement android
Chapitre 1 decouverte du developpement android
 
Atelier symfony n 3
Atelier symfony n 3Atelier symfony n 3
Atelier symfony n 3
 
Atelier symfony n 2
Atelier symfony n 2Atelier symfony n 2
Atelier symfony n 2
 
Atelier symfony n 1
Atelier symfony n 1Atelier symfony n 1
Atelier symfony n 1
 
Tp n 6 linux
Tp n 6 linuxTp n 6 linux
Tp n 6 linux
 
Tp n 5 linux
Tp n 5 linuxTp n 5 linux
Tp n 5 linux
 
Tp n 4 linux
Tp n 4 linuxTp n 4 linux
Tp n 4 linux
 
Tp n 3 linux
Tp n 3 linuxTp n 3 linux
Tp n 3 linux
 
Tp n 1 linux
Tp n 1 linuxTp n 1 linux
Tp n 1 linux
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UML
 
diagramme de classe
diagramme de classediagramme de classe
diagramme de classe
 
diagramme des cas d'utilisation
diagramme des cas d'utilisationdiagramme des cas d'utilisation
diagramme des cas d'utilisation
 
introduction à la modélisation objet
introduction à la modélisation objetintroduction à la modélisation objet
introduction à la modélisation objet
 

Dernier

Auguste Herbin.pptx Peintre français
Auguste   Herbin.pptx Peintre   françaisAuguste   Herbin.pptx Peintre   français
Auguste Herbin.pptx Peintre français
Txaruka
 
Zineb Mekouar.pptx Écrivaine marocaine
Zineb Mekouar.pptx   Écrivaine  marocaineZineb Mekouar.pptx   Écrivaine  marocaine
Zineb Mekouar.pptx Écrivaine marocaine
Txaruka
 
1eT Revolutions Empire Revolution Empire
1eT Revolutions Empire Revolution Empire1eT Revolutions Empire Revolution Empire
1eT Revolutions Empire Revolution Empire
NadineHG
 
Chap1 Généralités sur les réseaux informatiques.pdf
Chap1 Généralités sur les réseaux informatiques.pdfChap1 Généralités sur les réseaux informatiques.pdf
Chap1 Généralités sur les réseaux informatiques.pdf
TimogoTRAORE
 
1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif
NadineHG
 
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
Editions La Dondaine
 
Burkina Faso libraries newsletter for June 2024
Burkina Faso libraries newsletter for June 2024Burkina Faso libraries newsletter for June 2024
Burkina Faso libraries newsletter for June 2024
Friends of African Village Libraries
 

Dernier (7)

Auguste Herbin.pptx Peintre français
Auguste   Herbin.pptx Peintre   françaisAuguste   Herbin.pptx Peintre   français
Auguste Herbin.pptx Peintre français
 
Zineb Mekouar.pptx Écrivaine marocaine
Zineb Mekouar.pptx   Écrivaine  marocaineZineb Mekouar.pptx   Écrivaine  marocaine
Zineb Mekouar.pptx Écrivaine marocaine
 
1eT Revolutions Empire Revolution Empire
1eT Revolutions Empire Revolution Empire1eT Revolutions Empire Revolution Empire
1eT Revolutions Empire Revolution Empire
 
Chap1 Généralités sur les réseaux informatiques.pdf
Chap1 Généralités sur les réseaux informatiques.pdfChap1 Généralités sur les réseaux informatiques.pdf
Chap1 Généralités sur les réseaux informatiques.pdf
 
1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif
 
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
 
Burkina Faso libraries newsletter for June 2024
Burkina Faso libraries newsletter for June 2024Burkina Faso libraries newsletter for June 2024
Burkina Faso libraries newsletter for June 2024
 

Chapitre 5 classes abstraites et interfaces

  • 2. 1. Idée de base des classes abstraites Lorsque nous représentons une classe comme un type, nous partons de l’hypothèse que des objets de ce type seront instanciés. Ce n’est pas toujours vrai. Une classe concrète est une classe qu’on instancie pour obtenir des objets. Par opposition à la classe concrète, une classe abstraite ne peut pas être instanciée. Les classes abstraites sont utilisés en héritage pour permettre d’avoir de superclasses appropriées dont d’autres classes peuvent hériter l’interface et l’implantation. La super classe Employé est définie comme classe abstraite. L’objectif sera d’obliger les classes filles de redéfinir la méthode abstraite calculSalaire(). Cette méthode ne sera pas implémentée dans la classe Employé mais elle le sera dans les classes filles concrètes. Ainsi, le mécanisme des classes abstraites permet de définir des comportements (méthodes) qui devront être implémentés dans les classes filles, mais sans implémenter ces comportements. 2. Définir des classes abstraites Une classe devient abstraite à l’aide du mot clé abstract. Syntaxe: public abstract class <Nom_Classe> { … } Une méthode abstraite est une méthode dont on donne l’entête mais sans donner son implémentation (son corps), suivie d’un point-virgule. Une méthode abstraite est aussi déclarée avec le mot clé abstract. Exemple : public abstract class Employe { public abstract void calculSalaire() ; }
  • 3. Si on déclare une méthode abstraite dans une classe alors celle-ci doit être abstraite. Une classe abstraite contient obligatoirement au moins une (ou plusieurs) méthode abstraite, mais peut contenir aussi d’autres méthodes implémentées. Une méthode abstraite peut être soit public soit protected mais pas private. Exemple : public abstract class Employe { //classe abstraite protected float salaire; protected String nom; public Employe (String n){ nom = n; } public void afficher(){ System.out.println("nom = "+ nom + "salaire =" + salaire); } protected abstract void calculSalaire(); //méthode abstraite } Une classe héritant d’une classe abstraite, doit donner une implémentation à toutes les méthodes abstraites de sa superclasse (redéfinition) sinon elle doit être déclarée abstraite (l’abstraction continue). Exemple : public class Permanent extends Employe{ public Permanent (String a){ super (a); } //redéfinition de la méthode abstraite, sinon Permanent doit être déclarée abstraite public void calculSalaire(){ super.salaire = Clavier.lireFloat(); } } Remarques : On ne peut pas utiliser new pour instancier une classe abstraite, néanmoins, on peut déclarer des variables qui font référence à des classes abstraites. On ne peut pas combiner les modificateurs : abstract et final. Employe p = new Employe ("ali"); //Erreur car classe abstraite Permanent p = new Permanent ("ali"); Employe e = p ; //e et p désignent le même objet e.calculSalaire();// appel de calculSalaire() de Permanent p.afficher();// appel de afficher() de Employe
  • 4. 3. Les interfaces Une interface est une forme particulière de classe. Une interface remplace habituellement une classe abstraite qui ne fournit aucune implantation à hériter, c’est-à-dire aucune variable d’instance, ni d’implantation par défaut d’une méthode. Pour définir une interface, on utilise le mot clé interface. Syntaxe: public interface <Nom_Interface> { … } Une interface correspond à un type comportant uniquement des méthodes abstraites et des constantes statiques (on n’a pas à préciser les modificateurs : abstract, final et static). Comme les classes abstraites public, une interface correspond habituellement à un type public. Elle repose ainsi dans son propre fichier (nom_interface.java). Exemple : public interface Employe { public final static float salaire = 1000; public abstract void calculSalaire(); public abstract void afficher(); } Remarques : Les constantes statiques et les méthodes abstraites d’une interface, ne peuvent pas être private ou protected. Les interfaces ne sont pas instanciables. 4. Implémentation des interfaces Une classe peut implémenter une ou plusieurs interfaces. C’est-à-dire avoir les mêmes caractéristiques définies au niveau de ces interfaces. Réciproquement, une interface peut être implémentée par plusieurs classes. L’implémentation d’une interface par une classe veut dire redéfinir les méthodes abstraites de l’interface au niveau de la classe concrète. Pour qu’une classe implémente une interface il faut utiliser le mot clé implements. Syntaxe: public class <Nom_Classe> implements <Interface1>, <Interface2>, ... { … }
  • 5. Exemple : public class Permanent implements Employe{ public String nom; public float salaire; public Permanent(String a){ nom = a ; } // Redéfinition de la méthode calculSalaire() public void calculSalaire(){ float primeMensuelle = Clavier.lireFloat(); // accès à la constante salaire de l’interface par le nom de l’interface salaire = Employe.salaire + primeMensuelle; } // Redéfinition de la méthode afficher() public void afficher(){ System.out.println("nom = "+ nom + "salaire =" + salaire); } } Remarque : Le concept d’interface est proposé en langage Java pour résoudre le problème de l’héritage multiple. class Classe_C extends Classe_A, Classe_B { ... } // Erreur (héritage multiple interdit pour les classes en Java) class Classe_C implements Interface_A, Interface_B { ... } // Héritage multiple à travers les inetrfaces
  • 6. 5. Interfaces et héritage Lors de la définition d’une classe, il est possible de combiner l’héritage avec l’implémentation d’interfaces. Il faut commencer par spécifier la classe mère par un extends, puis spécifier la liste des interfaces par un implements. Syntaxe: public class <Nom_Classe> extends <Classe_Base> implements <Interface1>, <Interface2>, ... { … } Exemple : public class Personne { String nom, prenom; public Personne (String a, String b){ nom = a; prenom =b; } } public class Permanent extends Personne implements Employe { public float salaire; public Permanent(String a, String b){ super(a,b) ; //Appel du constructeur de la classe mère Personne } //Les méthodes afficher() et calculSalaire() de Employe doivent être redéfinie ici public void afficher(){ ... } public void calculSalaire(){ ... } } Une interface peut hériter d’une ou de plusieurs autres interfaces. L’héritage multiple est autorisé pour les interfaces. Il s’agit d’une extension de propriétés sous forme de méthodes abstraites et de constantes statiques. Syntaxe: public interface <Interface1> extends <Interface2>, <Interface3>, ... { … }
  • 7. Exemple : interface MonInterfaceB { void f(); } interface MonInterface1 extends MonInterfaceB { void f1(); } interface MonInterface2 extends MonInterfaceB{ void f2(); } interface MonInterface extends MonInterface1, MonInterface2 { void fd(); } Les classes implémentant MonInterface doivent implémenter f(), f1(), f2(), et fd(). Remarques : Une interface peut servir à définir des constantes : interface Mois{ final int JANVIER = 1, FERVRIER = 2, … DECEMBRE = 12 ; } Il est possible de déclarer des références de types interfaces afin de désigner des objets qui implémentent l’interface en question. Employe e = new Permanent ("Ali", "Ben Salah"); L’opérateur instanceOf peut être utilisé pour savoir si un objet implémente une interface donnée.
  • 8. 6. Exercices Exercice 1 : 1. Ecrire la classe Figure, contenant l’attribut privé nom de la figure et les méthodes suivantes : - un constructeur avec argument - getNom() - setNom(String) - une méthode abstraite float calculAire () - une méthode abstraite void afficher () 2. Ecrire la classe Rectangle, contenant les attributs longueur et largeur. Elle dispose des méthodes suivantes : - un constructeur par défaut - un constructeur avec deux arguments - une méthode calculAire () - une méthode afficher () 3. Ecrire une classe TestFigure qui permet d’instancier un rectangle, de l’afficher et de calculer son aire. 4. Les instructions suivantes sont-elles correctes et pourquoi ? a. Figure f = new Figure ("figure"); b. Figure f = new Rectangle ("rectangle"); c. Figure fig = new Rectangle(10,5); d. Rectangle r = new Rectangle(10,5); fig =r; 5. Ajouter la méthode void affichage () à Figure pour qu’elle affiche la liste des attributs ainsi que l’aire d’une figure. Exercice 2 : 1. Ecrire une interface Homme possédant une seule méthode : void indentite() dont le rôle est d’afficher les informations concernant un homme. 2. Ecrire une classe Personne implémentant cette interface et possédant deux attributs privés nom et prenom de type String et un constructeur avec argument. 3. Ecrire une classe Client héritant de la classe Personne et implémentant l’interface Homme avec un attribut privé supplémentaire nommé numero de type entier et un constructeur avec argument en conséquence. 4. Ecrire une classe Peuple contenant deux attributs privés : un tableau d’Hommes nommé pays de capacité 100 et un entier nbHommes représentant le nombre d’hommes dans pays. Cette classe contient aussi deux méthodes : void naissance (Homme h) : permet d’ajouter un homme dans pays void explorer () : affiche l’identité de chaque homme dans pays. 5. Dans la méthode void main, tester les méthodes naissance () et explorer () après avoir placé dans pays des personnes et des clients
  • 9. Exercice 3 : Les deux classes C1 et C11 sont abstraites. Indiquer pour chacun des cas suivants si les instructions sont acceptées par le compilateur ou non : 1. C1 x = new C1(); 2. C1 y = new C11(); 3. C1 z = new C111(); 4. C1 t = new C12(); 5. z = t ;