Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder
Sintaks : guide de mise en œuvre / Plan Introduction Beaucoup de façon de faire Standard Facultative Motifs Contraintes de séquencement Conclusion
Sintaks : guide de mise en œuvre / Introduction - Problèmes de base Beaucoup de concept Certains sont uniques Beaucoup se chevauchent Certains sont simples D'autres complexes Comment les choisir Comment procéder pour construire un fichier STS Organisation du fichier STS qui marche en écriture STS qui marche en lecture
Sintaks : guide de mise en œuvre / Introduction - Métamodèle de sintaks
Sintaks : guide de mise en œuvre / Beaucoup de façon de faire : standard Une classe Un Template pour identifier la classe à manipuler
Sintaks : guide de mise en œuvre / Beaucoup de façon de faire : standard Une famille de classes Un Template par classe fille, si X est abstraite pas de template X Et une Alternative et une polymorphicCond pour chaque template
Sintaks : guide de mise en œuvre / Beaucoup de façon de faire : standard Un attribut unique Une PrimitiveValue pour extraire/affecter la valeur Ou une ConstantValue pour fixer/affecter la valeur
Sintaks : guide de mise en œuvre / Beaucoup de façon de faire : standard Un attribut multiple Une Iteration pour le container Et une PrimitiveValue (extraire) ou une ConstantValue (fixer)
Sintaks : guide de mise en œuvre / Beaucoup de façon de faire : standard Une agrégation unique Un template pour manipuler la classe cible Et un RuleRef pour affecter la relation
Sintaks : guide de mise en œuvre / Beaucoup de façon de faire : standard Un agrégation multiple Une Iteration pour le container Et un template pour la classe cible ou un RuleRef vers le template
Sintaks : guide de mise en œuvre / Beaucoup de façon de faire : standard Une référence unique Un ObjectReference pour cibler la référence et faire laffectation
Sintaks : guide de mise en œuvre / Beaucoup de façon de faire : standard Une référence multiple Une Iteration pour le container Et un ObjectReference pour cibler la référence
Sintaks : guide de mise en œuvre / Beaucoup de façon de faire : facultatif Les concepts Alternative + CustomCondition Permettent de modéliser des variations dans la syntaxe textuelle Selon la valeur dun attribut Selon la valeur de plusieurs attributs (si on introduit des attributs dérivés…) Dans lexemple TinyJava la manipulation de 'static' était basée sur ce principe
Sintaks : guide de mise en œuvre / Beaucoup de façon de faire : facultatif Le concept Once (ou tout autre nom à lissue de cette journée) Permet la modélisation dun texte composé dun grand nombre de propriétés qui ne sont pas dans un container qui peuvent apparaître dans un ordre quelconque Dans lexemple TinyJava la manipulation de abstract/final était basée sur ce principe
Sintaks : guide de mise en œuvre / Beaucoup de façon de faire : facultatif Le concept RuleRef Permet dinvoquer une règle Permet de manipuler une propriété Combiner un RuleRef avec dautres concepts RuleRef (RR) possède une propriété à manipuler Lautre concept (C) possède aussi une propriété à manipuler Deux formes de combinaisons possibles RR(p) x C() RR() x C(p)
Sintaks : guide de mise en œuvre / Beaucoup de façon de faire : facultatif Pour un attribut Pour un texte : package hassen ; Il y trois façons différentes de le manipuler PV(p)RR() -> PV(p)RR(p) -> PV()
Sintaks : guide de mise en œuvre / Beaucoup de façon de faire : motifs Selon le voisinage de la propriété avec sa classe et les propriétés des autres classes 1.Une propriété totalement indépendante 2.Une propriété dans une classe mère 3.Des propriétés dans une fratrie 4.Des propriétés distribuées dans des classes Selon le degré de partage la syntaxe textuelle 1.Syntaxe textuelle partagée 2.Syntaxe textuelle non partagée
Sintaks : guide de mise en œuvre / Beaucoup de façon de faire : motifs Trois cas "génériques" clairement identifiés : X : propriété indépendante Y : propriété dans la classe mère, syntaxe textuelle partagée Z* : propriété dans une classe, syntaxe textuelle partagée différentes variantes
Sintaks : guide de mise en œuvre / Beaucoup de façon de faire : motifs
Sintaks : guide de mise en œuvre / Beaucoup de façon de faire : motifs
Sintaks : guide de mise en œuvre / Beaucoup de façon de faire : motifs
Sintaks : guide de mise en œuvre / Beaucoup de façon de faire : motifs
Sintaks : guide de mise en œuvre / Beaucoup de façon de faire : motifs Les motifs illustrés pour Attribut unique Sont extensibles pour Attribut multiple Agrégation unique Agrégation multiple Référence unique Référence multiple
Sintaks : guide de mise en œuvre / Contraintes de séquencement Le concept primordial est le template. Tout est construit autour de lui. C'est lors du traitement du template que l'on profite de ses liens d'agrégation pour visiter l'ensemble des propriétés qu'il possède. Un attribut ou une agrégation (unique ou multiple) ne peuvent être traités qu'après loccurrence du template définissant la classe les possédants. Lorsquune classe doit sérialiser plusieurs propriétés, il ny a pas dordre imposé par sintaks entre les différentes propriétés. Un container est toujours complètement sérialisé lors d'une opération, il nest pas possible de sérialiser indépendamment des fractions de container. Une référence ne peut pas servir à manipuler un objet. En principe c'est le possesseur de l'objet référencé qui s'occupe de lui
Sintaks : guide de mise en œuvre / Effet de ces contraintes Très facile de manipuler un texte sous une forme préfixée : class abstract final private AbstractValue { } class -> Template puis utilise les propriétés de la classe Plus difficile de manipuler un texte sous une forme infixée voire postfixée abstract final private class AbstractValue { } class arrive trop tard car il faut déjà remplir les propriétés de la classe… Solution : faire commencer le template class plus tôt dès la définition de la première propriété la concernant : abstract Problème induit abstract final private class AbstractValue { } abstract final private interface IValue { } Les deux templates class et interface sont en concurrence et cest le KW qui va les départager… au prix dune lecture longue puis dun backtracking.
Sintaks : guide de mise en œuvre / Effets de ces contraintes Exemple dans TinyJava private String val; public String getValue(); TJData et TJMethod ont la même description début générique pour TJMethod les () avec les paramètres fin générique Alternative "data or method" les met en concurrence Factorisation les séquences de début et de fin Remarque 4 propriétés ont été factorisées dans …begin
Sintaks : guide de mise en œuvre / Effet de ces contraintes Une référence ne peut pas servir à manipuler l'objet Dommage car si l'objet est très synthétique (que la clé) On aurait pu imaginer un langage plus simple
Sintaks : guide de mise en œuvre / Conclusion Sintaks est très riche Sintaks peut être très déroutant Sintaks peut servir à une étude de GL Les règles Sintaks peuvent faire lobjet dun refactoring … Il doit y avoir bien dautres motifs PS : le Once nest pas traité dans toutes les propositions car il est trop récent