Téléverser un nouveau fichier
This commit is contained in:
parent
fed0f16a8c
commit
4454a583a1
1 changed files with 221 additions and 0 deletions
221
Cours3&4.md
Normal file
221
Cours3&4.md
Normal file
|
@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in a new issue