Approche Objet de la Programmation - MOB 1
Programmation Procédurale / Impérative
-
Modèle de Von Neumann :
- Manipulation registre
- Echange avec la mémoire
-
Programmation Impérative "pure" (FORTRAN, Assembleur)
- Origine
- Fonctionnement du matériel
- Architecture de Von Neumann
- Execution d'instruction (ordonnée)
- Effet de bord (modification de context)
Modication de l'état général du programme suite à l'exécution d'une instruction
-
Programmation Procédurale "extension" (C, Python)
- Factorisation (ajout des boucles for/while,…)
- Evite la duplication de code
Approche Bottom-Up
Limite prog procédurale
Principe de substitution de Liskov
Principe de substituabilité appliqué aux objets : un objet de type T est attendu, on doit pouvoir passer un objet de type Y sans que le comportement dudit objet soit changé. C'est-à-dire que tout invariant inhérent à la classe T être respecté dans ses classes filles.
Programmation Orienté Objet
/!\ Programmation Orientée Objet => 'Message Oriented Programming' (Alan Kay)
Langage statiquement typé : opération éventuellement autorisées : introspection + instanciation
- Classe : Défini un objet
- Se comporte comme un type de données
- Nom : Type de l'objet (Human, string)
- Attribut de classe : attribut ayant la même valeur dans tous les objets d'une classe
- Méthodes de classe : méthode n'accédant qu'à des attributs de classe
- Méthode virtuelle : méthode sujette à la ré-écriture
- Méthodes qui rend l'instance dynamique (créée, modifiée, détruite)
- Instanciation : Création d'un objet (avec paramètre)
Pas de valeurs de retour
Cohérence interne (agrégats)
Si pas de constructeur fournit : langage fournit un constructeur par défaut
- Destruction (~Nom pour le C++) : Nom de la procédure prédéfinie
Destructeur = procédure de suppression d'un objet
Nettoyage mémoire
Pas de valeur de retour
Finaliseur (ramasse-miette (recyclage) : Java : Convention : .die(), .close()…)
- Relations (type static, contenu dynamique)
- Agrégation : forme d'inclusion - Relation de type "a un"
Maintient de références (aka pointeurs) vers des objets agrégés
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
agréga : Human | agrégé : Employee
Agrégé survit si l'agréga est détruit (il faut le détruire manuellement)
-> Agrégation composite : L'agrégé est détruit si son unique agréga est détruit
Relation "ensemble/parties" (transitive)
- Héritage : dérivation - Inclusion stricte - Relation de type "est un"
- Dérivation : héritage d'implémentation + interface
- Opération d'instanciation
- Contenu agrégé intégré dans la classe (Employee c Human)
- Pas d'agrégat (intermediaire) => Forme de sous-typage (principe de substitution de Liskov)
- Pas de duplication (système auto)
- Employee hérite/dérive de human
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
Suite après la description de l'objet
- Composition : Agrégation plus forte
- Objet => Instance d'une unique classe (dynamique)
- On peut générer autant d'objet que l'on veut depuis une classe
- Nom (statique) : fournit par défaut pour la création et la destruction
- Attributs (statique)
- 1 déclaration par classe (statique)
Commun à tous les objets de la classe
- Champs publique : Accès libre
- Interface : Ensemble des infos publiques
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
- 1 valeur par objet (dynamique)
- Champs privés : Nécessite l'instanciation d'un objet + méthode déclarée dans la classe
- Accesseurs (getter/setter) : Consultation / Modification des attributs privés
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
- Possibilité d'accès par concept d'amitié entre les classes (cas par cas): Cas par défaut définit
- Relation (dynamique)
- Methodes (statique)
- 1 définition par classe (statique)
- contenu spécifique à chaque objet
- Méthodes privées : accessible uniquement depuis l'intérieur de la classe
La classe qui défini l'objet est statique : fixé et connu à la compilation
API introspection (Java)
Pas d'intercession (auto-modification)
Héritage :
- Hiérarchie de classe :
- Relation transitive : si une classe A hérite d'une classe B qui hérite d'une classe C, alors la classe A hérite de la classe C.
- Héritage multiple : plusieurs super classes
- Structure en arbre ou en graphe orienté
- Restriction d'instanciation
- Classe abstraite : non instanciable
- Classe finale : non dérivable
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
- Protection (publique/privée):
- Protégée
- Restreint à la sous-hierarchie (le type de l'objet représente la racine de la hierarchie d'accès à l'attribut)
- Publique
- La racine de la hiérarchie est telle que toutes les classes peuvent accéder à l'attribut
- Problèmes :
- Exposition de l'implémentation
- Héritage de l'interface de liste
- Héritage multiple : plusieurs classes mère
- Ambiguïtés
- Problème de performance
- Sous-classage :
- Héritage d'implémentation (réutilisabilité du code)
- Héritage d'interface (sémantique, sous-typage)
Héritage d'implémentation => Héritage d'interface
- Sous-typage :
Sous-entend que tout objet d'une classe peut être manipulé comme un objet d'une super-classe
- Héritage par restriction
- Imposer des contraintes plus fortes dans la sous-classe que dans la super-classe
- Programmation différentielle
- Hériter de manière additive au lieu de restrictive
- Problème de mutation
- Ambiguïtés
- Héritage en diamant = duplication ou non de la classe commune
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
Historique
- Smalltalk (1971 + 1980)
- Alan Kay + Dan Ingalls
- 1er langage POO
- DynaBook 1972
- Simula (1962 + 1967)
- Ole-Johan Dalh + Kristen Nygaard
- Smalltalk
- Origine du modèle de Hoare
- Origine des mécanismes orienté objet
Actuellement :
- Standardisation
- OMG (Object Management Group) : 1989
- UML (Unified Modelling Language) : Modelisation graphique
Surcharge, Masquage, Ré-écriture
Surcharge |
Masquage |
Ré-écriture |
Même nom, signature différente |
Même nom, signature différente ou identique |
Même nom, même signature |
Méthodes statiques/dynamiques + fonctions + opérateurs |
Méthodes statiques/dynamique |
Méthodes "virtuelles" |
Dispatch statique |
Dispatch statique |
Dispatch dynamique |
Polymorphisme intra-classe |
Polymorphisme inter-classe |
Polymorphisme intra-hierarchique (inclusion) |
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
|
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
|
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
|
Dispatch <=> Polymorphisme
Utilité
- Faire des choses un peu différemment
- Faire la même chose différemment
- Relation gène <-> allèle
Dispatch
- Statique => Optimisé, performant à la compilation
- Dynamique => Energivore, moins performant
Ré-écriture
- Satisfait la covariance sur son type de retour et la contravariance sur ses arguments
Langage |
Propagation de la surcharge |
Masquage ≠ Ré-écriture |
Java |
Oui |
Méthodes statiques si même signature |
C++ |
Non, par défaut |
Méthodes statiques uniquement |
Méthodes abstraites
Méthode abstraites => Classe abstraites
- Classe abstraite = Classe non-instanciable
- Déclarée sans implémentation initiale
- Implémentée dans les sous-classes
- Méthode abstraite = méthode "virtuelle pure"

Covariance et Contravariance
- Covariance
- un type lié à une hiérarchie de classe est spécialisé dans le même sens que l'héritage
- Contravariance