Rappels :  la programmation
orientée objet


 

Concepts fondamentaux de La P.O.O

Nous écrirons P.O.O pour : programmation orientée objet.

Voici trois concepts qui donnent toute sa puissance à la P.O.O.
 
  • Concept de modélisation à travers la notion de classe et d’instanciation de ces classes.

    • Concept d’action à travers la notion d’envoi de messages et de méthodes à l’intérieur des objets.

    • Concept de construction par réutilisation et amélioration par l’utilisation de la notion d’héritage.

     

    1.1 les objets

    Définition
    Un module représente un objet ou une classe d’objet de l’espace du problème et non une étape principale du processus total, comme en programmation descendante.

     

    Recenser les objets du monde réel

    Lors de l’analyse du problème, faire l’état de l’existant en recensant les objets du monde réel. On établit des classes d’objets et pour chaque objet on inventorie les connaissances que l’on a sur lui :
     

     
    On décrit les systèmes en classes d’objets plutôt qu’en terme de fonction.
     
     

    Exemple :

    Une application de gestion bancaire est organisée sur les objets comptes, écritures, états.


    Les objets rassemblent une partie de la connaissance totale portant sur le problème. Cette connaissance est répartie sur tous les objets sous forme déclarative ou procédurale.

    Les objets sont décrits selon le modèle des structures abstraites de données (TAD) : ils constituent des boîtes noires dissimulant leur implantation avec une interface publique pour les autres objets. Les interactions s’établissant à travers cette interface.
     

    Un objet :


    Encapsulation  
    c’est le fait de réunir à l'intérieur d'une même entité (objet) le code (méthodes) + données (champs). Il est donc possible de masquer les informations d'un objet aux autres objets.

     2 niveaux d’encapsulation :
     Privé

    les champs et les méthodes masqués sont dans la partie privée de l’objet.

    Public

    les champs et les méthodes visibles sont dans la partie interface de l’objet.


     

    1.2 les classes

    Postulons une analogie entre les objets matériels de la vie courante et les objets informatiques. Un objet de tous les jours est souvent obtenu à partir d’un moule industriel servant de modèle pour en fabriquer des milliers. Il en est de même pour les objets informatiques. 

    Définition
    Une classe est une sorte de moule ou de matrice à partir duquel sont engendrés les objets réels qui s’appellent des instances de la classe considérée.

    Remarque
    En POO, programmer revient donc à décrire des classes d’objets, à caractériser leur structure et leur comportement, puis à instancier ces classes pour créer des objets réels. Un objet réel est matérialisé dans l’ordinateur par une zone de mémoire que les données et son code occupent.

      Une classe est composée :
     
  • D’attributs (ou champs, ou variables d’instances).

  • Les attributs de la classe décrivent la structure de ses instances (les objets).
     
  • De méthodes (ou opérations de la classe).

  • Les méthodes décrivent les opérations qui sont applicables aux instances de la classe.

    Un exemple : les étudiants

    Supposons que chaque étudiant soit caractérisé par sa note en mathématiques (NoteMath) et sa note en informatique (NoteInfo). Un étudiant doit pouvoir effectuer éventuellement des opérations de calcul de ses moyennes dans ces deux matières (MoyMath, MoyInfo)et connaître sa moyenne générale calculée à partir de ces deux notes (MoyTotale).

     
    La classe Etudiant a été créée. Elle ne possède que les attributs NoteMath et NoteInfo. Les méthodes de cette classe sont par exemple MoyMath, MoyInfo, MoyTotale.
    Nous avons créé deux objets étudiants (deux instances : Julien et Claudie) de la classe Etudiant.

     
    1.3 L’héritage

    Dans un LOO (langage orienté objet), il existe une particularité dans la façon d’organiser ses classes : l’héritage de propriétés. L’objectif est de construire de nouvelles classes en réutilisant des attributs et des méthodes de classes déjà existantes.
     
    C’est un mécanisme très puissant qui permet de décrire des structures génériques en transmettant depuis l’intérieur d’une même classe toutes les propriétés communes à toutes les " sous-classes " de cette classe. Par construction toutes les sous-classes d’une même classe possèdent toutes les attributs et les méthodes de leur classe parent.

     
    • Les attributs et les méthodes peuvent être modifiés au niveau de la sous-classe.
    • Il peut y avoir des attributs et/ou des méthodes supplémentaires dans une sous-classe.

     

    Propriétés générales et pratiques de l'héritage :

    • Une classe A qui hérite d’une classe B dispose implicitement de tous les attributs et de toutes les méthodes définis dans B.
    • Les attributs et les méthodes définis dans A sont prioritaires par rapport aux attributs et aux méthodes de même nom définis dans B.
     
    Exemple :

    La classe " Etudiant premier cycle" héritant de la classe Etudiant


    Tout se passe comme si toute la classe Etudiant était recopiée dans la sous-classe Etudiant premier cycle (même si l’implémentation n’est pas faite ainsi). La nouvelle classe dispose d’un attribut supplémentaire (Mention) et d’une méthode supplémentaire (EvaluerMention).

     

    Voici en Delphi (à titre indicatif) une implantation possible de ces deux classes : 
     
    type Tmention=(Passable,Abien,Bien,Tbien);

    Etudiant = class

    NoteMath : real;
    NoteInfo : real;
    procedure MoyMath(UneNote:real);
    procedure MoyInfo(UneNote:real);
    function MoyTotale : real ;
    end;
     

    Etudiant1erCycle = class(Etudiant)

    Mention: Tmention ;
    function EvaluerMention: Tmention;
    end;

    Voici en C# (à titre indicatif) une implantation possible de ces deux classes :
     
    class Etudiant {
        public float NoteMath(){.....}
        public float NoteInfo(){.....}
        public void MoyMath(float UneNote){
        ...
        }
        public void MoyInfo(float UneNote){
        ...
        }
        public float MoyTotale(){ ... }
     }// fin classe Etudiant

    public class Etudiant1erCycle : Etudiant {
        public String Mention(){.....}
        public String EvaluerMention(){ ... }
        public static void Main(String[ ] args){
        ...
        }
    }// fin classe Etudiant1erCycle


     
    Exemples d’héritage dans d’autres domaines :

    Structures mathématiques :


     

    Héritage de figures en géométrie affine :


     
     

    Héritage d'objets graphiques dans un système multi-fenêtré fictif :