Bonjour,
Je ne savais pas trop où poster ma réflexion, donc j'ai choisi le forum général de débats sur le langage Java. Le concept que je vais vous présenter s'est appuyé sur le développement Java.
Le problème soulevé, à l'origine de cette réflexion sur la Programmation par contexte, est que le langage Objet ne fait pas apparaître les états et les relations entre les objets.
Ainsi une brouette reste une brouette, qu'elle soit remplie ou vide. Une brouette peut soit être remplie, soit être vidée. Une brouette remplie peut-elle être remplie ? Une brouette vide peut-elle être vidée ? Le concept objet ne fait pas la différence entre les états.
Actuellement, la programmation, quelle qu'elle soit, est "à plat". Tous les états dans lesquels passent les objets sont décrits dans le code :
Cette programmation nécessite de gérer les exceptions dans le cas où l'on remplit une brouette déjà remplie. Mais dans un projet conséquent, cette erreur ne peut se voir qu'à l'exécution, dans, justement, un contexte d'exécution bien particulier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 public class Brouette { private boolean estRemplie = false; private Contenu contenu = null; public void remplir(Contenu contenu) { if(!this.estRemplie) { this.contenu = contenu; this.estRemplie = true; } } public void vider() { if(this.estRemplie) { this.contenu = null; this.estRemplie = false; } } }
L'idée de la programmation par contexte est de pouvoir définir des variables de contexte, et programmer suivant un contexte bien particulier.
Ma brouette reste une brouette, je crée donc un objet Brouette :
Via un plug-in de mon EDI, je définis que la classe "Brouette" peut prendre 2 états "Vide" et "Remplie". Lorsque je sélectionne l'état "Vide", j'écris donc le code relatif à cet état :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public class Brouette { }
Et c'est tout, car "remplir" est la seule méthode accessible dans l'état "Vide". La méthode "remplir" permet de changer l'état de la Brouette en "Remplie".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public class Brouette { public void remplir(Contenu contenu); }
Une fois que ma classe est définie pour l'état "Vide", je change cet état dans mon contexte EDI, et je le passe à "Remplie". Ma classe devrait ressembler alors à :
Aucune méthode n'a été définie pour l'état "Remplie". Je crée donc ce qu'il me faut :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public class Brouette { }
Certaines méthodes peuvent être partagées, comme la méthode "pousser()" de la brouette, qui peut être réalisée dans l'état "Vide" et/ou "Remplie".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public class Brouette { private Contenu contenu; public void vider(); }
Cette programmation par contexte est donc une sur-couche à la programmation actuelle, qui permet de distinguer les relations entre les objets.
J'aimerais avoir votre avis sur ce concept, s'il possède un autre nom, s'il a été discuté, quels sont les avantages, les inconvénients.
Je vous remercie,
Stéphane.
Partager