Débuter avec EXPRESS Alain Plantec Table des matières 1 Schema 2 2 Entité 2 2.1 Attributs simples................................................ 2 2.2 Attributs collection............................................... 3 2.2.1 Collections à une seule dimension.................................. 3 2.2.2 Collections à une plusieurs dimensions............................... 4 2.3 Les associations entre entités......................................... 4 2.3.1 Mise en relation par un attribut.................................... 4 2.3.2 Indiquer les ardinalités dans les deux sens............................. 5
1 Schema L unité de modélisation est le schéma. Ca veut dire que tout les constructions du langage sont utilisées dans le contexte d un schéma. De plus, un schéma peut réutiliser les définitions d un autre schéma. Voici un exemple de deux schémas. Le deuxième déclare utiliser les définition du premier : (*<premier> est le premier schma EXPRESS que vous rencontrez *) SCHEMA premier; SCHEMA deuxieme; (*<deuxieme> utilise les dfinitions de premier *) USE FROM premier; 2 Entité Une classe est spécifiée par une entité EXPRESS. Une entité peut hériter d une autre entité. Voici les deux entités crustace et crabe avec crabe qui hérite de crustace : SCHEMA familles; ENTITY crustace; SCHEMA especes; USE FROM familles; ENTITY crabe SUBTYPE OF (crustace); 2.1 Attributs simples Les propriétés fondamentales d une entité sont représentées par les attributs explicites. Un attribut explicite comprend un nom suivit de son type. On dispose de six types simples prédéfinis : 1. String pour les chaînes de caractères, 2. Integer pour les entiers, 3. Real pour les réels, 4. Logical pour une valeur logique soit : true, false ou unknown, 5. Boolean pour un booléen soit : true ou false et 6. Binary pour n importe quoi puisque c est du binaire encodé en ascii, Tout de suite une exemple de schéma ne comportant qu une entité avec des attributs de type simple : SCHEMA test; (*<personne> dcrit une personne physique *) ENTITY personne; nom : STRING; 2
prenom : STRING; age : INTEGER; taille : REAL; mariee : LOGICAL; (*<personne.mariee> on ne sait pas toujours *) photo : OPTIONAL BINARY; (*<personne.photo> pour le trombinoscope *) Pour qu une instance soit valide, tout attribut explicite doit avoir une valeur. Un attribut peut être indiqué comme facultatif auquel cas, une instance peut ne pas comporte de valeur pour cet attribut. Dans l exemple précédent, l attribut photo est déclaré facultatif. 2.2 Attributs collection 2.2.1 Collections à une seule dimension Simplement tout d abord : pour représenter les collections, on dispose de quatres types : 1. array : pour un tableau de taille fixe, chaque élément pouvant être accédé par une index entier représentant sa position dans la collection ; un tableau est définit par ses bornes inférieures et supérieures sachant qu une borne peut être négative ; 2. list : pour une collection à nombre variable d éléments, chaque élément pouvant être accédé par une index entier représentant sa position dans la collection ; 3. set : pour un ensemble d éléments à nombre variable d éléments et dont la position de stockage d un d éléments n est pas connue ; aucun doublon n est autorisé ; 4. bag : comme pour set mais les doublons sont autorisés. SCHEMA campagne_en_mer; ENTITY mesures; (*<mesures.remarques> un tableau de 10 remarques concernant les mesures *) remarques : ARRAY [1:10] OF STRING; (*<mesures.temperatures> temp. mesures depuis -25 mtres jusqu +10 mtres *) temperatures: ARRAY [-25:10] OF REAL; ENTITY campagne; code : STRING; (*<campagne.identification> au min. 0 et au max. 5 chanes pour identifier la campagne *) identification : LIST [0:5] OF STRING; (*<campagne.equipe> au min. 10 et au max. 75 noms de personnes presentes sur le navire *) equipe : SET [10:75] OF STRING; Et quand on ne connait pas le nombre d éléments dans une collection : il se présente deux cas : c est possible avec list, set et bag et 1. on peut ne pas indiquer du tout de bornes ; on a alors une collection avec au minimum, 0 élément et au maximum, une infinité d éléments ; 2. on peut aussi ne pas fixer que la borne supérieure ; alors là, on dispose de la valeur infinie représentée par le symbole? ; on utilise se symbole à la place de la borne supérieure. SCHEMA campagne_en_mer; ENTITY mesures; 3
(*<mesures.remarques> un tableau de 10 remarques concernant les mesures *) remarques : ARRAY [1:10] OF STRING; (*<mesures.temperatures> temp. mesures depuis -25 mtres jusqu +10 mtres *) temperatures: ARRAY [-25:10] OF REAL; ENTITY campagne; code : STRING; (*<campagne.identification> au min. 0 et au max. une infinit de chanes *) identification : LIST OF STRING; (*<campagne.equipe> au min. 10 et au max. une infinit de noms de personnes *) equipe : SET [10:?] OF STRING; 2.2.2 Collections à une plusieurs dimensions C est pareil que pour une dimensions car le type d un élément peut aussi être une collection. SCHEMA guerre_navale; -- par exemple, mais sans conviction quand la pertinence du schema ENTITY grille; cases : ARRAY [1:25] OF ARRAY [1:25] OF BOOLEAN; (*<grille.cases> pour attaquee ou non *) ENTITY navire; ENTITY porte_avion SUBTYPE OF (navire); x : INTEGER; (*<porte_avion.x> position en X dans la grille *) y : INTEGER; (*<porte_avion.y> position en Y dans la grille *) batiment : ARRAY [1:2] OF ARRAY [1:8] OF BOOLEAN; 2.3 Les associations entre entités 2.3.1 Mise en relation par un attribut Deux entités peuvent être associées par un attribut. scol : scolarite; ENTITY scolarite; (* une scolarite est installee dans batiment *) etab : batiment; 4
Dans l exemple précédent, on sait qu un etudiant est associé à une et une seule scolarité. Mais qu en est t il de la relation inverse : pour une scolarité, combien d étudiants, un, deux, au minimum 3 et au maximum 55? On peut donc changer la modélisation : ENTITY scolarite; etudiants : LIST [0:4500] OF etudiant; (* au maxi. 4500 tudiants *) etab : batiment; 2.3.2 Indiquer les ardinalités dans les deux sens D accord, mais, non de non, on perd la cardinalité pour un étudiant : combien de scolarité(s) par étudiant? Ok, voyons alors, on peut indiquer l association dans l entité etudiant et dans scolarite. Pour cela, il y a la clause inverse. Pour une association, dans une des deux entités en relation, on utilise un attribut explicite, et dans l autre, on utilise un attribut inverse. Voici une première solution : sascolarite : scolarite; ENTITY scolarite; INVERSE (* pour une scolarite, au mini, 0 etudiant et au maxi. 4500 tudiants *) etudiants : SET [0:4500] OF etudiant FOR sascolarite; (* pour une scolarite, un et un seul batiment *) batiment : batiment FOR lesscolarites; lesscolarites : LIST of scolarite; On peut tout aussi bien inverser l association en utilisant un attribut explicite dans scolarite qui porte la liste des étudiants et en utilisant un attribut inverse dans l entité Etudiant. INVERSE sascolarite : scolarite FOR etudiants; ENTITY scolarite; 5
(* pour une scolarite, de 0 une infinit d tudiants *) etudiants : LIST [0:?] OF etudiant; (* pour une scolarite, un et un seul batiment *) sonbatiment : batiment; INVERSE lesscolarites : SET of scolarite FOR sonbatiment; 6