Depuis la version 17 de Java, le langage incorpore des éléments de Data Oriented Programming.
Le Data Oriented Programming est basé sur le fait de travailler des données fortement structurées directement sans encapsulation.
En théorie, cela semble incompatible avec les principes SOLID qui se basent sur l'encapsulation.
En pratique, les deux approches sont complémentaires:
Data oriented programming est centré sur la structure interne des données que l'on manipule.
On parle des données qui ont une forte structure.
Plus précisément,on parle de données qui peuvent s'écrire comme une disjonction cas et où chaque cas correspond à un tuple de valeurs.
Cela correspond à la notion de type algebric ou de data type qu'on retrouve dans les langages fonctionnels comme Haskell et Caml.
Shape := Line Int Int Int Int | Rectangle Int Int Int Int | Ellipse Int Int Int Int
FileSystemItem := File String String Path | Directory String Path List<FileSystemItem>
Comme son nom l'indique le Data Oriented Programming s'applique sur les portions du code centrée autours de ces données.
Très grossièrement, Data Oriented Programming = Algebraic Data Types + Pattern Matching
En Java, les algebraic data types sont modélisés par des interfaces sealed et des records.
public sealed interface Shape { record Line(int x1, int y1, int x2, int y2) implements Shape {}; record Rectangle(int x1, int y1, int x2, int y2) implements Shape {}; record Ellipse(int x1, int y1, int x2, int y2) implements Shape {}; }
public sealed interface FileSystemItem { Path path(); String name(); record File(Path path, String name, String extension) implements FileSystemItem { ... } record Directory(Path path, String name, List<FileSystemItem> content) implements FileSystemItem { ... } }
Java 17 introduit la possibilité de faire du pattern matching (switch
) sur une interface sealed.
On peut donc utiliser du DOP en Java sur des périmètres bien délimités. Cela ne remet pas en cause ce que l'on a vu en OOP mais cela vient le compléter.
De plus, certains design-patterns, sont fortement liés à la DOP. Ces patterns sont :