Programmation Orientée Objets

Sommaire

  • Les avantages par rapport au paradigme procédural
    • La méthode procédurale et ses limites
    • La programmation orientée objets
  • Caractéristiques et description
    • Classes et objets
    • Encapsulation des données
    • Héritages et interfaces
    • Polymorphismes
    • Modélisation UML ?

La méthode procédurale

Le "paradigme procédural" qui avait court auparavant décrivait des codes assez touffus et finalement peu organisés (malgré les efforts pour modulariser les choses)

 

Ensemble de fonctions et variables non organisées, le programme n'est qu'une liste d'opérations à mener

Cette méthode apporte des limites indéniables :

  • Difficultés de réutilisation du code
  • Difficultés de maintenance
  • Code spaghettis
  • Non protection des données (donc violabilité)

La méthode objets

Dans le paradigme "objets", le programme est un ensemble d'objets qui intéragissent entre eux.

 

On décrit donc les objets et leurs relations

Cette méthode apporte des avantages indéniables :

  • Modularité accrue
  • Maintenance facilitée (si on suit de bonnes pratiques)
  • Héritages (ré utilisabilité)
  • Interfaces (standardisation)
  • Encapsulation des données

Classes

Héritages
Interfaces

Une classe ?

Une classe représente une idée ou un objet de la vie (voiture, personne, facture, contrat, produit, etc).

 

Elle possède des propriétés (ou attributs) et des méthodes (comportements, opérations, fonctions)

Un objet ?

Un objet est une instance d'une classe.

 

Si la classe est un moule, l'objet est le moulage.

L'encapsulation des données

Les données d'une classe sont "encapsulée". C'est elle qui régule la façon dont on peut accéder ou non à ces données.

 

Meilleur contrôle des données et des comportements !

  • Public : tout le monde peut accéder à la propriété ou à la méthode
  • Privé : seul l'objet lui-même peut accéder à la propriété ou à la méthode
  • Protégé : seul l'objet ou un objet issu d'une classe fille peut accéder à la propriété ou la méthode

L'encapsulation des données

Pour encapsuler les données, on utilise donc les opérateurs de visibilités (qu'on peut appeler "modificateurs")

 

Constructeur : la fonction qui est destinée à construire l'objet lors de l'instanciation. C'est son "comportement de naissance"

Accesseurs (ou mutateurs)

  • Permettent de contrôler l'accès aux attributs
  • Les "setters" permettent de modifier des propriétés
  • Les "getters" permettent de récupérer la valeur des propriétés

L'encapsulation des données

// On décrit une personne (TypeScript)
class Personne {
  private nom :string;
  private prenom :string;

  // Constructeur appelé quand on instancie une personne
  constructor(nom :string, prenom :string){
    this.setNom(nom);
    this.prenom = prenom;
  }

  // Fonction qui permet de changer le nom
  public setNom(nom :string) :void {
    // On contrôle le fait que le nom soit en majuscules
    this.nom = nom.toUpperCase();
  }

  public getNom() :string {
    return this.nom;
  }
}

var p :Personne = new Personne('duPont', 'Gérard');
p.getNom(); // renvoie 'DUPONT'

L'héritage : réutilisez moi !

Une classe peut "hériter" d'une autre classe. Elle hérite alors des propriétés et comportements de la classe parente.

 

On peut alors redéfinir, spécialiser, enrichir et affiner les comportements.

// Héritage (TypeScript)
class A {
  public nom :string

  public disBonjour() :string {
    return "Bonjour je suis " + this.nom;
  }
}
// La classe B hérite de la classe A
class B extends {

  public disAurevoir() :string {
    return "Aurevoir, j'étais " + this.nom;
  }
}

var obj = new B();
obj.nom = 'Lior';
obj.disBonjour(); // renvoie "Bonjour je suis Lior"
obj.disAurevoir(); // renvoie "Aurevoir, j'étais Lior"

L'interface : respectez moi !

Une interface est un ensemble de déclarations de méthodes. Si une classe implémente une interface, elle est obligée de redéfinir ces méthodes.

 

Meilleur contrôle des comportements !

// Interface (TypeScript)
interface Hello {
  disBonjour();
  disAurevoir();
}

// La classe A implémente l'interface Hello.
// Elle est obligée de redéfinir les fonctions 
// de l'interface
class A implements Hello {
  public disBonjour(){
    return "Bonjour !";
  }
 
  public disAurevoir(){
    return "Aurevoir !";
  }
}

Polymorphisme ?

Deux méthodes de même nom n'ont pas les mêmes comportements

 

Plusieurs types :

  • Ad Hoc : deux classes ont une méthode nommée "display"
  • Paramétrique : une classe a deux fonctions "display" avec des paramètres différents
  • Héritage : une classe enfant redéfinit le comportement d'une classe parent

Polymorphisme ?

// Polymorphisme (TypeScript)
class Personne {
    public nom :string;
    
    constructor(nom :string){
        this.nom = nom;
    }

    public disBonjour() :string {
        return "Bonjour, je suis " + this.nom;
    }
}

class Pote extends Personne {
    public disBonjour() :string {
        return "Salut bro ! Je suis " + this.nom;
    }
}

var p :Personne;

// p est une personne :
p = new Personne("Lior");
p.disBonjour(); // Renvoie "Bonjour, je suis Lior"

// p devient un pote :
p = new Pote("Lior");
p.disBonjour(); // Renvoie "Salut bro ! Je suis Lior"

Abstract ?

Une classe abstraite est une classe qui ne peut pas être instanciée. Si on veut instancier ce type de classe, on est obligé de créer une classe fille.

 

Lorsqu'une méthode est déclarée abstraite, il faudra impérativement la redéfinir dans une classe fille.

Final ?

Une classe déclarée finale n'a pas le droit d'être héritée.

 

Une fonction déclarée finale n'a pas le droit d'être redéfinie dans une classe fille.

Les Design Patterns

  • Model View Controller
  • Factory
  • Decorator
  • Observer
  • Singleton
  • Strategy
  • ....

Allez plus loin avec UML

UML est un langage de représentation qui permet de décrire une application (sous forme de schémas le plus souvent).

 

Ses formalismes permettent de poser et d'analyser les classes et leurs interactions.

Il existe de nombreux logiciels permettant de dessiner les diagrammes UML qui représentent une application.

 

Certains permettent même de générer la base du code dans le langage choisi.

Vous, en train de découvrir la POO :

Programmation Orientée Objets

By Lior CHAMLA

Programmation Orientée Objets

Petite introduction à la Programmation Orientée Objets : Classes, objets, héritages, interfaces, encapsulation des données, etc

  • 1,298