Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
sio:bloc2:poo:rappels [2024/09/03 11:06] – supprimée - modification externe (Date inconnue) 127.0.0.1 | sio:bloc2:poo:rappels [2024/09/11 20:19] (Version actuelle) – [Polymorphisme d'héritage] jcheron | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Rappels ====== | ||
+ | ===== Encapsulation ===== | ||
+ | L' | ||
+ | L' | ||
+ | |||
+ | ==== Types d' | ||
+ | |||
+ | ^Accès ^Rôle | | ||
+ | | Privé (private) |Accessibilité dans l' | ||
+ | | Protégé (protected) |id Privé + Accessibilité dans les classes dérivées | | ||
+ | | Public (public) |id Protégé + Accessibilité de l' | ||
+ | |||
+ | === Exemples java=== | ||
+ | == Private == | ||
+ | |||
+ | <sxh java; | ||
+ | public class Base { | ||
+ | private int member; | ||
+ | public int getMember(){ | ||
+ | //Accès possible à this.member ou member sur l' | ||
+ | return this.member; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | == Protected == | ||
+ | |||
+ | <sxh java; | ||
+ | public class Base { | ||
+ | protected int pMember; | ||
+ | |||
+ | public int getpMember() { | ||
+ | return pMember; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | public class Derivee extends Base { | ||
+ | public void maminpulePMember(){ | ||
+ | //Accès possible à this.member ou member sur l' | ||
+ | System.out.println(this.pMember); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | == Public == | ||
+ | |||
+ | <sxh java; | ||
+ | public class Base { | ||
+ | protected int pMember; | ||
+ | public static int count; | ||
+ | |||
+ | public int getpMember() { | ||
+ | return pMember; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | public class Programme { | ||
+ | |||
+ | /** | ||
+ | * @param args | ||
+ | */ | ||
+ | public static void main(String[] args) { | ||
+ | Base b=new Base(); | ||
+ | //Accès au membre public de classe count | ||
+ | Base.count++; | ||
+ | //Accès au membre public getpMember sur une instance de Base | ||
+ | System.out.println(b.getpMember()); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== Règles de mise en oeuvre ==== | ||
+ | |||
+ | Les membres de données ne doivent jamais être à portée publique, excepté les membres de données statiques (de classe). | ||
+ | Il est ensuite possible de contrôler l' | ||
+ | |||
+ | ==== Méthodes d' | ||
+ | |||
+ | === Accesseur en lecture === | ||
+ | Le rôle d'un accesseur en lecture est de retourner la valeur d'un membre privé. | ||
+ | |||
+ | <sxh java; | ||
+ | public int getpMember() { | ||
+ | return pMember; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | === Accesseur en écriture (modificateur) === | ||
+ | |||
+ | Le rôle d'un accesseur en écriture est de permettre la modification d'un membre privé, par affectation de la valeur passée en paramètre. | ||
+ | |||
+ | <sxh java; | ||
+ | public void setpMember(int pMember) { | ||
+ | this.pMember=pMember; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== Construction d' | ||
+ | |||
+ | Un constructeur est une méthode d'une classe permettant l' | ||
+ | On parle dans ce cas de surcharge (overloading).\\ | ||
+ | Le rôle d'un constructeur est de permettre de créer des instances d' | ||
+ | |||
+ | ===== Polymorphisme d' | ||
+ | Le polymorphisme est un concept permettant de simuler le changement de comportement ou de forme d'un objet, au cours de l' | ||
+ | |||
+ | **Exemple de mise en oeuvre :**\\ | ||
+ | Soit une classe **Animal** abstraite, ayant pour Classes dérivées **Cloporte** et **Limace**. | ||
+ | Le polymorphisme se met en place grâce à la spécialisation (héritage + surdéfinition des méthodes).\\ | ||
+ | Il permettra d' | ||
+ | |||
+ | < | ||
+ | |||
+ | |||
+ | La classe Animal est abstraite (il n'est pas possible d' | ||
+ | |||
+ | <sxh java; | ||
+ | public abstract class Animal{ | ||
+ | int position; | ||
+ | public abstract void avancer(); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Les classes **Limace** et **Cloporte** héritent de **Animal** et surdéfinissent la méthode **avancer** : | ||
+ | |||
+ | <sxh java; | ||
+ | public class Limace{ | ||
+ | @Override | ||
+ | public void avancer(){ | ||
+ | this.position++; | ||
+ | this.laisserTraceDe(bave); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <sxh java; | ||
+ | public class Cloporte{ | ||
+ | @Override | ||
+ | public void avancer(){ | ||
+ | this.position=this.position+2; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Dans un programme, l' | ||
+ | |||
+ | <sxh java; | ||
+ | Animal unAnimal; | ||
+ | ... | ||
+ | unAnimal.avancer(); | ||
+ | </ | ||
+ | ===== Interface ===== | ||
+ | Une **Interface** permet en POO de définir le comportement que devront implémenter une ou plusieurs classes. |