
One of the main elements of an Aspect-Oriented Programming (AOP) language or framework is its pointcut language. A pointcut is a predicate which selects program execution points and determines at which points the execution should be affected by an aspect. Experimenting with AspectJ shows that two basic primitive pointcuts, call and execution, dealing with method invoca- tion from the caller and callee standpoints, respectively, lead to confusion. This is due to a subtle interplay between the use of static and dynamic types to select execution points, dynamic lookup, and the expectation to easily select the caller and callee execution points related to the same invocation. As a result, alternative semantics have been proposed but have remained paper design. In this article, we reconsider these various semantics in a practical way by implementing them using CALI, our Common Aspect Language Interpreter. This framework reuses both Java as a base language and AspectJ as a way to select the program execution points of interest. An additional interpretation layer can then be used to prototype interesting AOP variants in a full-blown environment. The paper illustrates the benefits of applying such a setting to the case of the call and execution pointcuts. We show that alternative semantics can be implemented very easily and exercised in the context of AspectJ without resorting to complex compiler technology.
Resume. Le dereferencement de references nulles est une erreur de programmation courante dans les langages a objets. Pour la prevenir, certaines approches garantissent statiquement son absence a l’aide de systemes de types ou d’annotations mais reduisent l’expressivite du langage. D’autres approches analysent plutot le code source pour identifier les erreurs potentielles, mais peuvent trouver des faux-positifs et ne garantissent pas l’absence d’erreurs a l’execution. Dans cet article, nous proposons une approche offrant la garantie statique d’absence d’erreur de dereferencement dans une grande portion du code. L’approche consiste en un systeme de types statiques simple, des verifications dynamiques et un operateur de test dynamique. En plus de preserver l’expressivite du langage, notre approche limite la zone de danger a la construction des instances et permet la detection precoce des erreurs a l’execution. Nos mesures experimentales demontrent une grande etendue des garanties statiques et l’efficacite de la detection precoce des erreurs.
Languages like Scala fuse object-oriented programming with concepts from module systems. Like an ML module, an object can have types as members. This poses new challenges for the type theoretic foundation of these languages. Instead of a stratified solution à la ML, we are looking for a system that does not distinguish between core language and module system. In this talk I'll present a new type-system that can model Scala and languages like it. The properties we are interested in are Scala's path-dependent types and abstract type members, as well as its mixture of nominal and structural typing through the use of refinement types. Compared to previous approaches, we make no attempt to model inheritance or mixin composition. Indeed we will argue that such concepts are better expressed in a different setting. The calculus does not precisely describe what's currently in Scala. It is more normative than descriptive. The main point of deviation concerns the difference between Scala's compound type formation using with and classical type intersection, as it is modelled in the calculus. Scala, and the previous calculi attempting to model it conflates the concepts of compound types (which inherit the members of several parent types) and mixin composition (which build classes from other classes and traits). At first glance, this offers an economy of concepts. However , it is problematic because mixin composition and intersection types have quite different properties. In the case of several inherited members with the same name, mixin composition has to pick one which overrides the others. It uses for that the concept of a linearization of a trait hierarchy. Typically, given two independent traits with a common method, the mixin composition of those traits would favor the method definition in the second trait, whereas the member in the first trait would be accessible with a super-call. All this makes sense from an implementation standpoint. From a typing standpoint it is more awkward, because it breaks commutativity and with it several monotonicity properties. In the proposed calculus, we replace Scala's compound types by classical intersection types, which are commutative. We also complement this by classical union types. Intersections and unions form a lattice wrt subtyping. This addresses another problematic feature of Scala's current type system, where least upper bounds and greatest lower bounds do not always exist.
Résumé. La plupart des contributions en transformation de modèles sont concernées par la définition de langages pour exprimer des règles de transformation. La définition de ces règles est une tâche difficile, car de nombreux problèmes, liés à l’écriture/génération des règles, doivent être anticipés surtout dans le cas des formalismes source/cible qui ne sont pas largement utilisés. Dans cet article, nous proposons de considérer le problème de transformation comme un problème d'optimisation combinatoire où un modèle cible peut être automatiquement généré à partir d'un nombre réduit d'exemples de transformations. Nous proposons en particulier, une méta-modélisation de notre approche MOTOE, basée sur la méta-heuristique recuit simulé, qui combine un ensemble de solutions de transformation pour converger vers une solution optimale tenant compte de la cohérence entre les transformations. Les résultats de la validation sur des données industrielles montrent que les modèles obtenus sont comparables à ceux proposés par les experts de notre partenaire industriel.
Nous prenons prétexte de la récente acquisition d'ILOG par IBM pour parcourir vingt années d'exploration des technologies objets à la frontière sans cesse mouvante de la recherche et de l'industrie. Retour sur un territoire sur lequel ILOG a fait office de passeur, d'accélérateur parfois, et à l'occasion d'explorateur. Nous étudierons les forces qui ont mené à croiser les mèmes semés par les premiers travaux d'Intelligence Artificielle et du Génie Logiciel et à progressi-vement sélectionner et peaufiner les formes les plus nécessaires à partir d'un ensemble de technologies plutôt disparates. De nombreux fronts se sont ouverts, souvent complémentaires. Front de la programmation : des objets lispiens tels que LeLisp et son inévitable Micro-Ceyx à Java et C#. Front de la modélisation et du raisonnement : de la pre-mière génération de systèmes centrés objets tels Kool, Smeci, FRL ou Sherpa aux règles métiers et aux modèles ontologiques tels que promus par le W3C. Front du Génie Logiciel : des premières méthodologies objets à la programma-tion par Aspects et à l'Ingénierie des Modèles. Enfin, front des architectures : des classes aux services web, en passant par les composants. Qui remplacera les nécessaires mais défuntes macros Lisp, quelles sont les directions ouvertes, quelles portes ont été définitivement fermées ; que reste-t-il de nos amours ? Comment traiter cet héritage et l'utiliser pour accélérer l'interminable sortie du mode artisanal d'une industrie qui n'en est toujours pas une ? A défaut de prétendre répondre à ces questions nous tenterons d'en proposer quelques éclairages très subjectifs issus de ces vingt dernières années passées au coeur de la tourmente.
Les matrices de dependance (DSM - Dependency Structure Matrix), developpees dans le cadre de l'optimisation de processus, ont fait leurs preuves pour identifier les dependances logicielles entre des packages ou des sous-syste- mes. Il existe plusieurs algorithmes pour structurer une matrice de facon a ce qu'elle reflete l'architecture des elements analyses et mette en evidence des cycles entre les sous-systemes. Cependant, les implementations de matrices de dependance existantes manquent d'informations importantes pour apporter une reelle aide au travail de reingenierie. Par exemple, le poids des relations qui posent probleme ainsi que leur type ne sont pas clairement presentes. Ou en- core, des cycles independants sont fusionnes. Il est egalement difficile d'obtenir une visualisation centree sur un package. Dans ce papier, nous ameliorons les matrices de dependance en ajoutant des informations sur (i) le type de refe- rences, (ii) le nombre d'entites referencantes, (iii) le nombre d'entites referen- cees. Nous distinguons egalement les cycles independants. Ce travail a ete im- plemente dans l'environnement de reingenierie open-source Moose. Il a ete ap- plique a des etudes de cas complexes comme le framework Morphic UI contenu dans les environnements Smalltalk open-source Squeak et Pharo. Les resultats obtenus ont ete appliques dans l'environnement de programmation Pharo et ont mene a des ameliorations.
Resume. Le dereferencement de references nulles est une erreur de programmation courante dans les langages a objets. Pour la prevenir, certaines approches garantissent statiquement son absence a l’aide de systemes de types ou d’annotations mais reduisent l’expressivite du langage. D’autres approches analysent plutot le code source pour identifier les erreurs potentielles, mais peuvent trouver des faux-positifs et ne garantissent pas l’absence d’erreurs a l’execution. Dans cet article, nous proposons une approche offrant la garantie statique d’absence d’erreur de dereferencement dans une grande portion du code. L’approche consiste en un systeme de types statiques simple, des verifications dynamiques et un operateur de test dynamique. En plus de preserver l’expressivite du langage, notre approche limite la zone de danger a la construction des instances et permet la detection precoce des erreurs a l’execution. Nos mesures experimentales demontrent une grande etendue des garanties statiques et l’efficacite de la detection precoce des erreurs.
Les transformations de modeles sont au c\oe ur de l'ingenierie dirigee par les modeles. Elles sont habituellement developpees par des programmeurs specialises et leur code doit etre remis a jour lors de toute variation des besoins ou des metamodeles impliques. Pour faciliter le developpement de ces transformations, une approche possible consiste a generer des regles de transformation a partir d'exemples de transformation. L'avantage des exemples est qu'ils peuvent etre d'une part ecrits dans une syntaxe concrete, plus accessible pour l'utilisateur qu'un langage de transformation et d'autre part plus faciles a definir que les regles elles-memes. Dans cet article, nous specifions une methode qui utilise l'analyse relationnelle de concepts pour capturer et organiser par specialisation les schemas recurrents qui apparaissent dans les exemples de transformation. Ces schemas recurrents peuvent ensuite etre exploites pour la production de regles de transformation.
La programmation par objets presente une apparente incompatibilite entre trois termes : l'heritage multiple, l'efficacite et l'hypothese du monde ouvert --- en particulier, le chargement dynamique. Cet article presente des resultats d'experimentations exhaustives comparant l'efficacite de differentes techniques d'implementation (coloration, BTD, hachage parfait, ...) dans le contexte de differents schemas de compilation (de la compilation separee avec chargement dynamique a la compilation purement globale). Les tests sont effectues avec et sur le compilateur du langage Prm. Ils confirment pour l'essentiel les resultats theoriques anterieurs tout en montrant une sur-additivite marquee des surcouts. Les schemas d'optimisation globale demontrent un gain significatif par rapport a la coloration qui fait fonction de reference. Des techniques comme la simulation des accesseurs ou le hachage parfait entrainent un surcout limite, mais la combinaison des deux double le surcout total.
Resume. Nous proposons dans cet article une approche probabiliste utilisant les reseaux bayesiens pour analyser et predire les impacts des changements dans les systemes a objets. Un modele d’impact a ete construit et des probabilites ont ete affectees aux differents sommets du reseau. Des donnees recoltees sur un systeme reel sont utilisees pour etudier empiriquement des hypotheses (relations) de causalite entre d’une part, des attributs internes de logiciel, et d’autre part, l’impact du changement. Pour ce faire, plusieurs scenarios ont ete executes sur le reseau. Les resultats obtenus ont d’une part, confirme certains resultats deja trouves lors de travaux anterieurs, mais d’autre part, remis en cause d’autres conclusions. Cette etude entre dans le cadre general d’une demarche tendant a proposer des modeles d’estimation de la qualite du produit logiciel ; elle montre qu’un modele probabiliste constitue une alternative interessante, aux modeles non probabilistes proposes dans la litterature.
Il est aujourd'hui courant d'utiliser une approche «orientee service» pour definir des applications complexes. Dans ce cadre, les services constituent les unites de base, assembles par des mecanismes de plus haut niveau comme les orchestrations. Nous presentons ici un atelier logiciel construit dans une de- marche dirigee par les modeles permettant la composition d'orchestrations de services, et discutons les choix effectues ainsi que les difficultes rencontrees lors de sa mise en œuvre.
Only a single panoramic exposure to an X-ray source is needed to simultaneously provide a plurality of different real time and/or permanently recorded tomographic images of a focal trough of a patient's dental arch area. Contrast, intensity and magnification properties relating to tissue, bone, teeth, cheeks, and the like, may readily be varied by the dentist, physician or medical technician by merely turning or adjusting appropriate knobs of electronic components associated with the invention, a task impossible to achieve by present direct film screen X-ray cameras.
Resume. SysML est le nouveau langage de modelisation defini par l’OMG. Il peut etre vu comme une extension d’UML destinee a la modelisation d’un large spectre de systemes complexes. Son champ d’application est en ce sens plus large que celui d’UML mais sa filiation le rend tout particulierement interessant pour la modelisation de systemes embarques majoritairement composes de logiciel. Les logiciels deployes sur les reseaux de capteurs sans fil (WSN) sont un bon exemple de ce type d’application puisque la prise en compte de l’interaction forte entre le materiel et le logiciel inherente a ce type de systeme est une condition importante pour une modelisation efficace. Dans cet article nous decrivons notre retour sur experience concernant la modelisation d’un systeme utilisant des capteurs mobiles sans fil afin de mesurer les flux de personnes dans une ville. Dans cette etude, nous avons utilise a la fois SysML pour la modelisation du systeme et UML pour la modelisation des parties logicielles. Nous presentons les points de recouvrements des deux langages d’une part, et nous en comparons les diagrammes statiques d’autre part.
A contrario des normes UML 2.1 et SysML, le profil UML TURTLE (Timed UML and RT-LOTOS Environment) dispose d’une semantique formelle et d’une methodologie. Avec les systemes temps reel pour cible, cette methodologie met l’accent sur la verification formelle du comportement des objets. Le profil TURTLE est dote d’un langage graphique et formalise d’expression d’exigences temporelles. La contribution de cet article reside dans la presentation d’algorithmes de generation d’observateurs a partir d’exigences temporelles exprimees dans ce langage. Ces observateurs sont destines a guider la verification formelle et en particulier a confronter le comportement des objets aux exigences temporelles tout en tracant ces dernieres au long de la trajectoire de conception du systeme en cours d’etude. Un dispositif de charge d’une batterie de vehicule hybride sert d’etude de cas.
Ever-growing systems' complexity and novel requirements engineering approaches such as reuse or globalization imply that requirements are produced by different stakeholders and written in possibly different languages. In this context, checking consistency so that requirements specifications are amenable to formal analysis is a challenge. Current techniques either fail to consider the requirement set as a whole, missing certain inconsistency types or are unable to take heterogeneous (i.e. expressed in different languages) specifications into account. We propose to use model composition to address this problem in a staged approach. First, heterogeneous requirements are translated in model fragments instances of a common metamodel. Then, fragments are merged in one unique model. On such a model inconsistencies such as under-specifications can be incrementally detected and formal analysis is made possible. Our approach is fully supported by our model composition framework. We propose model composition as means to address flexibility needs in requirements integration. Threats to validity such as the impact of new requirements languages needs to be addressed in future work.
L'alignement d'ontologies met en evidence les relations semantiques entre les entites de deux ontologies a confronter. L'outil de choix pour l'alignement est une mesure de similarite sur les couples d'entites. Certaines methodes d'alignement performantes font dependre la similarite d'un couple de celles des couples voisins. La circularite dans les definitions resultantes est traitee par le calcul iteratif d'un point fixe. Nous proposons un cadre unificateur, appele alignement dirige par la structure, qui permet de decrire ces methodes en depit de divergences d'ordre technique. Celui-ci combine l'appariement de graphes et le calcul matriciel. Nous presentons son application a la re-implementation de l'algorithme OLA, baptisee OLA2.
∗Equipe PTIDEJ– GEODES Departement d’informatique et de recherche operationnelle, Universite de Montreal CP 6128 succ. Centre Ville, Montreal, Quebec, H3C 3J7, Canada {mohanaou, foutsekh, guehene}@iro.umontreal.ca ∗∗ Equipe Adam – INRIA Futurs Universite des Sciences et Technologies de Lille – LIFL UMR CNRS 8022 Cite Scientifique, 59655 Villeneuve d’Ascq Cedex, France {Laurence.Duchien, Anne-Francoise.LeMeur}@lifl.fr