• Aucun résultat trouvé

Les déclarations de composant de donnée AADL correspondent à des déclarations de type dans les langages de programmation. Ces déclarations se traduisent donc par une définition de type. Une instance de composant de donnée correspond alors naturellement à la définition d’une variable.

Règle V.1 (Interprétation des composants de donnée)

La déclaration d’un composant de donnée AADL correspond à la définition d’un type de donnée dans un langage de programmation impérative. Une instance de composant de donnée (comme sous-composant d’un thread ou d’un sous-programme correspond à la définition d’une variable.

La déclaration d’un composant AADL traduit l’existence d’un type de donnée ; la sémantique du type de donnée n’est cependant pas couverte par la seule déclaration de composant. Ainsi, le code AADLV.1ne donne aucune indication sur la nature de la donnée déclarée.

1 data une_donnee

2 end une_donnee;

Listing V.1 – Déclaration d’une donnée AADL

Afin de produire un type de donnée exploitable, il est nécessaire de spécifier la sémantique de la donnée. Le langage AADL ne transportant pas en lui-même la description sémantique des données, il est nécessaire de préciser cette sémantique. Au cours de nos travaux nous avons défini un ensemble de propriétés AADL permettant de spécifier le type de donnée modélisé par les composants de donnée AADL. Le comité de standardisation AADL a repris cette approche et défini un ensemble plus complet de propriétés, appelé Language_Support. Les règles que nous

présentons ici peuvent être vues comme des compléments aux directives architecturales que nous avons présentées en sectionIV-5, page65.

40 Data_Format: enumeration (Integer, int, Float, flt, Boolean,

41 String, str, Character, char, Wide_String, Natural, Positive,

42 Enum, long, long_long)

43 applies to (data);

Listing V.2 – Définition de la sémantique des données

La principale propriété de cet ensemble estData_Format, dont la définition est reproduite au

listingV.2; elle permet de spécifier la sémantique d’un composant de donnée. Les différentes va- leurs possibles correspondent aux types classiques définis dans les langages de programmation (entiers, flottants, caractères, chaînes de caractères, type énuméré). Certains types sont mention- nés plusieurs fois sous différentes dénominations, afin d’être plus proche des appellations utilisées dans les langages cibles. Par exemple,Integeretintdésignent une sémantique d’entier en repre-

Règle V.2 (Spécification de la sémantique des données)

La sémantique d’un composant de donnée est indiqué par les propriétés AADL

Language_Support::Data_Format, Language_Support::Data_Type, Language_Support ::Data_Structure, Language_Support::Dimension et Language_Support:: Constant_String.

La combinaison des ces différentes propriétés permet de spécifier la sémantique des compo- sants de donnée.

À partir de la sémantique indiquée dans les propriétés, il est possible de traduire une décla- ration de composant de donnée AADL en un type simple (entier, à virgule flottante, booléen), comme illustré sur le listingV.3.

4 data implementation une_donnee.entier

5 properties

6 Language_Support::Data_Format => Integer;

7 end une_donnee.entier;

Listing V.3 – Déclaration d’un entier en AADL

La déclaration des énumérations implique la spécification des valeurs énumérées possibles. Nous utilisons pour cela la propriétéConstant_String, qui est une liste de chaînes de caractères.

Le listingV.4donne un exemple d’une déclaration de donnée correspondant à un type énuméré.

9 data implementation une_donnee.enumeration

10 properties

11 Language_Support::Data_Format => Enum;

12 Language_Support::Constant_String => ("bleu", "jaune");

13 end une_donnee.enumeration;

Listing V.4 – Déclaration d’un type énuméré en AADL

Nous assimilons les tableaux à des types simples dans la mesure où leur définition repose uniquement sur des propriétés AADL, comme illustré sur le listingV.5. Nous utilisons trois pro- priétés pour spécifier la structure en tableau, le type de donnée (ici des entiers) et la dimension du tableau (ici un tableau à une dimension, de taille 6). Nous pouvons remarquer que l’usage de la propriété Language_Support::Data_Format ne permet pas de spécifier l’usage d’un com-

posant de donnée AADL ; ainsi cette syntaxe restreint les possibilités de définition à des tableaux contenant des types scalaires simples, spécifiés par la propriétésLanguage_Support::Data_Format

. Pour pallier cette limitation, nous proposons d’introduire une propriété AADL alternative, ap- pelée Language_Support::Data_Type. Cette nouvelle propriété ainsi définie permet de spécifier

l’usage d’un composant de donnée AADL défini par ailleurs.

15 data implementation une_donnee.tableau_entier

16 properties 17 Language_Support::Data_Format => Integer; 18 Language_Support::Data_Structure => Array; 19 Language_Support::Dimension => (6); 20 end une_donnee.tableau_entier; 21

22 data implementation une_donnee.tableau_entier2

23 properties

24 Language_Support::Data_Type => classifier (une_donnee.entier);

25 Language_Support::Data_Structure => Array;

27 end une_donnee.tableau_entier2;

Listing V.5 – Déclaration de tableaux en AADL

Les chaînes de caractères constituent un mécanisme à mi-chemin entre les types scalaires et les tableaux. Pour des raisons pratiques, nous ne considérons que les chaînes de taille fixée ; nous évitons ainsi de traiter le redimensionnement des chaînes. Ceci permet d’une part de simplifier la manipulation des chaînes, et également de pouvoir déterminer de façon statique la taille des communications. Nous utilisons donc une propriété supplémentaire pour spécifier la taille de la chaîne, comme illustré sur le listingV.6. Les chaînes de caractères sont vues implicitement comme des tableaux de caractères unidimensionnels.

29 data implementation une_donnee.chaine

30 properties

31 Language_Support::Data_Format => String;

32 Language_Support::Dimension => (7);

33 end une_donnee.chaine;

Listing V.6 – Déclaration d’une chaîne de caractères en AADL

Les structures de données constituées de plusieurs champs (aussi appelées enregistrements dans certains langages) constituent des données complexes. Leur organisation peut être représenté par une construction AADL à l’aide de sous-composants, comme illustré sur le listing V.7. Une telle déclaration traduit exactement le fait que le type de donnéeune_donnee.structureest consti-

tué de deux champsietc, correspondant tous deux à un type défini par ailleurs. Aucune propriété

AADL n’a besoin d’être spécifiée, car la syntaxe AADL suffit à fournir toutes les informations nécessaires.

35 data implementation une_donnee.structure

36 subcomponents

37 i : data une_donnee.entier;

38 c : data une_donnee.chaine;

39 end une_donnee.structure;

Listing V.7 – Déclaration d’une structure de données complexe en AADL

Les listes constituent un cas limite pour lequel AADL ne permet pas une description efficace. Les listes ne peuvent pas être représentées comme des structures de données. En effet, une liste est une succession de données de même type chaînées les unes aux autres, le dernier éléments de la liste n’ayant pas de successeur. Une telle construction ne peut pas être représentée comme une structure de donnée telle que décrite dans le listingV.7, dans la mesure où AADL ne possède pas la notion de pointeur ou de référence : un composant s’instanciant lui-même comme sous- composant produit systématiquement une architecture infiniment récursive, qui ne peut pas être exploitée. Une solution consiste à utiliser des propriétés AADL permet de décrire un type de donnée opaque, qui masque la structure exacte de la donnée, comme représenté sur le listingV.8. Nous masquons alors la structure interne du type de donnée, en suivant une approche similaire à celle appliquée pour les conteneurs de la bibliothèque standard du C++ [Stroustrup,2003]. Pour cela, nous introduisons une nouvelle valeur pour la propriétéData_Structure:chained_list. De

la même façon que pour les tableaux, nous pouvons utiliserLanguage_Support::Data_Formatou Language_Support::Data_Type.

41 data implementation une_donnee.liste

42 properties

44 Language_Support::Data_Container => classifier (une_donnee.entier );

45 end une_donnee.liste;

Listing V.8 – Déclaration d’une liste en AADL

Contrairement aux autres types de données, qui traduisent des constructions classiques dans les langages de programmation, le type liste tel que nous le décrivons en AADL suppose la génération d’une structure assez évoluée, fournissant des mécanismes permettant d’ajouter, d’extraire, etc. des éléments d’une liste.

Les types de donnée AADL sont traduit dans le langage de programmation cible. Afin de faci- liter la correspondance entre AADL et le langage cible, le nom AADL est repris pour la définition du type dans le langage cible.