POO

De Banane Atomic
Version datée du 2 octobre 2020 à 15:14 par Nicolas (discussion | contributions) (→‎Overriding)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigationAller à la recherche

Liens

Intérêt

La modélisation orientée objet reste proche de la réalité, donc plus facile à comprendre notamment pour les personnes non-techniques.
Le découpage en classes facilite la maintenance.
Réutilisabilité.

Les 3 piliers de la POO:
  1. l'encapsulation
  2. l'héritage
  3. le polymorphisme

Objet

C'est un élément concret, réel qui correspond à la définition de sa classe. Un objet est aussi appelé instance de classe.

Classe

C'est la définition, la description d'un objet, de ses caractéristiques:

  • Propriétés ou Attributs
  • Actions ou Méthodes

Encapsulation

Permet de masquer le fonctionnement interne de l'objet afin de contrôler l'accès aux données.

  • Contrôler l’accès aux données
  • Séparer l'implémentation de l'interface

Héritage

Permet de définir une classe à partir d'une classe «parente» tout en spécialisant les éléments de sa définition.

Interface

Représente une définition, une description de comportements (méthodes).
Une classe peut implémenter (équivalent de l'héritage pour les interfaces) une ou plusieurs interfaces.
Il n'est pas possible de construire un objet à partir d'une interface.

Polymorphisme

Substitution / Dynamic Polymorphism / Runtime Polymorphism / Overriding

Mécanisme de substitution d'une méthode d'une classe «parente».

Csharp.svg
class Parent {
    public virtual void Method() { /* code */ }
}
class Fils : Parent {
    public override void Method() { /* code */ }
}

Parent parent = new Fils();
// substitution de Method de la classe Parent pour celle de la classe Fils
parent.Method();

Polymorphisme ad hoc / Static Polymorphism / Compile time Polymorphism / Overloading

C'est l'autre nom de la surcharge de méthode (overload en anglais).
Le compilateur choisit la méthode à utiliser en fonction du type des paramètres.

Csharp.svg
public int Addition(int a, int b) { /* code */ }
public int Addition(int a, int b, int c) { /* code */ }
public double Addition(double a, double b) { /* code */ }

Overloading

Having multiple methods with the same name but different signatures.

Cs.svg
Item GetItem(int id);
Item GetItem(string name);

Overriding

Child class overrides method defined in parent class.

Cs.svg
class Parent
{
    public abstract Item GetItem(int id);
}

class Child : Parent
{
    public override Item GetItem(int id) { }
}