Proposition pour un modèle à grains extrêmement fins David Fauthoux directeur : Jean-Paul Bahsoun IRIT
Problématique Programme Plate-forme Système de gestion des composants ??
Compétences pour la réutilisabilité 1.Extensibilité : les composants doivent être écrits en vue d’être adaptés, étendus. 2.Composition : les composants doivent être écrits en vue d’être composés.
1. Extensibilité adaptation aisée (pas de protocoles de programmation ni d'excès de rigueur de la part du programmeur) adaptation riche (laisser un maximum de liberté au programmeur pour adapter le composant) adaptation sûre (interdire au programmeur le plus tôt possible, si possible à la compilation, les utilisations faussées des composants) maintenance ciblée (la correction ou l'amélioration d'un composant ne doit pas influencer les autres composants, ni ne doit conduire à la modification forcée d'autres composants)
2. Composition composition sûre (interdire au programmeur de composer des composants qui ne sont pas écrits pour) composition maximale (permettre au programmeur de combiner tous composants ne l'interdisant pas) composition tardive (partitionner au maximum les composants de la plate-forme, pour laisser le programmeur libre de composer seulement les propriétés voulues, et toutes les propriétés voulues, au moment voulu)
Le point de vue Mixin Exemple : mixin Undo { inherited String getText(); inherited void setText(String s); String lastText; void setText(String s) { lastText = getText(); super.setText(s); } void undo() { setText(lastText); } } Classe qui peut se brancher sur une classe-mère dont la spécification correspond. ►Branchement sur une classe seulement si elle répond à la spécification, ►Branchement sur toute classe qui répond à la spécification, ►Référence à une classe-mère concrète à l’instanciation seulement
Le problème des objets lourds Adaptation : il faut connaître toutes les propriétés du composant (interaction entre elles, comportements, lois implicites…). Référencement : on n’exprime pas l’accès partiel au composant. Utilisation : on ne peut pas choisir de n’utiliser qu’une propriété spécifique du composant. ►Une seule propriété par classe. ►Ajouter une propriété ≠ ajouter une méthode.
Un concept clé : l’interface Point de vue simple : ensemble nommé de signatures de méthodes Caractéristique technique : séparer l’implémentation de la déclaration interface implémentation des méthodes de l’interface interaction avec le reste du programme
Aspects de l’interface Généricité Sûreté de composition Bouclier 2 3 1
Classe-lentille Une propriété ► une « interface légère ». Des raffinements ► des classes qui implémentent la propriété de façon spécifique. Ecrire une spécialisation de la propriété à son programme ► agréger les micro-composants. interface-mère C1 classes implémentant l’interface (raffinements) : C1 … composition adaptation
Exemple Drawer draw RotateDrawerAlphaDrawerImageDrawer maison penchée maison semi-transparente ScaleDrawer
L’exemple en Java public interface Drawer { public void draw(Graphics g); } public class ImageDrawer implements Drawer { public ImageDrawer() { } public void draw(Graphics g) { // dessine une maison sur g } public class RotateDrawer implements Drawer { private Drawer wrappee; public RotateDrawer(Drawer wrappee) { this.wrappee = wrappee; } public void draw(Graphics g) { // applique une rotation de 45° sur g wrappee.draw(g); } Drawer o = new ImageDrawer() Drawer r = new RotateDrawer(o); Drawer a = new AlphaDrawer(r);
Patron d’écriture public interface Drawer { public void draw(Graphics g); } public class RotateDrawer implements Drawer { private Drawer wrappee; public RotateDrawer(Drawer wrappee) { this.wrappee = wrappee; } public void draw(Graphics g) { // algorithme à appliquer // et appel du wrappee : wrappee.draw(g); } nom de l’interface-mère méthode déclarant la propriété nom du raffinement
Schéma branchement en out : interface implémenté par la lentille, ce qu’elle rend publique. branchement en in : sur quel type de lentille celle-ci doit être branchée. nom outin code (interne, caché)
Schéma de l’exemple RotateDrawer Drawer RotateDrawerAlphaDrawer ImageDrawer
Le terme « lentille »
Vers les arbres MultiDrawer Drawer MultiDrawer AlphaDrawer ImageDrawer (nuage) ImageDrawer (maison)
MultiDrawer RotateDrawer ImageDrawer (maison) ImageDrawer (nuage) Vers les arbres MultiDrawer Drawer
Conclusion propriété globale = sémantique globale raffinements = raffinements sémantiques agrégation ►structure ►fonction