FR 2877121 A1 20060428 FR 0411375 A 20041025 2877121 - 1- " Procédé et système d'agrégation de composants lors de la conception d'une application interactive." La présente invention se rapporte à un procédé pour la conception d'une application logicielle. Elle se rapporte également à un système de développement logicielle mettant en oeuvre un tel procédé et à une application d'un tel procédé. La présente invention trouve une application particulièrement intéressante dans la programmation d'interfaces évoluées, en particulier interactives, où la conception d'un prototype ou d'un produit fait intervenir des équipes pluridisciplinaires. Toutefois l'invention est d'un cadre plus large puisqu'elle peut s'appliquer à tout type de développement logicielle organisé sous forme d'assemblage de composants ou de modèles. D'une façon générale, pour gérer le travail collectif des développeurs logiciels, les logiciels modernes sont organisés en composants, qui sont assemblés ensemble de manière successive pour former des composants de plus en plus complexes. C'est en particulier le cas pour les logiciels interactifs (interfaces homme-machine). On connaît deux grandes méthodes pour définir des composants en génie logiciel: par héritage et par composition/agrégation de composants. Avec l'héritage simple les variables héritées ne sont pas dupliquées: si A possède une variable x et si B dérive de A et si C dérive de B alors A, B et C possèdent la même variable x. Avec la composition/agrégation (et l'héritage multiple qui peut être vu comme une forme d'agrégation) les variables issues des différents composants internes à un composant sont dupliquées: si A et B sont deux classes avec une variable x, si C est obtenu par agrégation de A et de B alors C possède deux variables x de A (A::x) et x de B (B::x). Ces deux méthodes conviennent dans de nombreux cas pour organiser les composants logiciels. Elles correspondent au souci d'encapsuler et de protéger des interventions extérieures des composants auto-suffisants, qui contiennent à la fois leurs propres données et les traitements associés. Les échanges entre les composants et leur environnement se font sous la forme de services (appels de méthodes) et d'événements. 2877121 - 2- Cependant, dans certains domaines, et en particulier dans celui des systèmes interactifs, la notion actuelle d'encapsulation de composants correspond mal aux besoins de l'organisation du travail entre développeurs. En effet, un composant interactif est constitué de plusieurs facettes interdépendantes, qui correspondent à des modèles de production très différents, mais qu'il est difficile d'isoler dans des composants individuels. Ces facettes sont par exemple le graphisme, la logique de comportement interactif, et des calculs. Chacune de ces facettes a vocation a être produite par des spécialistes différents, mais les isoler dans des composants séparés est très difficile, car elles sont très interdépendantes et cela génèrerait des composants qui ne sont pas réellement encapsulés car ils dépendraient de la présence des autres facettes. C'est pourquoi les développeurs rassemblent souvent les facettes dans un composant unique, ce qui limite considérablement la possibilité de faire produire les facettes par des spécialistes différents, de remplacer une facette par une autre équivalente, etc. La présente invention a pour but de remédier aux inconvénients de l'art antérieur en proposant un système de développement pluridisciplinaire rendant le développement et l'évolution d'une application logicielle accessibles en totalité ou bien par parties à des non programmeurs. Un autre but de l'invention est un nouveau système peu onéreux permettant un développement rapide. On atteint au moins l'un des buts précités avec un procédé pour la conception d'une application logicielle, lequel procédé comprend les étapes 25 suivantes: élaboration d'une pluralité de composants, chaque composant comprenant au moins une variable dont le contenu est sauvegardé dans un emplacement mémoire, agrégation desdits composants en une application logicielle 30 dont les variables sont constituées par un regroupement desdites variables chacune dans son emplacement mémoire. Selon l'invention, ce procédé comprend en outre l'étape suivante: fusion d'au moins deux desdites variables dans un emplacement mémoire unique de façon à constituer un emplacement 35 mémoire présentant autant d'entrées que de variables fusionnées. 2877121 - 3- Le procédé selon l'invention permet l'équivalence des symboles des composants. Les différents composants peuvent donc être manipulés aisément lors d'une évolution future de l'application logicielle. On rend la programmation accessible à des non programmeurs à travers notamment une programmation visuelle de la totalité ou d'une partie des composants et de leur assemblage. En particulier, les étapes d'agrégation et de fusion sont réalisées lors d'une phase de compilation ou de chargement des composants. Par variable on entend également propriété ou attribut. Ces termes io désignent l'association d'un symbole, c'est à dire un nom, et d'un contenu mémoire conservé dans un emplacement mémoire. Une table des symboles d'un composant définit les symboles connus du composant. Avec le procédé selon l'invention, il n'est pas indispensable de générer un code. On peut charger et interpréter les composants au moyen d'une 15 librairie de type "runtime". Dans des systèmes conventionnels de programmation par contraintes, il est possible de définir des ensembles de variables comme ayant la même valeur (contrainte identité), mais les emplacements mémoires restent distincts et sont synchronisés par un mécanisme de flux de données ou "data flow" en langue anglaise. Au contraire, la présente invention permet de réaliser une contrainte identité sans mécanisme de type "data flow" qui est coûteuse en temps de calcul et en espace puisque chaque variable conserve son emplacement mémoire et c'est la modification d'une variable qui déclenche la modification dans chacune des autres variables. Par ailleurs avec un tel procédé, on crée un système dont une partie de la mémoire est partagée avec des composants logiciels qui n'ont pas été conçus forcément à l'origine pour une telle application. Selon une caractéristique avantageuse de l'invention, on élabore chaque composant sous un langage spécifique différent. Il est ainsi possible d'assembler des composants déclaratifs (programmation visuelle) avec les langages de programmation impératifs pour permettre à des équipes pluridisciplinaires de travailler ensemble: programmeurs et experts des modalités. Concernant la programmation visuelle, on peut utiliser des éditeurs graphiques disponibles sur le marché pour réaliser des interfaces. En d'autres termes, le procédé selon l'invention est indépendant du langage de 2877121 - 4- programmation ou de modélisation. Il autorise ainsi la fusion multi- modèles de variables déclarées dans des modèles différents. De préférence, dans lesdites au moins deux variables, une variable est une variable d'un langage de programmation (Perl, Java, C,...) et l'autre est un attribut d'un composant déclaré dans un langage de balise (XML, UML,...) Selon un mode de mise en oeuvre avantageux de l'invention, ladite application logicielle est de type interactif dans laquelle les composants sont des facettes interdépendantes élaborées de façon indépendante avant agrégation. De préférence, lesdites facettes comprennent au moins un composant graphique, par exemple au format SVG, au moins un composant de logique comportementale interactive et au moins un composant de calcul. Ces facettes peuvent avantageusement être élaborées en parallèle. En d'autres termes, avec le procédé selon l'invention, on peut assembler dans des systèmes interactifs la partie graphique, fournie par un designer graphique au format SVG et considérée comme un composant, le comportement décrit par une machine à état, un "StateChart", un réseau de Petri ou tout autre modèle de comportement, considéré lui aussi comme un composant, et des composants de calcul. Par exemple, la fusion entre l'attribut "état courant" d'une machine à état et l'état d'un élément "switch" SVG étendu permet de décrire les différents aspects visuels d'un objet au cours de l'interaction. L'extension de l'élément "switch" SVG est l'ajout d'un attribut 'état' aux attributs de l'élément "switch" d'origine, dans le même esprit que l'attribut "systemLanguage". De nombreuses utilisations possibles découlent des caractéristiques 25 avantageuses de la présente invention. On peut notamment: - définir l'équivalence d'un ensemble d'attributs graphiques dans un composant contenant des composants graphiques, - réintroduire la notion de "variable de classe" dans un langage de prototype (c'est à dire un langage ou tous les objets sont obtenus par la 30 duplication d'un objet prototype), associer l'état d'une machine à état avec et la condition d'un branchement conditionnel dans un arbre pour créer des automates hiérarchiques ("Statecharts"), ou - renommer et exporter des attributs graphiques dans un composant 35 contenant des composants graphiques. 2877121 5 L'invention est notamment remarquable par le fait qu'on peut séparer et paralléliser le travail du graphiste et celui du programmeur pendant un projet de conception d'interfaces: le graphiste et le programmeur s'entendent au préalable sur un ensemble de propriétés qui représentent les attributs graphiques d'un composant graphique (couleur de fond, couleur des textes, épaisseur de la bordure externe, etc.), ils peuvent ensuite travailler chacun de leur côté, les propriétés utilisées par le programmeur pendant qu'il développe le comportement du prototype seront fusionnées à la fin avec les attributs graphiques des objets graphiques utilisés par le graphiste. Suivant un autre aspect de l'invention, il est proposé un système de développement logiciel permettant de concevoir de façon itérative une application logicielle interactive. Selon l'invention, ce système comporte un noyau de programmation permettant: l'élaboration d'un modèle d'architecture logicielle à partir de la définition de structures arborescentes, l'agrégation, au sein dudit modèle d'architecture logicielle, d'une pluralité de composants élaborés de façon indépendante, et fusion d'au moins deux des variables desdits composants dans un emplacement mémoire unique de façon à constituer un emplacement mémoire présentant autant d'entrées que de variables fusionnées. Par ailleurs, le système peut comprendre un ou plusieurs fichiers de ressource contenant les valeurs initiales des variables fusionnées ou non des composants de l'application logicielle. On prévoit également une application du procédé tel que décrit précédemment pour la création d'une nouvelle variable dans une application logicielle existante. Selon l'invention, on élabore un composant vide doté d'une nouvelle variable, puis on agrége ce nouveau composant avec l'application logicielle existante en fusionnant les emplacements mémoires de la nouvelle variable avec au moins une variable de l'application logicielle existante. On peut ainsi réaliser du "refactoring" ou "reengineering" permettant de récupérer des composants logiciels et de renommer leurs variables pour créer de nouveaux composants. On peut aussi changer l'apparence et le comportement d'une interface homme-machine en modifiant les valeurs de ses propriétés dans un fichier de ressource. Pour ce faire, on définit des paramètres nouveaux sur des modèles ou composants existants, 2877121 - fi- les nouveaux paramètres représentant chacun des ensembles de paramètres dans les modèles existants. D'autres avantages et caractéristiques de l'invention apparaîtront à l'examen de la description détaillée d'un mode de mise en oeuvre nullement 5 limitatif, et des dessins annexés, sur lesquels: La figure 1 est une vue schématique du déroulement des principales étapes du procédé selon l'invention; La figure 2 est une vue schématique illustrant la façon dont la table des symboles d'un composant logiciel est modifiée conformément au procédé 10 selon la présente invention; La figure 3 est une esquisse utilisée par un groupe d'experts pluridisciplinaire pour structurer le travail en composants lors de développement d'une application logicielle; La figure 4 est un exemple de visuel réalisé par un programmeur; et La figure 5 est une vue du visuel de la figure 4 avec intégration, par fusion selon la présente invention, du composant graphique réalisé par un graphiste. La figure 1 illustre un procédé dans lequel on réalise une fusion de variables de composants selon l'invention. Ce procédé est avantageusement mis en oeuvre lors du développement d'une application logicielle. On distingue un composant graphique A et un composant de contrôle B élaborés chacun à partir d'un éditeur graphique ou par langage de programmation. Le composant graphique A comporte au moins deux variables al et a2. De même, le composant de contrôle B comporte au moins deux variables bl et b2. Plus précisément, chaque variable est concrétisé par un nom ai, a2, bl, b2,... et par un contenu '#FFEE55', 'vert', 'orange', 'jaune' comme on peut le voir sur la figure 2. Le nom al pointe sur le contenu '#FFEE55' ; le nom a2 pointe sur le contenu 'vert' ; le nom b1 pointe sur le contenu orange' ; et le nom b2 pointe sur le contenu 'jaune'. En d'autres termes, pour chaque variable, le symbole est stocké dans un emplacement mémoire pointant sur l'emplacement mémoire stockant le contenu correspondant. La table des symboles est une représentation de la correspondance entre les symboles et les contenus d'un ou plusieurs composants (voir figure 2). Conformément à la figure 1, on réalise d'abord une agrégation 1 qui 35 peut être réalisée de façon conventionnelle afin d'obtenir un composant 2877121 - 7- logicielle 2. Sur la figure 2, on voit la table des symboles 5 du composant logiciel 2. Chaque variable est contenue dans un emplacement mémoire de façon autonome et indépendante. On réalise ensuite une fusion selon la présente invention au moyen d'une opération dite de merge a1, bi consistant à fusionner certaines variables des deux composants A et B. On obtient alors un nouveau composant logiciel 4 qui peut rester tel quel, constituer un prototype ou être encore développé pour constituer l'application logicielle souhaitée. Le composant graphique A et le composant de contrôle B restent agrégés. Les variables a2 et b2 restent autonomes et indépendantes. Les emplacements mémoires des contenus de a1 et de b1 sont fusionnés en un seul emplacement mémoire à deux entrées: ces deux entrées sont pointées par les symboles al et bi. A titre d'exemple, on peut réaliser plusieurs opérations "merge" successives de façon à étendre les variables ainsi fusionnées à d'autres variables. Notamment, après avoir fusionné a1 et bi, on peut continuer si nécessaire à fusionner a1 et b2 de façon à obtenir al, bl et b2 pointant vers un même emplacement mémoire, et ainsi de suite. Sur la figure 2, on voit précisément l'opération réalisée par la fusion merge al,b1 : la table des symboles 5 du composant logiciel 2 se transforme en une table des symboles 6 du composant logiciel 4 où le symbole b1 ne pointe plus sur l'emplacement mémoire contenant 'orange' mais sur l'emplacement mémoire contenant '#FFEE55'. Les autres symboles al, a2 et b2 continuent à pointer respectivement sur '#FFEE55', vert' et 'jaune'. Ainsi l'agrégation des composants se fait par fusion d'emplacements mémoires des variables. En complément de ce qui précède, on va maintenant décrire un exemple de mise en oeuvre du procédé selon l'invention. Cet exemple consiste à l'élaboration d'une application logicielle avec une architecture à base de modèles, où l'application est définie par un assemblage d'instances de modèles: objets graphiques, ou machines à états par exemple. Une telle architecture revient à considérer que la programmation, tout comme la manipulation d'outils graphiques, consiste à instancier et paramétrer des objets fournis par un modèle. 2877121 -8- La conception d'une telle application logicielle fait manipuler les mêmes modèles par les différents acteurs, à travers des interfaces spécialisées: outils graphiques pour les uns, APIs ou langages pour les autres. Les modèles en jeu sont tous ceux mis en oeuvre par des systèmes interactifs: objets graphiques, comportements, contraintes géométriques, etc... Les acteurs intervenants dans la conception sont un programmeur et un graphiste. Dans l'art antérieur, un graphiste travaille sur la conception visuelle globale du produit, livre son travail sous forme de papier ou d'images, qui servent aux programmeurs à réaliser le prototype ou le produit. Selon la présente invention, le programmeur et le graphiste constituent un groupe pluridisciplinaire pour la conception d'un ensemble de deux interfaces de type collecticiel, destinées à la gestion du trafic aérien au sol et à la coordination entre les contrôleurs de sol et les contrôleurs de tour d'un aéroport. Un collecticiel est une application collaborative, c'est à dire un logiciel permettant à plusieurs personnes de travailler ensemble. Le graphisme joue ici un rôle important pour des raisons commerciales et d'acceptabilité par les contrôleurs. La conception commence par un travail de conception préliminaire donnant lieu, pour chaque interface, à la production d'une esquisse comme celle représentée sur la figure 3. Il s'agit d'une représentation d'avions à gauche avec des créneaux horaires de décollage associés à droite. C'est un outil de visualisation et de planification des séquences de décollage dont la maquette peut être réalisée sur du papier. Cette esquisse permet au responsable de la conception de définir un ensemble de composants à réaliser, et de définir entre les acteurs une structure et un ensemble de noms. En effet, le graphiste et le programmeur désignent les mêmes éléments par les mêmes noms afin de faciliter l'étape ultérieure d'agrégation des composants réalisés par l'un et l'autre. Ainsi, le graphiste et le programmeur peuvent travailler en parallèle. Le graphiste se consacre au choix puis à la réalisation de composants graphiques. Le programmeur se consacre à la réalisation de la structure et des comportements, en se basant sur des dessins primitifs qu'il aura réalisés en code. La figure 4 illustre un élément de l'application logicielle. Cet élément représente un programme fonctionnel développé par le programmeur sans intégration d'un design réalisé par le graphiste. 2877121 - 9- En parallèle, le graphiste à élaboré des visuels ou facettes au format SVG ( Scalable Vector Graphics en langue anglaise) en respectant la nomenclature définie lors de la conception préliminaire. Ces visuels sont transmis vers le programmeur qui les incorporent en lieu et place des dessins primitifs sans modification de la partie programmation. Cette incorporation se fait par fusion de variables conformément à la présente invention. La figure 5 illustre l'élément de la figure 4 mais après intégration du visuel du graphiste. Avec le procédé selon l'invention, le client exploitant une application logicielle ainsi développée, peut demander ou effectuer des évolutions visuelles sans faire intervenir un programmeur. Bien sûr, l'invention n'est pas limitée aux exemples qui viennent d'être décrits et de nombreux aménagements peuvent être apportés à ces exemples sans sortir du cadre de l'invention. 2877121 10 REVENDICATIONS 1. Procédé pour la conception d'une application logicielle, lequel procédé comprend les étapes suivantes: élaboration d'une pluralité de composants, chaque composant 5 comprenant au moins une variable dont le contenu est sauvegardé dans un emplacement mémoire, - agrégation desdits composants en une application logicielle dont les variables sont constituées par un regroupement desdites variables chacune dans son emplacement mémoire, lo caractérisé en ce qu'il comprend en outre l'étape suivante: - fusion d'au moins deux desdites variables dans un emplacement mémoire unique de façon à constituer un emplacement mémoire présentant autant d'entrées que de variables fusionnées. 2. Procédé selon la revendication 1, caractérisé en ce qu'on élabore chaque composant sous un langage spécifique différent. 3. Procédé selon la revendication 1 ou 2, caractérisé en ce que dans lesdites au moins deux variables, une variable est une variable d'un langage de programmation et l'autre est un attribut d'un composant déclaré dans un langage de balise. 4. Procédé selon l'une quelconque des revendications précédentes, caractérisé en ce que ladite application logicielle est de type interactif dans laquelle les composants sont des facettes interdépendantes élaborées de façon indépendante avant agrégation. 5. Procédé selon la revendication 4, caractérisé en ce que lesdites facettes sont élaborées en parallèle et comprennent au moins un composant 30 graphique. 6. Procédé selon la revendication 5, caractérisé en ce que le composant graphique est élaboré au format SVG. 2877121 11 7. Procédé selon l'une quelconque des revendications 4 à 6, caractérisé en ce que lesdites facettes sont élaborées en parallèle et comprennent au moins un composant de logique comportementale interactive. 8. Procédé selon l'une quelconque des revendications 4 à 7, caractérisé en ce que lesdites facettes sont élaborées en parallèle et comprennent au moins un composant de calcul. 9. Procédé selon l'une quelconque des revendications précédentes, io caractérisé en ce que les étapes d'agrégation et de fusion sont réalisées lors d'une phase de compilation ou de chargement des composants. 10. Système de développement logiciel pour la mise en oeuvre d'un procédé de conception de façon itérative d'une application logicielle interactive selon l'une quelconque des revendications 1 à 9; caractérisé en ce que ce système comporte un noyau de programmation permettant: - l'élaboration d'un modèle d'architecture logicielle à partir de la définition de structures arborescentes, l'agrégation, au sein dudit modèle d'architecture logicielle, d'une pluralité de composants élaborés de façon indépendante, et - fusion d'au moins deux des variables desdits composants dans un emplacement mémoire unique de façon à constituer un emplacement mémoire présentant autant d'entrées que de variables fusionnées. 11. Système selon la revendication 10, caractérisé en ce qu'il comprend au moins un fichier de ressource contenant des valeurs initiales des variables fusionnées ou non desdits composants. 12. Application du procédé selon la revendication 1 à la création d'une nouvelle variable dans une application logicielle existante, caractérisé en ce qu'on élabore un composant vide doté d'une nouvelle variable, puis on agrége ce nouveau composant avec l'application logicielle existante en fusionnant les emplacements mémoires de la nouvelle variable avec au moins une variable de l'application logicielle existante.