--- title: "Génie logiciel, Séance 3 et 4, Les concepts de la programmation orienté objet" author: [SCHINDLER Hugo] date: \today titlepage: true ... \newpage Les concepts de la programmation orienté objet # I/ Les dosses Une **dosse** définit les propriétés de tous les objets qui lui sont associés. |Nom|Rectangle| |:-----------------------------:|:-----------------------------:| |Donnés (attributs)|Largeur| ||Longueur| |Opérateur (méthode)|périmètre| ||Surface| ||Redimensionnement| **Constructeur** Même nom que la dosse, pas de type de retour Surcharge d'une méthode: - même nom de méthode $\Rightarrow$ signature doit être différent - paramètre différents $\Rightarrow$ signature doit être différent - type de retour différents Signature d'une méthode : - Nom de la méthode - Nombre de paramètres - Type de paramètre - Type de la valeur de retour Visibilité des éléments d'une classe : - Privée (private) élément uniquement visible que dans la classe dans laquelle ils sont définis. - Public élément visible à l'extéreieur de la classe. |En-tête des méthodes|Attributs + corps des méthodes| |:-----------------------------:|:-----------------------------:| |Partie publique|Partie privée| |Interface|Implémentaion| L'encapsulation est un concepte de la POO qui consiste à masquer les détails d'implémentation de la classe et à ne rendre visible que la partie interface. # II/ Les objets Les **objets** sont des instances particulières de la classe. L'**état** d'un objet est par définition la valeur de ses attributs. Le **comportement** d'un objet est définit pas ses méthodes. L'**identité** d'un objet est une valeur (adresse) qui lui est associé au moment de sa création. Cette valeur n'est jamais modifiée. **Objet = état + comportement + identité** **Cycle de vie d'un objet**: - création d'un objet par le développeur - utilisation de l'objet par le développeur - description de l'objet par une machine virtuelle de Java ou Garbage collector # III/ Les messages L'envoie d'un message d'un objet A vers un objet B se traduit par l'eécution d'une méthode dans l'objet qui reçoit le massage B. **Mot clef** référence sur l'objet courant **this**. # IV/ L'héritage La **sous-classe** ou **classe dérivée** possède une **relation d'héritage** avec la **classe de base** ou **super classe**. On a une **spécialisation** (vers la sous classe) ou une **généralisation** (vers la classe de base) Exemple : Compte d'epargne et Compte cournat héritent des propriétés de Compte bancaire. La relation d'héritage traduit une relation "est un"" ou "est une sous classe". exemple : le compte cournat est une calsse dérivée du compte bancaire. **Conclusion:** L'héritage évite la duplication de code et favorise la réutilisation **Language JAVA** Relation d'héritage $\rightarrow$ **Remarques :** - **Visibilité des attributs** protégé (comprmis entre public et privée). L'élément est visible dans la classe où il est défini et dans les classes dérivées. Ou pour accéder à un attribut, on peut aussi faire une fonction dans la classe de base. - **Redéfinition des méthodes** : re définir la méthode retirer dans la classe compteCourant public void retirer(double montant){ if (solde+montantCourant >= montant) solde=solde-montant; } - **Affectation entre un objet d'une classe de base et un objet d'une classe dérivée**: Comtebancaire CB; CompteCourant CC= new CompteCourant(...); CB=CC; CB.retirer(500); On a le droit de faire une affection entre un objet d'une classe de base et un objet d'une classe dérivée Que ce passe t'il ? Synthaxiquement : correct lors de la compilation. Exécution : Méthode retirer du CompteCourant qui est appelé; **mécanisme d'identification de type** (RTTI) CB.emettreChequier(); est synthaxiquement incorrect. # V/ Le polymorphisme Livre, Polycopie, Revue scientifique. Livre : titre, auteur, éditeur, nombre de pages. Revue scientifique : titre, éditeur nombre d'articles. Polycopié : titre, auteur, éditeur. ## 1ere solution (sans polymorphisme) 3 classes indépendantes Pas élégante Pas facilement maintenable ## 2ème solution (avec le polymorphisme) Utilisation de l'héritage. Appel de la classe supérieur **super** **Conclution**: Le ploymorphisme est la possiblité pour un même message (editer) de déclancher des opérations différntes selon les objets auquel il est adressé. # VI/ Les classes et les méthodes abstraites : Exemple : - Rectange - Cercle - Triangle Calcul du périmètre et de la surface Mot clef **abstract** pour éviter de définir des classes inutiles. Une méthode abstraite implique de définir la classe comm étant abstraite. La réciproque n'est pas forcéménet vrai. Classe de méthode abstraites : - On ne peut pas instancer une classe abstraite. - Les méthodes abstraites doivnet obligatoiremnet etre redifini dan skes classes derivées 1ere solution : Forme f=new Forme(); f.preimètre(); {0, 0} 2ème solution : Forme f=new Forme(); NON car classe abstraite **Remarques**: Classe abstraite : - Sans attributs - Toutes les méthodes abstraites **Interface** Même chose que abstract public **Interface** Forme{ public double surface(); public double rectangle(); } public class Ractangle implements Forme{ } Même chose pour les classes Cercle et Triangle