👀 Voir ma vidéo Object Oriented - Définition ? Ma vision ?
En ce qui me concerne, j’étudie sérieusement les racines et la sémantique des langages OO depuis deux ans et j’ai le sentiment d’être un alien 👽 quand j’entends les autres parler du sujet.
Pour commencer, il n’existe aucun consensus sur une définition exacte de l’OO (donc prenez avec des pincettes ceux qui vendent des définitions exactes 😞). Il est donc très risqué de prendre position car cela vous demandera d’avoir une compréhension et des arguments que 99,9% des développeurs n’ont pas (moi y compris pour le moment).
Ci-dessous deux liens qu’il est plutôt important de lire pour commencer à se faire une bonne idée des principes fondamentaux de l’OO :
- Les définitions d’Alan Kays (celui que beaucoup considèrent comme étant le père fondateur de l’OO avec Smalltalk).
- A Proposal for Simplified, Modern Definitions of "Object" and "Object Oriented" (la définition que je trouve la plus sérieuse à l’heure actuelle et que j’ai découverte par le biais de Wirfs-brock).
Il existe bien d’autres définitions et spéculations que vous pouvez retrouver ici. J’ai pour ma part aussi lu une bonne partie de Theory of objects ce qui m’a permis d’ouvrir les yeux sur pas mal de notions à un niveau sémantique.
En second, je vous recommande vraiment de creuser la notion de Data abstraction. C’est tellement la fondation de ce qui constitue les langages de programmation que je ne comprends même pas comment la majorité des développeurs passent à côté .
Quelques ressources à lire / écouter :
- How Data Abstraction changed Computing forever | Barbara Liskov | TEDxMIT
- On Understanding Data Abstraction, Revisited
- Object-Oriented Programming Versus Abstract Data Types
Je vous recommande aussi Programming Paradigms for Dummies qui permet de faire un pont avec d’autres notions (et pas uniquement l’OO car c’est important de s’ouvrir aussi au reste).
Bref si vous avez commencé à lire c’est que vous avez compris que je ne suis pas adepte des explications bateau en mode “C’est un chat qui étend d’un animal pour faire miaou” 😏.
Je n'ai jamais été un grand fan de ces articles haut niveau car j’ai toujours eu le sentiment qu’il manquait une réflexion fondamentale dans le processus. Abstraire les éléments techniques pour mieux les communiquer est une chose importante mais je pense qu’il ne faut pas non plus trop s’éloigner d’une réalité plus scientifique.
Si vous souhaitez continuer à réellement creuser la programmation orientée objet voici diverses références que j’ai moi-même lues (attention elles sont souvent difficile d’accès) :
👀 Les références ci-dessus peuvent aussi vous permettre de mieux comprendre certaines racines de Javascript. J'étais personnellement vraiment choqué de découvrir que beaucoup de ce qu'on critique comme étant des fonctionnalités qui ont été faites au hasard en 10 jours sont finalement des notions sémantiques réfléchies depuis des dizaines d'années.
- Inheritance Is Not Subtyping
- A Behavioral Notion of Subtyping
- A Denotational Semantics of Inheritance
- Concurrent Object-Oriented Programming in Act 1
- The Power of Interoperability: Why Objects Are Inevitable
- Law of demeter
- Object Design - Rebecca Wirfs-Brock and Alan McKean
À partir de tout cela vous aurez moyen de retrouver plusieurs centaines de références. J’ai lu d’autres ouvrages mais je ne pense pas qu’ils aient une place ici (néanmoins je reste ouvert à la discussion si vous souhaitez vous-même approfondir cela avec mes recommandations).
⬅️ 🌇 Architecture & Paradigmes: Clean code | ➡️ 🌇 Architecture & Paradigmes: Design patterns