POO
Programmation Java
08/11/2021 1
Concepts abordés
●
Héritage
●
Polymorphisme
08/11/2021 2
Héritage
●
En Orienté Objets, on emploie le terme généralisation pour
désigner la relation de classification entre un élément plus
général et un élément plus spécifique.
●
En fait, le terme généralisation désigne un point de vue porté
sur un arbre de classification.
08/11/2021 3
Héritage
●
Par exemple, un animal est un concept plus général qu’un chat,
un chien ou un raton laveur.
●
Inversement, un chat est un concept plus spécialisé qu’un
animal
08/11/2021 4
08/11/2021 5
Héritage multiple
●
Les classes peuvent avoir plusieurs super- classes
●
Dans ce cas, la généralisation est dite multiple et plusieurs
flèches partent de la sous classe vers les différentes super-
classes.
08/11/2021 6
08/11/2021 7
Héritage multiple
●
Une classe peut hériter de plusieurs classes
●
Possible en UML
●
Possible en C++ ou Python par exemple
●
Interdit en java → utilisation des interfaces
08/11/2021 8
Avantages
●
vision descendante → la possibilité de reprendre intégralement
tout ce qui a déjà été fait et de pouvoir l'enrichir.
●
vision ascendante → la possibilité de regrouper en un seul
endroit ce qui est commun à plusieurs.
08/11/2021 9
Syntaxe
●
class classe_fille extends classe_mere
{
// Instructions
}
08/11/2021 10
Surcharge
●
La surcharge est un moyen d’offrir la notion de signature
variable, elle est résolue statiquement par le compilateur.
08/11/2021 11
Exemple
08/11/2021 12
Classe abstraite
●
Les classes abstraites ne sont pas instantiables directement;
elles ne donnent pas naissance à des objets, mais servent de
spécifications plus générales -de type- pour manipuler les
objets instances (d’une) ou plusieurs de leurs sous-classes.
●
La propriété abstraite peut également être appliquée à une
opération afin d’indiquer que le corps de l’opération doit être
défini explicitement dans les sous-classes.
08/11/2021 13
Classes abstraites
●
Si une classe contient, au moins une méthode abstraite →
Classe abstraite
●
Si toutes les méthodes sont abstraites → Interface
08/11/2021 14
Classe abstraite
08/11/2021 15
Rappel
●
Règles de visibilité :
●
+ public : attributs/méthodes publics accessibles à partir
d’autres objets
●
- private : attributs/méthodes publics accessibles uniquement
par la classe
●
# protected : attributs/méthodes publics accessibles à partir de
la classe + sa descendance
08/11/2021 16
Constructeur
●
La classe dérivée doit prendre en charge la construction de la
classe de base
●
Pour construire un Avion, par exemple, il faut construire d'abord
un Véhicule
●
Le constructeur de la classe de base (Véhicule) est donc
appelé avant le constructeur de la classe dérivée (Avion)
08/11/2021 17
Constructeur
●
Si un constructeur de la classe dérivée appelle explicitement un
constructeur de la classe de base, cet appel doit être
obligatoirement la première instruction de constructeur
●
Il doit utiliser pour cela, le mot clé « super »
08/11/2021 18
Notion de getters et de
setters
●
Un getter est une méthode qui permet d'accéder aux variables
des objets en lecture
●
Un setter permet de faire de même chose en écriture
●
→ Permet d’accéder à des variables private
08/11/2021 19
Exemple
public class Chanson
{
private String Titre = " ";
private String Artiste = " ";
private String Duree = "";
08/11/2021 20
public void setArtiste(String Artiste)
{
this.Artiste = Artiste;
}
public String getArtiste()
{
return Artiste;
}
08/11/2021 21
public void setTitre(String Titre)
{
this.Titre = Titre;
}
public String getTitre()
{
return Titre;
}
08/11/2021 22
public void setDuree(String Duree)
{
this.Duree = Duree;
}
public String getDuree()
{
return Duree;
}
}
08/11/2021 23
→ Dans notre cas pour récupérer le titre de la chanson, on fait
appel à la méthode getTitre()
08/11/2021 24
Exercice
08/11/2021 25
Exercice
●
La classe « Etudiant » hérite de la classe « Personne »
●
La classe « Professeur » hérite de la classe « Employe » et la
classe « Employe » hérite de la classe Personne
●
Un Etudiant est une Personne
●
Un Professeur est un Employe et un Employe est une Personne
08/11/2021 26
Classe Personne
public class Personne
{
protected int id;
protected String nom;
protected String prenom;
private static int count;
08/11/2021 27
Classe Personne
public Personne(String nom, String prenom)
{
this.id = ++count;
this.nom = nom;
this.prenom = prenom;
}
08/11/2021 28
Classe Personne
public String toString()
{
return "Je suis " + this.nom+ " "+ this.prenom + "";
}
}
08/11/2021 29
Classe Etudiant
public class Etudiant extends Personne
{
private String cne;
public Etudiant(String nom, String prenom, String cne)
{
super(nom, prenom);
this.cne = cne;
}
08/11/2021 30
Classe Etudiant
public String toString()
{
return super.toString() + " mon CNE est: " + this.cne;
}
}
08/11/2021 31
Classe Employé
public class Employe extends Personne
{
protected double salaire;
public Employe(String nom, String prenom, double salaire)
{
super(nom, prenom);
this.salaire = salaire;
}
08/11/2021 32
Classe Employé
public String toString()
{
return super.toString() + " mon salaire est: " + this.salaire;
}
}
08/11/2021 33
Classe Professeur
public class Professeur extends Employe
{
private String specialite;
public Professeur(String nom, String prenom, double salaire, String
specialite)
{
super(nom, prenom, salaire);
this.specialite=specialite;
}
08/11/2021 34
Classe Professeur
public String toString() {
return super.toString()+" ma specialite est: "+this.specialite;
}
}
08/11/2021 35
Main ()
public class Application
{
public static void main(String[] main)
{
Employe[] employes = new Employe[2];
employes[0] = new Employe("AAA", "BBB", 10000);
employes[1] = new Employe("CCC", "DDD", 10000);
System.out.println("La liste des employes : ");
for (Employe e : employes)
System.out.println("\t" + e);
08/11/2021 36
Main()
Etudiant[] etudiants = new Etudiant[2];
etudiants[0] = new Etudiant("MMM", "NNN", "12345");
etudiants[1] = new Etudiant("OOO", "PPP", "56789");
System.out.println("La liste des etudiants : ");
for (Etudiant e : etudiants)
System.out.println("\t" + e);
08/11/2021 37
Main()
Professeur[] professeurs = new Professeur[2];
professeurs[0] = new Professeur("VVV", "WWW", 5700, "JAVA");
professeurs[1] = new Professeur("XXX", "YYY", 5000,"UML");
System.out.println("La liste des professeurs : ");
for (Professeur p : professeurs)
System.out.println("\t" + p);
}
}
08/11/2021 38