GenieLog2017/Cours3&4.md
2018-03-09 15:58:49 +01:00

5.5 KiB


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