1 changed files with 221 additions and 0 deletions
@ -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 new issue