Réaliser un projet Nous rejoindre
La Programmation Orientée Données (DOP)

La Programmation Orientée Données (DOP)

13-06-2024 Expertise

Les derniers outils de Java : optimisation de la gestion des données

Sujet central de la conférence Tech Hub 2023 à Porto, la programmation orientée données est un sujet d’actualité structurant qu’adresse Apside. Ce paradigme de programmation offre une approche structurée pour gérer la complexité inhérente au développement de logiciels. Il est important de noter que la programmation orientée données ne cherche pas à remplacer la programmation orientée objets ; en réalité, les deux paradigmes se complètent souvent. En effet, les langages de programmation orientés objets comme Java ou C# ont été initialement développés à une époque dominée par les applications monolithiques, nécessitant la gestion de l’état et du comportement des modèles.

De plus, dans le développement d’applications contemporaines, la tendance est à la décomposition des applications en briques consommées par d’autres services ou interagissant directement avec le front-end. Ces services traitent typiquement des requêtes externes, telles que des requêtes HTTP, qui transportent souvent des charges utiles non typées comme JSON, XML ou YAML. Cependant, il est généralement incommode pour les services de manipuler directement les données dans ces formats bruts. Représenter les données sous des formes plus structurées, comme des entiers pour les nombres, des classes LocalDateTime pour les dates ou des collections pour les listes, est plus intuitif et gérable. De plus, la validation des données, au moins avant leur traitement, est une pratique fondamentale pour garantir l’intégrité et la fiabilité des données.

 

Optimisation grâce aux enregistrements et aux classes scellées de Java

Pour résumer les directives d’implémentation de la programmation orientée données (DOP), Nicolai Parlog – Java Developer Advocate at Oracle – en se basant sur l’article de Brian Goetz – Java Language Architect at Oracle – présente les principes directeurs suivants :

  1. Modélisation des données : Les enregistrements doivent strictement modéliser les données, chacun représentant une entité unique avec des noms de composants clairs et descriptifs. Les choix au sein du modèle de données, tels que les scénarios alternatifs, doivent être encapsulés en utilisant des classes scellées, chaque alternative étant modélisée par un enregistrement distinct. Les comportements au sein des classes d’enregistrement doivent se limiter aux opérations dérivées directement des données elles-mêmes, comme le formatage.
  2. Immutabilité des données : Les données doivent être immuables pour garantir la stabilité et la cohérence. Les champs muables au sein des objets introduisent de l’ambiguïté et peuvent entraîner des modifications inattendues des données. Les enregistrements offrent un certain niveau d’immuabilité, mais le respect de ce niveau nécessite de la discipline pour empêcher les états mutables de compromettre l’intégrité des données.
  3. Validation des frontières : Avant d’intégrer des données dans le système, elles doivent être confirmées pour garantir leur validité. Ce processus de validation peut se produire dans le constructeur d’enregistrement s’il s’applique universellement, ou il peut être effectué à la frontière du système, où les données sont reçues de sources externes.
  4. Élimination des états illégaux : L’utilisation d’enregistrements et de types scellés facilite la modélisation des domaines d’une manière qui rend les états erronés non représentables. Cette approche est préférable à la vérification constante de la validité, car elle empêche les données invalides d’être modélisées. L’immuabilité et les techniques de modélisation rigoureuses aident à éliminer les sources courantes d’erreurs dans les programmes.

 

Ces principes sont également développés par Yehonathan Sharvit dans son blog, où il définit cinq principes complémentaires :

  • Séparation code-données : maintenir une distinction claire entre le code et les données ;
  • Entité générique : modéliser les entités en utilisant des structures de données génériques ;
  • Données immuables : imposer l’immuabilité des données pour garantir la cohérence et la stabilité ;
  • Comparabilité basée sur la valeur : les données doivent être comparables en valeur ;
  • Représentation littérale des données : les données doivent avoir une représentation littérale pour une clarté et une compréhension aisées.

Avantages cachés : tests et performances dans la programmation Java moderne

Les dernières versions de Java introduisent plusieurs outils précieux, notamment :

  • Classes d’enregistrement : celles-ci servent de conteneurs transparents pour les données immuables. Leurs avantages incluent une meilleure compréhension par le compilateur des structures internes, un couplage plus étroit des API aux représentations internes et une réduction significative de la verbosité. Voici un exemple représentatif :
Data-Oriented Programming (DOP)
  • Classes scellées : Ces types restreignent l’héritage, ne permettant que des sous-types spécifiques. Leurs avantages comprennent une communication claire des intentions du développeur, des vérifications d’exhaustivité activées par le compilateur et la facilitation des types de données algébriques (ADT). Un exemple démontre comment l’implémentation de la programmation orientée données (DOP) en utilisant ces outils produit des programmes plus concis, lisibles et fiables.
Data-Oriented Programming (DOP)

De plus, l’exploitation de ces fonctionnalités de Java offre deux avantages supplémentaires, bien que moins évidents : une meilleure testabilité et des performances accrues. Des entrées et sorties de données simplifiées et bien définies facilitent le processus de test, en particulier en facilitant les tests génératifs, qui se révèlent souvent plus efficaces pour détecter les bugs que la création manuelle de cas de test. En outre, les enregistrements Java surpassent les classes traditionnelles en termes d’utilisation de la mémoire et de performances, grâce à leur nature immuable, aux spécificités de l’implémentation de la JVM (Java Virtual Machine) et aux techniques d’optimisation telles que le compactage et l’extension inline employés par la JVM pour les classes marquées comme enregistrements.

 

Références :

1 – Data Oriented Programming in Java – InfoQ

2 – Data-Oriented Programming (nipafx.dev)

3 – Data Oriented Programming: Table of Contents | Yehonathan Sharvit (klipse.tech)

4 – Data-Oriented Programming in Java (youtube.com)

5 – Java Pattern: Algebraic Data Types · Garciat

L’auteur
Diogo
Diogo Figueira
Tech Lead

Passionné par les nouvelles technologies et animé par le désir de partager ses connaissances, Diogo s’engage à favoriser un environnement collaboratif. Diogo croit fermement que le travail d’équipe est la pierre angulaire du succès de son équipe et est essentiel pour atteindre les objectifs de l’entreprise.

Notre Blog par nos experts

Des ressources précieuses pour rester à la pointe de l'information

Newsletter

Les données personnelles recueillies par Apside, en sa qualité de responsable de traitement, à partir de ce formulaire sont nécessaires à l’instruction de votre demande d’information. Elles sont transmises à notre service Communication et à nos équipes commerciales. Il s’agit de vos nom, prénom, téléphone et adresse email. Toutes les conditions applicables à leur traitement sont détaillées dans notre politique confidentialité.

En application du RGPD, vous disposez d’un droit d’information, d’accès, d’opposition, de rectification, de limitation, de suppression et de portabilité sur vos données que vous pouvez exercer en contactant notre Délégué à la Protection des Données :

Soit par email : [email protected]

Soit par courrier : Apside – 58 avenue du Général Leclerc – 92100 Boulogne Billancourt)

Ce Site est également protégé par reCAPTCHA. En donnant, votre consentement pour le traitement du formulaire, vous acceptez également les Conditions de service et Politique de confidentialité de Google