Vous êtes sur la page 1sur 24

Université Cadi Ayyad

Ecole Supérieure de Technologie – Safi

Cours de la programmation orientée objet (JAVA)

Réalisé par : Pr. EL ABDELLAOUI SAID


- Aabidi Hassan
- Ezzahri Yasser Elabdellaoui.said@yahoo.fr
- Toumlal Kaoutar
- Boujnia Aya Généricité

Programmation Orientée Objet : Java 2020 / 2021


INTRODUCTION
PLAN
3

 Problématique
 Généricité
 Classe/Méthode génériques
 Héritage et généricité
 généricité et collection

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2019


PROBLÉMATIQUE
PROBLÉMATIQUE
public class personne {
String nom;
int age;
public personne(String nom, int age) {
this.nom=nom;
this.age=age; }
public String getNom() {
return nom;} public class main {
public int getAge() {
return age;} public static void main(String[] args) {
public void setNom(String nom) { personne ps = new personne(« personne",21);
this.nom = nom; } ps.afficher();
public void setAge(int age) { }}
this.age = age;
}

public void afficher(){


System.out.println(this.nom+" "+this.age);
}}
PROBLÉMATIQUE

public class main {

public static void main(String[] args) {


personne ps = new personne("personne","deux");
ps.afficher();
}
}
GÉNÉRICITÉ

 C’est quoi la généricité?


SOLUTION
CLASSE GÉNÉRIQUE

 Définition d'une classe générique:


Une classe générique est une classe Java qui peut être réutilisée pour des objets de
différents types
La classe générique introduit une variable de type T, incluse entre <> après le
nom du classe

Licence Métier de l’informatique Programmation Orientée Objet : Java 2020 / 2021


CRÉATION D’UNE CLASSE
GÉNÉRIQUE
Une classe générique à deux paramètres

public class Personne<T> {


private T nom;
private T prenom; public void afficher(){
public Personne(T nom, T prenom) { System.out.println(this.nom+"
this.nom=nom; "+this.prenom);
this.prenom=prenom; }
}
public T getNom() {
return nom; public static void main(String [] args)
} {
public T getprenom() { Personne<String, String> ps = new
return prenom; Personne<>("Yasser","ezahri");
} Personne<Integer, Integer> p1 = new
Personne<>(40,50);
public void setNom(T nom) { ps.afficher();
this.nom = nom; p1.afficher();
} }
public void setNom(T prenom) { }
this.prenom = prenom;
}

Licence Métier de l’informatique Programmation Orientée Objet : Java 2020 / 2021


Une classe peut également être générique et supporter un ou plusieurs types
paramétrés.
public class Personne<T,T2> {
private T nom;
private T2 age; public void afficher(){
System.out.println(this.nom+"
public Personne(T nom, T2 age) { "+this.age);
this.nom=nom;
this.age=age; }
} public static void main(String [] args){
public T getNom() { Personne<String, Integer> ps = new
return nom; Personne<>("Hassan", 21);
} Personne<Integer, Integer> p1 = new
public T2 getAge() { Personne<>(100, 21);
return age; Personne<String, String> p2 = new
} Personne<>("Hassan","AAbidi");
public void setNom(T nom) { ps.afficher();
this.nom = nom; p2.afficher();
} p1.afficher();
public void setAge(T2 age) { }
this.age = age; }
}

Licence Métier de l’informatique Programmation Orientée Objet : Java 2020 / 2021


CRÉATION D’UNE MÉTHODE
GÉNÉRIQUE
On peut également déclarer un type générique à une méthode, que cette méthode
appartienne à une classe générique ou non. Comme pour les
La déclaration est la suivante: classes génériques, le
paramètre de type doit
être déclaré,
déclaration entre < >
public <T,T2> boolean memeAge(Personne<T,T2> p) {
avant le type de retour
return p.getNom().equals(p.getAge()); de la méthode .
}

On fait l’appelle en main :

System.out.println(p1.memeAge(p3));

Licence Métier de l’informatique Programmation Orientée Objet : Java 2020 / 2021


HÉRITAGE
GÉNÉRICITÉ ET HÉRITAGE

 On peut étendre une classe générique par une autre classe générique,
à condition que les variables de type soient les mêmes.
 Dans une hiérarchie, tous les arguments type nécessaires à une
superclasse générique doivent être transmis dans la hiérarchie par
toutes les sous-classes.
 Une classe générique peut agir comme une superclasse ou être une
sous-classe.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2019


Les règles de sous-typage des classes génériques sont :
 Si C extends D alors C est une sous-classe de D (au sens où toute instance
de l'une est instance de l'autre).
 La relation d'héritage reste valide entre instanciations de C et D par un
même type. Par exemple, C est sous-classe de D .
 Cette relation d'héritage n'est pas valide entre instanciations de C et D par
des types différents,

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2019


 Une classe générique peut hériter une classe non générique:

class NonGeneric
{
//Classe non générique
}
class Generic<T> extends NonGeneric
{
//Classe générique hérite une
classe non générique
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2019


 Une classe générique peut également hériter une autre classe générique.
Lorsqu’une classe générique hérite une autre classe générique, la sous-
classe doit avoir au moins le même type et le même nombre de paramètres
type.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2019


class A<T>
{
//Superclasse générique avec un seul
type
}
class B<T> extends A<T>
{
//Sous-classe avec le même type
}
class C<T, E> extends A<T>
{
//Sous-classe avec deux types
}
class D<K, V> extends A<T>
{
//Erreur de compilation, sous-classe
ayant différents types

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2019


Exemple:

Public class Etudiant<T,T1,T3>
extends Personne<T, T1>{
    public T3 numInscri;
    Etudiant(T prenom, T1 nom, T3
public class Main
numInscri) {
{
        super(prenom, nom);
public static void main(String[]
        this.numInscri=numInscri;
args)
    }
{
@Override
Etudiant<Integer, String,
public void afficher() {
String> e1=new Etudiant<>(22,
    System.out.println(this.prenom+"
"aya", "bj");
"+this.nom);
        e1.afficher();
   
}
System.out.println(this.numInscri);
}
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2019


LES COLLECTIONS
LA CLASSE ARRAYLISTE
21

Une classe générique de Java: 


 les éléments doivent tous être de même type.
 Ce type peut être quelconque.
 On doit juste préciser ce type à la déclaration.

Fonctionne comme un tableau de taille automatiquement variable


 On peut y ajouter autant d’éléments qu’on veut.
 On peut les accéder/modifier selon leur position

Licence Métier de l’informatique Programmation Orientée Objet : Java 2020 / 2021


EXEMPLE
22

ArrayList<Type des objets> nom = new ArrayList<>();

ArrayList<Object> collection = new Arraylist<>();


//Une collection de type Object

collection.add(new String("Hello World!"));


//ajouter un objet de type String a la collection

collection.add(new Integer(20));
//ajouter un objet de type Integer a la collection

collection.add(new Personne("nom","prenom"));
//ajouter un objet de type Personne a la collection

Licence Métier de l’informatique Programmation Orientée Objet : Java 2020 / 2021


TP
Merci pour votre attention

Vous aimerez peut-être aussi