Rappel : les relations
entre objets
Les objets communiquent en échangeant des messages (invocation des méthodes).
Communication : Une classe A utilise/contient un objet de la classe B
• Association : relation unaire ou binaire entre 2 classes différente Class A Class B
• Agrégation : relation de dépendance faible entre 2 classes. Class A Class B
• Composition : relation de dépendance forte. Class A Class B
1 REGUIEG Hicham 24 décembre 2023
Héritage et sous classes : introduction
Etudiant Enseignant ATS
id : String id : id :
nom : String String String
prenom : String nom : String nom : String
dateNaissance : Date prenom : String prenom : String
Classe : String grade : String service : String
assisterCours() anneeRecrutement : Date anneeRecrutement : Date
passerExamen() donnerCours() faireService()
preparerExamen()
2 REGUIEG Hicham 24 décembre 2023
Héritage et sous classes : introduction (2)
Personne
id : String
Réutilisation nom : String
prenom : String
Etudiant Enseignant ATS
dateNaissance : Date grade : String service : String
Classe : String anneeRecrutement : Date anneeRecrutement : Date
assisterCours() donnerCours() faireService()
passerExamen() preparerExamen()
3 REGUIEG Hicham 24 décembre 2023
Héritage et sous classes : Nomination
Personne
Classe Fille id : String Classe mère
Sous classe nom : String Classe parente
Sub class prenom : String Super class
Derived class General class
Etudiant Enseignant ATS
dateNaissance : Date grade : String service : String
Classe : String anneeRecrutement : Date anneeRecrutement : Date
assisterCours() donnerCours() faireService()
passerExamen() preparerExamen()
4 REGUIEG Hicham 24 décembre 2023
Héritage: suite
Une sous classe hérite
Les attributs (fields) Oui
Les méthodes (methods) Oui
Les constructeurs (constructors) Non
Les constructeurs des classes mères sont invoqués par les sous classes
5 REGUIEG Hicham 24 décembre 2023
Types d’héritage
Il existe 5 types d’héritage :
• Héritage simple
• Héritage à plusieurs niveaux
• Héritage hiérarchique
• Héritage multiple
• Héritage hybride
Non supporter en JAVA
6 REGUIEG Hicham 24 décembre 2023
Types d’héritage : héritage simple (single)
Class A
Class B
Héritage simple
Single inheritance
7 REGUIEG Hicham 24 décembre 2023
Types d’héritage : Héritage à plusieurs niveaux
Class A
Héritage à plusieurs niveaux
Multilevel inheretance
Class B
Class C
8 REGUIEG Hicham 24 décembre 2023
Types d’héritage : Héritage Hiérarchique
Class A
Class B Class C
Héritage hiérarchique
Hierarchical inheritance
9 REGUIEG Hicham 24 décembre 2023
Types d’héritage : Héritage multiple
Class A Class B
Class C
Non supporter en JAVA
Héritage multiple
multiple inheritance
10 REGUIEG Hicham 24 décembre 2023
Types d’héritage : Héritage hybride
Class A
Class B Class C
Class D Non supporter en JAVA
Héritage Hybride
Hybrid inheritance
11 REGUIEG Hicham 24 décembre 2023
Héritage : Définition
c'est un mécanisme qui va permettre, comme son nom l'indique, de transmettre
toutes les méthodes d'une classe dite "mère" vers une autre dite "fille" et ainsi
de suite.
L’héritage est une relation de type « est un » / « is a »
L’étudiant est une personne
l’enseignant et un employer, un employer est une personne
12 REGUIEG Hicham 24 décembre 2023
Héritage : Java Key word (extends)
public class Etudiant extends Personne {
Personne
// personne members
// Etudiant members
Etudiant
}
13 REGUIEG Hicham 24 décembre 2023
Polymorphisme :
Polymorphisme est dérivé de deux mots grec: poly et morphs. Poly veut dire
multi et morphs signifie forme. Donc, il signifie plusieurs ou multiforme.
1. Méthodes : des méthodes de même noms peuvent avoir des comportements différents (body)
ou effectuer des opérations sur des données de type différents.
2. Objets : un objet peut avoir plusieurs forme en même temps.
14 REGUIEG Hicham 24 décembre 2023
Polymorphisme : méthodes Surchage (Overloading) redéfinition (Overriding)
Le Polymorphisme peut être réaliser en Java en utilisant :
1. Surcharge : permet de définir plusieurs fois une même méthode avec des arguments différents .
compile time polymorphism (static polymorphisme or early binding)
2. Redéfinition : La redéfinition de méthode en Java se produit lorsqu'une classe fille a la même
méthode que celle déclarée dans la classe mère. runtime time polymorphism (dynamic metho
dispatch or late binding)
15 REGUIEG Hicham 24 décembre 2023
Polymorphisme : méthodes Surchage (Overloading))
Surcharge des méthodes
Dans la même classe on utilise le même nom d’une méthode avec des signatures
différentes.
Signature = nom + arguments.
Exemple: la méthode max de la classe Math. max(int, int) max(double, double)
…
16 REGUIEG Hicham 24 décembre 2023
Polymorphisme : méthodes Surchage (Overloading))
Avantage Surcharge des méthodes
• augmenter la lisibilité du programme, exemple: au lieu de faire max1 max2 …
utilise max.
• permet d'effectuer une même action de différentes manières.
17 REGUIEG Hicham 24 décembre 2023
Polymorphisme : méthodes redéfinition (Overriding))
Redéfinition des méthodes
Règles pour avoir une redéfinition d’une méthode en Java:
1. On doit avoir la relation « est un », (héritage).
2. La méthode fille doit avoir le même nom que dans la classe parent.
3. La méthode fille doit avoir la même signature que dans la classe parent. les mêmes
paramètres(arguments).
18 REGUIEG Hicham 24 décembre 2023
Polymorphisme : méthodes redéfinition (Overriding))
Redéfinition des méthodes
Public class SuperClass {
void test(int a){}
}
Public class subClass extends SuperClasse {
void test(int a) {}
}
19 REGUIEG Hicham 24 décembre 2023
Héritage et
Polymorphisme en Java
public class B extends A {
public class A {
public B() {
public A() {
System.out.println("Constructeur B");
System.out.println("Constructeur A");
}
}
}
}
public static void main(String[] args) {
Constructeur A
B b = new B() ;
Constructeur B
}
20 REGUIEG Hicham 24 décembre 2023
Encapsulation et héritage
21 REGUIEG Hicham 24 décembre 2023
Encapsulation et héritage : protected
Personne
#id : String
#nom : String
#prenom : String
Etudiant Enseignant ATS
dateNaissance : Date grade : String service : String
Classe : String anneeRecrutement : Date anneeRecrutement : Date
assisterCours() donnerCours() faireService()
passerExamen() preparerExamen()
22 REGUIEG Hicham 24 décembre 2023
Encapsulation et héritage : protected
public class Personne {
protected String id;
protected String nom;
protected String prenom;
public Personne(String id, String nom, String prenom) {
this.id = id;
this.nom = nom;
this.prenom = prenom;
}
}
Encapsulation et héritage : protected
public class Etudiant extends Personne {
private String classe;
public Etudiant(String id, String nom, String prenom) {
super(id, nom, prenom);
public Etudiant(String id, String nom, String prenom, String classe) {
this(id, nom, prenom);
this.classe = classe;
}
}
La classe Object
clone()
equals()
getClass()
toString()
.
.
25 REGUIEG Hicham 24 décembre 2023
Transtypage implicite et explicite
(up casting and down casting)
26 REGUIEG Hicham 24 décembre 2023
Limitation : final keyword
27 REGUIEG Hicham 24 décembre 2023
Abstraction
Héritage (inheritance) Encapsulation
(setters + getters)
polymorphisme
masquage des
associations données
Réutilisation du code Abstraction Sécurité de données
28 REGUIEG Hicham 24 décembre 2023
Abstraction
hiding the internal implementation of the method and only showing the functionality to the users
cacher l'implémentation interne de la méthode et ne montrer que la fonctionnalité aux utilisateurs
public void methode() ;
{ service
...
...
...
}
29 REGUIEG Hicham 24 décembre 2023
Abstraction : exemple réel
30 REGUIEG Hicham 24 décembre 2023
Abstraction
Nous av1ons deux maniérés pour réaliser l’abstraction
• Abstract class ; les classes abstraites (0-100%)
• Interface : les interfaces
31 REGUIEG Hicham 24 décembre 2023
Class Abstract
Abstract classes allow you to create blueprints for concrete classes. But the
inheriting class should implement the abstract method.
32 REGUIEG Hicham 24 décembre 2023
Class Abstract : exemple
Cercle Carre Rectangle
centre cote Longueur
rayon largeur
calculerPerimetre() calculerPerimetre() calculerPerimetre()
calculerSurface() calculerSurface() calculerSurface()
33 REGUIEG Hicham 24 décembre 2023
Class Abstract : exemple
« abstract »
FormGeometrique
Abstract calculerPerimetre()
Abstract calculerSurface()
Cercle Carre Rectangle
centre cote Longueur
rayon largeur
calculerPerimetre() calculerPerimetre() calculerPerimetre()
calculerSurface() calculerSurface() calculerSurface()
34 REGUIEG Hicham 24 décembre 2023
Class Abstract : exemple
public class Cercle extends FormGeometrique {
float rayon;
public abstract class FormGeometrique {
String couleur
@Override
public abstract float calculerPerimtre();
public float calculerPerimtre() {
public abstract float calculerSurface();
// TODO Auto-generated method stub
return (float) (2.0f*rayon*Math.PI);
Public void afficherCouleur(){
}
Sysous(“couleur”);
}
@Override
public float calculerSurface() {
// TODO Auto-generated method stub
return (float) (Math.PI * rayon * rayon);
}
35 REGUIEG Hicham 24 décembre 2023
}
Class Abstract : règles
36 REGUIEG Hicham 24 décembre 2023
Abstraction: les interfaces
An interface in java is a blueprint or a template of a class.
interface provides a pure abstraction in jdk1.7. after jdk 1.8 ???
What is interface :
• Not GUI
• A list of method signature (abstract methods)
• Contract
• The interface is the only mechanism that allows achieving multiple inheritance in java
• Class implements 1..M interface.
37 REGUIEG Hicham 24 décembre 2023
Interface Relationship
Abstract Class Interface Interface
extends Implements
extends
<<realize>>
Class Class Interface
38 REGUIEG Hicham 24 décembre 2023
Interface Relationship
Interface
Realization : is a relationship between the blueprint class and the object
Implements containing its respective implementation level details.
<<realize>>
The relation between the interface and the implementing class
Class
39 REGUIEG Hicham 24 décembre 2023
Interface Relationship
public abstract class ClassName{}
« interface»
InterfaceName public interface InterfaceName {
+methode1(): void void methode1();
+methode2(): void void methode2();
+methode3(): void void methode3();
Implements }
<<realize>> public class ClassName implements InterfaceName
{
@Override
Class public void methode1() {}
@Override
public void methode2() {}
@Override
40 REGUIEG Hicham 24 décembre 2023 public void methode3() {}
}
Interface
Movable ou Convention
CanMove naming
Int maxSpeed = 180 Declaration
Void move();
public static final int maxSpeed = 180; Compilation
Public abstract void move()
41 REGUIEG Hicham 24 décembre 2023
les interfaces : exemple réel
interface Transaction
void retirer(float somme);
42 REGUIEG Hicham 24 décembre 2023
Multiple interface
« interface» « interface»
Movable SelfDrivable
+avancer()
+reculer() +destination()
+tournerGauche() +drive()
+tournerDroite()
Implements Implements
public class Robot implements Movable,
Robot SelfDrivable{
}
43 REGUIEG Hicham 24 décembre 2023
Multiple interface
« interface» « interface»
Movable SelfDrivable
+avancer()
+reculer() +destination()
+tournerGauche() extends +drive()
+tournerDroite()
Implements
public class Robot implements Movable{
Robot }
44 REGUIEG Hicham 24 décembre 2023
Multiple interface
« interface» « interface»
Interface A Interface B
extends « interface»
Interface C
public Interface C extends A, B{
}
45 REGUIEG Hicham 24 décembre 2023
Polymorphisme interface
List<E> MaList = new ArrayList<>();
MaList = new LinkedList<E>();
46 REGUIEG Hicham 24 décembre 2023
Avantage
47 REGUIEG Hicham 24 décembre 2023
Merci
Récapitulatif
49 Rapport annuel 24 décembre 2023