← Derniers articles
💻 computer science

Beyond Objects

Cet article soutient que le principe fondamental de l'orienté objet consistant à mapper directement la fonctionnalité du système aux individus du domaine du problème est intrinsèquement défectueux et mène à la fragmentation, proposant plutôt d'abandonner l'orientation objet au profit d'une approche qui découple les individus du domaine des modules fonctionnels.

Auteurs originaux : Daniel Jackson

Publié 2026-06-26
📖 6 min de lecture🧠 Analyse approfondie

Auteurs originaux : Daniel Jackson

Article original sous licence CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Ceci est une explication générée par l'IA de l'article ci-dessous. Elle n'a pas été rédigée ni approuvée par les auteurs. Pour une précision technique, consultez l'article original. Lire la clause de non-responsabilité complète

L'idée principale : L'erreur du « Taille unique »

Imaginez que vous construisez une maison. Depuis 50 ans, la règle standard de la construction logicielle est la suivante : « Chaque pièce de la maison doit être gérée par la personne qui y habite. »

Dans le monde du logiciel, c'est ce qu'on appelle la Programmation Orientée Objet (POO). L'idée est que si vous avez un « Utilisateur » dans le monde réel, vous créez un « Objet Utilisateur » dans le code. Cet objet est censé détenir toutes les données concernant cet utilisateur (son nom, son mot de passe) et accomplir tout le travail lié à lui (se connecter, écrire des avis, réserver des tables).

Daniel Jackson soutient que cette règle est un piège. Elle semble logique, mais en pratique, elle force le logiciel à devenir un fouillis inextricable. Il suggère que nous arrêtions d'essayer de faire entrer chaque tâche dans la « personne » et que nous organisions plutôt le logiciel selon ce qui se passe (les actions), et non selon qui le fait (les individus).


Le problème : Le « Couteau Suisse » vs l'« Outil Spécialisé »

Jackson affirme que forcer chaque tâche sur un seul « Objet Utilisateur » cause deux maux de tête principaux :

1. Le problème du « Couteau Suisse » (La Conflation)

Imaginez qu'un Objet Utilisateur soit un couteau suisse. Il possède une lame, un tournevis, un tire-bouchon et un cure-dent.

  • Le problème : Si vous voulez utiliser le tire-bouchon (pour gérer le mot de passe d'un utilisateur), vous devez transporter tout le couteau lourd avec vous. Si vous voulez changer la lame (corriger un bug dans le système d'avis), vous risquez de casser accidentellement le tire-bouchon.
  • En informatique : Un objet « Utilisateur » finit par détenir le mot de passe de l'utilisateur, son historique d'avis, ses paramètres de notification et sa logique de réservation, le tout dans un seul fichier géant. Si vous voulez modifier le fonctionnement des avis, vous devez fouiller dans le code des mots de passe. C'est désordonné et difficile à réparer.

2. Le problème des « Trop de mains » (La Fragmentation)

Imaginez une tâche comme « Réserver une table ».

  • Le problème : Qui doit le faire ? L'Utilisateur ? Le Restaurant ? La Table ? La Réservation ?
  • En informatique : Parce que la règle stipule d'« assigner la tâche à l'objet », le code se retrouve fragmenté. L'objet « Utilisateur » vérifie s'il a une réservation. L'objet « Restaurant » vérifie si la table est libre. L'objet « Réservation » crée le ticket.
  • Le résultat : Pour effectuer une seule réservation, l'ordinateur doit faire travailler trois personnes différentes dans trois pièces différentes et les faire communiquer entre elles. Si une personne oublie de parler à l'autre, le système casse. C'est ce qu'on appelle la fragmentation.

L'analogie : La réservation au restaurant

Jackson utilise un restaurant pour expliquer cela.

L'ancienne méthode (Orientée Objet) :
Vous avez un objet « Utilisateur » et un objet « Restaurant ».

  • Quand Alice veut réserver une table, elle interroge son objet « Utilisateur ».
  • L'objet Utilisateur demande à l'objet « Restaurant » si une table est libre.
  • L'objet Restaurant demande à l'objet « Créneau » (Slot).
  • L'objet « Réservation » est créé.
  • Le désordre : Si vous voulez changer la règle pour dire « Alice ne peut pas réserver deux tables à la fois », vous devez mettre à jour l'objet Utilisateur, l'objet Restaurant et l'objet Réservation. Ils sont tous emmêlés.

La nouvelle méthode (Les Concepts) :
Au lieu de demander « À qui appartient ceci ? », nous demandons « De quel groupe de règles s'agit-il ? ».
Jackson propose d'organiser le logiciel en Concepts. Considérez un Concept comme une équipe spécialisée ou un département dans une entreprise, plutôt que comme une personne.

  • Concept 1 : « Réserver »
    • Cette équipe gère toutes les règles concernant les engagements. Elle ne se soucie pas de savoir qui est l'utilisateur ; elle s'intéresse simplement à l'acte de réserver. Elle détient la liste de qui a réservé quoi.
  • Concept 2 : « Disponibilité »
    • Cette équipe gère l'acte de vérifier si une table est libre. Elle ne se soucie pas de qui réserve ; elle s'intéresse simplement aux créneaux.
  • Concept 3 : « Authentification Utilisateur »
    • Cette équipe vérifie simplement si la personne est bien celle qu'elle prétend être.

Comment ils travaillent ensemble :
Au lieu que l'objet Utilisateur appelle l'objet Restaurant, ces « Concepts » communiquent entre eux via des Synchronisations (comme un feu de signalisation).

  • Règle : « Lorsqu'une Requête arrive, vérifier si la Disponibilité dit 'Oui', et si l'Authentification dit 'Allez-y', alors la Réservation peut effectuer la réservation. »

Pourquoi est-ce mieux ?

  1. Pas de nœuds emmêlés : L'équipe « Réservation » n'a pas besoin de savoir comment vérifier un mot de passe. L'équipe « Authentification » n'a pas besoin de savoir comment vérifier une table. Ils sont séparés.
  2. Pas de disputes sur « Qui possède quoi ? » : Vous n'avez pas à débattre pour savoir si le bouton « annuler » appartient à l'Utilisateur ou à la Réservation. Vous placez simplement la logique d'annulation dans le Concept qui gère l'état de la réservation.
  3. Des cartes plus claires : Si vous regardez le code, vous voyez clairement les règles métier (Réservation, Disponibilité), plutôt qu'une carte confuse de qui possède quelles données.

Le « Concept » vs l'« Objet »

  • Objet : Une petite machine qui essaie d'être tout à la fois (Données + Logique + Identité). C'est comme une personne qui essaie d'être à la fois chef, serveur et caissier.
  • Concept : Un module qui gère un travail ou une relation spécifique. C'est comme un département spécialisé. Le « Département Cuisine » s'occupe de cuisiner ; le « Département Service » s'occupe de servir. Ils se coordonnent, mais ne fusionnent pas en une seule personne.

Conclusion

Jackson ne dit pas que nous devrions abandonner tout le logiciel. Il dit que la règle fondamentale de la Programmation Orientée Objet — « Assigner chaque tâche à la personne à laquelle elle appartient » — est la source du problème.

En passant aux Concepts, nous arrêtons d'essayer de forcer le logiciel à ressembler à une collection de personnes. Au lieu de cela, nous l'organisons comme une collection de règles et de relations. Cela rend le code plus facile à lire, plus facile à réparer, et moins susceptible de casser lorsque vous essayez de changer une petite chose.

C'est un retour à une façon de penser plus ancienne et plus simple (comme les bases de données relationnelles) mais mise à jour pour les besoins logiciels modernes, permettant de construire des systèmes moins fragiles et plus logiques.

Noyé(e) sous les articles dans votre domaine ?

Recevez des digests quotidiens des articles les plus récents correspondant à vos mots-clés de recherche — avec des résumés techniques, dans votre langue.

Essayer Digest →