29

Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

Embed Size (px)

Citation preview

Page 1: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder
Page 2: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

Sintaks : Tentative de guide de mise en œuvre

Michel Hassenforder

Page 3: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

3

Sintaks : guide de mise en œuvre

/ 294Plan

• Introduction• Beaucoup de façon de faire

StandardFacultativeMotifs

• Contraintes de séquencement• Conclusion

Page 4: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

4

Sintaks : guide de mise en œuvre

/ 294Introduction - Problèmes de base

• Beaucoup de conceptCertains sont uniquesBeaucoup se chevauchentCertains sont simplesD'autres complexes

• Comment les choisir• Comment procéder pour construire un fichier

STSOrganisation du fichierSTS qui marche en écritureSTS qui marche en lecture

Page 5: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

5

Sintaks : guide de mise en œuvre

/ 294Introduction - Métamodèle de sintaks

Page 6: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

6

Sintaks : guide de mise en œuvre

/ 294Beaucoup de façon de faire : standard

• Une classeUn Template pour identifier la classe à manipuler

Page 7: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

7

Sintaks : guide de mise en œuvre

/ 294Beaucoup de façon de faire : standard

• Une famille de classesUn Template par classe fille, si X est abstraite pas de template XEt une Alternative et une polymorphicCond pour chaque template

Page 8: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

8

Sintaks : guide de mise en œuvre

/ 294Beaucoup de façon de faire : standard

• Un attribut uniqueUne PrimitiveValue pour extraire/affecter la valeurOu une ConstantValue pour fixer/affecter la valeur

Page 9: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

9

Sintaks : guide de mise en œuvre

/ 294Beaucoup de façon de faire : standard

• Un attribut multipleUne Iteration pour le containerEt une PrimitiveValue (extraire) ou une ConstantValue (fixer)

Page 10: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

10

Sintaks : guide de mise en œuvre

/ 294Beaucoup de façon de faire : standard

• Une agrégation uniqueUn template pour manipuler la classe cibleEt un RuleRef pour affecter la relation

Page 11: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

11

Sintaks : guide de mise en œuvre

/ 294Beaucoup de façon de faire : standard

• Un agrégation multipleUne Iteration pour le containerEt un template pour la classe cible ou un RuleRef vers le template

Page 12: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

12

Sintaks : guide de mise en œuvre

/ 294Beaucoup de façon de faire : standard

• Une référence uniqueUn ObjectReference pour cibler la référence et faire l’affectation

Page 13: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

13

Sintaks : guide de mise en œuvre

/ 294Beaucoup de façon de faire : standard

• Une référence multipleUne Iteration pour le containerEt un ObjectReference pour cibler la référence

Page 14: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

14

Sintaks : guide de mise en œuvre

/ 294Beaucoup de façon de faire : facultatif

• Les concepts Alternative + CustomCondition

Permettent de modéliser des variations dans la syntaxe textuelle

Selon la valeur d’un attributSelon la valeur de plusieurs attributs (si on

introduit des attributs dérivés…)

Dans l’exemple TinyJavala manipulation de 'static' était basée sur ce

principe

Page 15: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

15

Sintaks : guide de mise en œuvre

/ 294Beaucoup de façon de faire : facultatif

• Le concept Once (ou tout autre nom à l’issue de cette journée)

Permet la modélisation d’un texte composéd’un grand nombre de propriétésqui ne sont pas dans un containerqui peuvent apparaître dans un ordre quelconque

Dans l’exemple TinyJavala manipulation de abstract/finalétait basée sur ce principe

Page 16: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

16

Sintaks : guide de mise en œuvre

/ 294Beaucoup de façon de faire : facultatif

• Le concept RuleRefPermet d’invoquer une règlePermet de manipuler une propriété

• Combiner un RuleRef avec d’autres conceptsRuleRef (RR) possède une propriété à manipulerL’autre concept (C) possède aussi une propriété à manipuler

• Deux formes de combinaisons possiblesRR(p) x C()RR() x C(p)

Page 17: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

17

Sintaks : guide de mise en œuvre

/ 294Beaucoup 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()

Page 18: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

18

Sintaks : guide de mise en œuvre

/ 294Beaucoup 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épendante2. Une propriété dans une classe mère3. Des propriétés dans une fratrie4. Des propriétés distribuées dans des classes

• Selon le degré de partage la syntaxe textuelle

1. Syntaxe textuelle partagée2. Syntaxe textuelle non partagée

Page 19: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

19

Sintaks : guide de mise en œuvre

/ 294Beaucoup de façon de faire : motifs

• Trois cas "génériques" clairement identifiés : X : propriété indépendanteY : propriété dans la classe mère, syntaxe textuelle partagéeZ* : propriété dans une classe, syntaxe textuelle partagée

différentes variantes

Page 20: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

20

Sintaks : guide de mise en œuvre

/ 294Beaucoup de façon de faire : motifs

Page 21: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

21

Sintaks : guide de mise en œuvre

/ 294Beaucoup de façon de faire : motifs

Page 22: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

22

Sintaks : guide de mise en œuvre

/ 294Beaucoup de façon de faire : motifs

Page 23: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

23

Sintaks : guide de mise en œuvre

/ 294Beaucoup de façon de faire : motifs

Page 24: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

24

Sintaks : guide de mise en œuvre

/ 294Beaucoup de façon de faire : motifs

• Les motifs illustrés pourAttribut unique

• Sont extensibles pourAttribut multipleAgrégation uniqueAgrégation multipleRéférence uniqueRéférence multiple

Page 25: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

25

Sintaks : guide de mise en œuvre

/ 294Contraintes 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 l’occurrence du template définissant la classe les possédants.

• Lorsqu’une classe doit sérialiser plusieurs propriétés, il n’y a pas d’ordre imposé par sintaks entre les différentes propriétés.

• Un container est toujours complètement sérialisé lors d'une opération, il n’est 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

Page 26: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

26

Sintaks : guide de mise en œuvre

/ 294Effet 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 induitabstract final private class AbstractValue { }abstract final private interface IValue { }

Les deux templates class et interface sont en concurrence et c’est le KW qui va les départager… au prix d’une lecture ‘longue’ puis d’un backtracking.

Page 27: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

27

Sintaks : guide de mise en œuvre

/ 294Effets de ces contraintes

• Exemple dans TinyJavaprivate String val;public String getValue();

• TJData et TJMethod ont la même description

début génériquepour TJMethod les () avec les paramètresfin générique

• Alternative "data or method" les met en concurrence

• Factorisationles séquences de début et de fin

• Remarque4 propriétés ont été factorisées dans …begin

Page 28: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

28

Sintaks : guide de mise en œuvre

/ 294Effet 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

Page 29: Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

29

Sintaks : guide de mise en œuvre

/ 294Conclusion

• 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 l’objet d’un

refactoring …

• Il doit y avoir bien d’autres motifs

• PS : le Once n’est pas traité dans toutes les propositions car il est trop récent