From 4454a583a1c5a24f97fd0eaa80b62e164942bff0 Mon Sep 17 00:00:00 2001 From: hschindler Date: Fri, 9 Mar 2018 15:58:49 +0100 Subject: [PATCH] =?UTF-8?q?T=C3=A9l=C3=A9verser=20un=20nouveau=20fichier?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cours3&4.md | 221 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 221 insertions(+) create mode 100644 Cours3&4.md diff --git a/Cours3&4.md b/Cours3&4.md new file mode 100644 index 0000000..d5c336d --- /dev/null +++ b/Cours3&4.md @@ -0,0 +1,221 @@ +--- +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 + + + + + + + + + + + + + + + + + + + + + + +