delim @@
|
| 5i' D.5.4 |
Directives applicables a la representation´ en fonction des etats´ et aux el´ ements´ |
graphiques |
Le present´ paragraphe decrit´ la representation´ en fonction des etats´ du LDS/GR et des el´ ements´ graphiques utilises.´
|
Le § D.5.4.1 contient des observations d'ordre gen´ eral´ sur la |
representation´ en fonction des |
etats:´ |
Le § D.5.4.2 explique la description d'etats´ au moyen d'el´ ements´ graphiques.
D.5.4.1 Observations d'ordre gen´ eral´ sur la representation´ en fonction des etats´
Le LDS/GR offre trois versions differentes´ pour decrire´ un diagramme de processus.
exclusivement par des symboles d'action explicites.
La seconde est appelee´ version du LDS/GR orientee´ vers les etats´ ou extension graphique du LDS orientee´ vers
qu'implicitement, par les differences´ entre les etats´ de depart´ et d'arrivee.´
On trouvera des exemples de ces trois versions dans l'annexe E du present´ fascicule.
La version orientee´ vers les transitions convient lorsque la sequence´ des actions presente´ plus d'importance que la description detaill´ ee´ des etats.´
l'explication graphique intuitive est souhaitable et qu'il est interessant´ de conna| tre les ressources ainsi que leurs relations avec les etats.´
Les illustrations d'etat´ sont gen´ eralement´ exprimees´ par des el´ ements´ graphiques indiquant les ressources
|
el´ ements´ graphiques |
graphiques appropries;´ l'utilisateur peut donc employer cette representation´ |
pour n'importe quelle application |
et les descriptions detaill´ ees´ des etats.´
D.5.4.2 Illustration d'etat´ et el´ ement´ graphique
D.5.4.2.1 Element´ graphique et texte qualificatif
Si l'on a choisi l'option illustration d'etat,´ celle-ci se compose d'el´ ements´ graphiques et d'un texte qualificatif,
Cette combinaison rend comprehensibles´ les illustrations d'etat.´ A titre d'exemple, la figure D-5.4.1 a) donne la
numerotation´ emettant´ un signal permanent vers l'environnement.
A noter que les signaux de sortie (signaux non permanents) et les ressources pertinentes ne sont pas decrits´ dans les illustrations d'etat;´ les signaux de sortie peuvent | tre decrits´ dans un diagramme de transition.
L'exemple c) montre un temporisateur dont l'expiration est toujours represent´ ee´ par une entree.´ A noter que l'illustration graphique recommandee´ pour le temporisateur comporte le signal d'entree´ pertinent t1.
Le dernier exemple, d), signifie qu'un enregistreur de messages vocaux est en cours de fonctionnement.
Chaque illustration d'etat´ doit comporter un nombre suffisant d'el´ ements´ graphiques afin de montrer:
a) quelles ressources le processus met en oeuvre au cours de l'etat´ represent´ e.´ Exemples: trajets de commutation, recepteurs´ de signalisation, emetteurs´ de signaux permanents et modules de commutation;
b) s'il y a en ce moment un ou plusieurs temporisateurs qui contr| lent le processus;
cours et quels abonnes´ sont taxes´ au cours de cette phase de l'appel;
|
relation avec des ressources du processus pendant l'etat´ en cours; e) les signaux permanents de sortie qui sont emis´ dans cet etat;´ f ) la relation entre les signaux et ressources existants dans l'etat;´ g) l'inventaire des ressources concernant l'etat´ en cours du processus. |
|
Figura D-5.4.1, (N), p. 1 |
||||||
|
D.5.4.2.3 Exemple A titre d'exemple d'application des principes exposes´ |
ci-dessus, considerons´ |
l'etat´ |
de la figure D-5.4.2. On peut |
|||
|
voir que, dans cet etat:´ |
|
organes; b) un |
un temporisateur t0 surveille le processus; |
||
|
c) aucune d) l'abonn |
aucune taxation n'est en cours; l'abonne´ est identifie´ comme l'abonne´ A mais aucune autre information de categorie´ |
n'est prise en |
|
|
consideration;´ |
e) les signaux d'entree´ suivants sont attendus: A on hook (A raccroche),´ digit (chiffre) (chiffre numerot´ e)´
f ) le signal permanent de sortie DT (tonalite´ de numerotation)´ a et´ e´ mis avant cet etat´ et pendant celui-ci.
|
D.5.4.2.4 Verification´ de la coherence´ de diagrammes LDS avec el´ ements´ graphiques |
Figure D-5.4.2, (N), p. 2 |
d'informations; cependant, l'identification de la serie´ exacte d'operations´ accomplies au cours de la transition exige un
|
En outre, une simple observation de l'illustration d'etat´ |
ne permet pas de determiner´ |
l'ordre des actions dans la |
directement commandes´ par ce processus. Par exemple, le processus d'appel partiellement specifi´ e´ dans la figure D-5.4.3 peut allouer ou liberer´ l'emetteur´ de tonalite´ d'appel, l'emetteur´ de sonnerie et les trajets de conversation; il peut egalement´ declencher´ ou arr| ter le temporisateur T4, mais il ne peut commander directement la condition du combine´ de l'abonne.´
|
normalement inlus dans une illustration d'etat:´ a) soit parce qu'ils indiquent les ressources et l'etat´ |
de l'environnement concernes´ |
par le signal d'entree´ |
du |
|||
|
processus pendant l'etat´ donne;´ b) soit pour ameliorer´ l'intelligibilite´ du diagramme. D.5.4.2.5 Utilisation du symbole <<temporisateur>> |
Que l'on emploie ou non des el´ ements´ graphiques, l'expiration d'un delai´ de temporisation est toujours represent´ ee´ par une entree.´
La presence´ d'un symbole de temporisateur dans une illustration d'etat´ implique qu'un temporisateur fonctionne pendant cet etat.´
|
Conformement´ au principe gen´ eral´ |
expose´ dans les Recommandations, le demarrage,´ |
Figure D-5.4.3, (N), p. 3 l'arr| t, le redemarrage´ et |
a) pour montrer qu'une temporisation commence au cours d'une transition donnee,´ le symbole
b) inversement, pour montrer qu'une temporisation s'arr| te au cours d'une transition, le symbole temporisateur doit appara| tre sur l'illustration d'etat´ qui correspond au debut´ de cette transition et non sur celle qui
c) pour montrer qu'une temporisation est relancee´ au cours d'une transition un symbole explicite de t| che doit | tre represent´ e´ dans cette transition (on en voit deux exemples sur la figure D-5.4.4);
etat´ dont l'illustration porte le symbole <<temporisateur>> correspondant. Il peut naturellement arriver que plusieurs
|
D.5.5 |
Diagrammes auxiliaires |
Figure D-5.4.5, (N), p. 5 |
Pour faciliter la lecture et la comprehension´ de diagrammes de processus de grande taille et/ou complexes, l'auteur peut y ajouter des diagrammes auxiliaires informels. De tels documents ont pour but de donner une description synoptique ou simplifiee´ du comportement du processus (ou d'une partie de celui-ci). Les documents auxiliaires ne
On trouvera dans la presente´ section des exemples de certains diagrammes auxiliaires couramment utilises,´
notamment des diagrammes synoptiques d'etat,´ des matrices etat/signal,´ et des diagrammes de sequencement.´ (Le diagramme en arbre de bloc decrit´ au § D.4.4 est egalement´ un diagramme auxiliaire.)
D.5.5.1 Diagramme synoptique d'etat´
Son objectif est de donner une vue d'ensemble des etats´ d'un processus, et d'indiquer quelles transitions sont possibles entre eux. Etant donne´ qu'il s'agit de donner un apercu,¸ l'on peut negliger´ les etats´ ou les transitions de peu d'importance.
symboles de debut´ et d'arr| t.
Le symbole d'etat´ doit indiquer le nom de l'etat´ ref´ erenc´ e.´ Plusieurs noms d'etat´ peuvent | tre inscrits dans le symbole, et il est possible d'employer un asterisque´ (*) pour designer´ tous les etats.´
nom du signal ou de l'ensemble de signaux qui declenchent´ la transition.
On trouvera dans la figure D-5.5.1 un exemple de diagramme synoptique d'etat.´
|
Figure D-5.5.1, (MC), p. 6 |
||
|
Il est possible de repartir´ |
sur plusieurs diagrammes le diagramme synoptique d'etat´ d'un processus; chacun des alors sur un aspect particulier, comme <<cas normal>>, traitement en cas de |
|
|
Figure D-5.5.2, (N), p. 7 |
|
D.5.5.2 Matrice etat/signal´ La matrice etat/signal´ doit servir |
doit servir de document <<preliminaire>>´ |
a un diagramme de processus important. Elle |
Le diagramme se compose d'une matrice bidimensionnelle; celle-ci presente´ sur un axe tous les etats´ d'un processus, et sur l'autre tous les signaux d'entree´ valides d'un processus. L'etat´ suivant est donne´ pour chaque el´ ement´ de matrice, de m| me que les sorties possibles au cours de la transition. Une ref´ erence´ peut | tre indiquee´ pour permettre de trouver la combinaison donnee´ par les indices, si elle existe.
|
initial du processus. |
||
|
Figure D-5.5.3, (MC), p. 8 |
||
|
Il est possible de fractionner la matrice en sous-parties reparties´ Les signaux et les etats´ doivent | tre de pref´ erence´ regroupes´ de fa |
sur plusieurs pages. Les ref´ erences´ sont celles de facon¸ que chaque partie de la matrice porte sur |
|
|
un aspect particulier du comportement du processus. D.5.5.3 Diagramme de sequencement´ |
ou plusieurs processus et leur environnement.
evidence.´
Les colonnes du diagramme indiquent les entites´ en communication (services, processus, blocs ou l'environnement).
Leurs interactions sont illustrees´ par un ensemble de lignes flech´ ees,´ dont chacune represente´ un signal ou un ensemble de signaux.
|
On peut annoter chaque sequence´ |
Figure D-5.5.4, (N), p. 9 afin de faire appara| tre clairement l'ensemble d'informations echang´ ees.´ |
On peut placer un symbole de decision´ dans les colonnes pour indiquer que la sequence´ suivante est valide si la condition indiquee´ est vraie. Dans ce cas, le symbole de decision´ appara| t gen´ eralement´ plusieurs fois; il indique les differentes´ sequences´ produites par chacune des valeurs de la condition.
Ce diagramme peut representer´ la totalite´ ou seulement un sous-ensemble significatif des sequences´ de signaux echang´ es.´
La representation´ de l'interaction reciproque´ des services resultant´ de la subdivision d'un processus represente´
|
une application utile de ce type de diagramme. Les diagrammes de sequencement´ ne comprennent gen´ eralement´ |
pas toutes les sequences´ |
possibles; ils |
D.6 Definition´ des donnees´ en LDS
D.6.1 Directives applicables aux donnees´ en LDS
On trouvera dans la presente´ section des renseignements complementaires´ sur les concepts definis´ au § 5 de la Recommandation concernant le LDS. La principale difference´ entre la presente´ section et l'ancienne
avec l'ISO. Certains des mots cles´ ont et´ e´ modifies´ et des adjonctions ont et´ e´ faites mais la coherence´ de la semantique´ a et´ e´ assuree´ avec le Livre rouge. L'emploi des donnees´ decrites´ aux § 2, 3 et 4 de la nouvelle
Recommandation (auparavant Z.101-Z.103) est reste´ tel quel.
D.6.1.1 Introduction gen´ erale´
Les types de donnees´ du LDS sont fondes´ sur l'approche de <<types de donnees´ abstraits>>: on ne decrit´ pas la
|
valeurs. Lorsque l'on definit´ des donnees´ |
abstraites, chaque segment de la definition,´ appelee´ <<definition´ |
de type |
partielle>> est introduit par le mot-cle´ NEWTYPE. Chaque definition´ de type partielle a une incidence sur les autres,
|
leur ensemble constitue, avec les definitions´ de niveau superieur,´ une definition´ de type de donnees.´ En substance, la definition´ de type de donnees´ comprend trois parties: a) definitions´ de sortes; b) definitions´ d'operateurs;´ c) equations.´ |
Cela signifie qu'en |
Chacune de ces parties fait l'objet d'explications dans les paragraphes qui suivent. La definition´ de type de donnees´ est structuree´ en definitions´ de type de donnees´ partielles, chacune introduisant une sorte. Les definitions´
|
d'operateurs´ D.6.1.2 |
et les equations´ recouvrent les definitions´ de type de donnees´ Sortes |
partielles. |
|
} |
Une sorte est un ensemble de valeurs qui peut avoir un nombre fini ou infini d'el´ ements´ mais ne peut | tre vide. Exemples: a) l'ensemble de valeurs de la sorte booleenne´ est { rue (vrai), False (faux } b) l'ensemble de valeurs de la sorte Natural (naturel) est l'ensemble infini des nombres naturesls { , 1, 2, . | |
c) l'ensemble de valeurs de la sorte Couleur primaire est { ert, Rouge, Ble }
Tous les el´ ements´ d'une sorte ne doivent pas | tre directement fournis par l'utilisateur (cela exigerait un temps
NEWTYPE est directement suivi par le nom de la sorte (certaines autres possibilites´ seront indiquees´ plus loin). Ce nom est surtout utilise´ dans les definitions´ d'operateurs,´ comme explique´ au § D.6.1.3, et dans les declarations´ de variables.
D.6.1.3 Operateurs,´ litteraux´ et termes
a) par une enum´ eration:´ les valeurs sont definies´ dans la section des litteraux;´
b) par des operateurs:´ les valeurs sont donnees´ comme les resultats´ d'<<applications>> d'operateurs;´
c) par une combinaison d'enum´ erations´ et d'operateurs.´
l'aide d'equations.´ Les paragraphes qui suivent traitent des litteraux,´ des operateurs´ et des termes; le § D.6.1.4 traite des equations.´
D.6.1.3.1 Litteraux´
Les litteraux´ sont des valeurs enum´ er´ ees´ d'une sorte. Une definition´ de type partiel ne doit pas necessairement´
comporter de litteraux:´ tous les el´ ements´ de la sorte peuvent | tre definis´ au moyen d'operateurs.´ Les litteraux´ peuvent | tre consider´ es´ comme des operateurs´ depourvus´ d'arguments. Une relation entre les litteraux´ peut | tre exprimee´
Exemples:
|
definition´ NEWTYPE LITERALS . | | ENDNEWTYPE |
du type booleen´ se presente´ NEWTYPE Boolean LITERALS True, False . | | ENDNEWTYPE Boolean; |
comme suit: |
au moyen de ce litteral´ et d'operateurs;´
NEWTYPE Primary colour
LITERALS Red, Green, Blue
. | |
ENDNEWTYPE Primary colour;
|
D.6.1.3.2 Operateurs´ Un operateur´ est |
est une fonction mathematique´ |
qui met en concordance une ou plusieurs valeurs (eventuellement´ |
les sortes de leur ou leurs arguments et la sorte de resultat´ sont egalement´ indiquees´ (on parle de signature des operateurs).´
|
Exemples: a) |
Exemples: a) dans le type booleen,´ un operateur´ appele´ <<not>> peut | tre defini;´ il aura un argument de sorte booleen´ |
||
|
et egalement´ NEWTYPE LITERALS OPERATORS . | | ENDNEWTYPE b) |
un resultat´ de sorte booleen.´ Dans la definition´ du type booleen,´ il se presente´ comme suit: NEWTYPE Boolean LITERALS True, False OPERATORS <<Not>>: Boolean->Boolean; . | | ENDNEWTYPE Boolean; b) l'operateur´ susmentionnne´ necessaire´ pour construire tous les nombres naturels est Next. Cet operateur´ |
prend un argument de sorte naturelle et donne une valeur naturelle (la valeur superieure´ suivante) en tant que resultat;´
c) il est possible de definir´ pour des couleurs un nouveau type qui n'a pas de litteraux´ mais utilise des litteraux´ de la sorte couleur primaire et certains operateurs:´
NEWTYPE Color
OPERATORS
Take: Primary colour->Colour;
Mix: Primary colour, Colour->Colour;
. | |
ENDNEWTYPE Colour;
melanger´ plusieurs couleurs primaires afin d'obtenir d'autres couleurs.
D.6.1.3.3 Termes
A l'aide de litteraux´ et d'operateurs,´ il est possible de construire comme suit l'ensemble des termes:
1) Rassembler tous les litteraux´ dans un ensemble de la sorte dans laquelle ils sont definis´ -- chaque litteral´
est un terme.
|
les combinaisons possibles de termes de la sorte correcte cre´ es´ prec´ edemment:´ a) pour la sorte <<Boolean>>, l'ensemble de litteraux´ est { rue (vrai), False (faux } Le resultat´ |
de cette |
|
|
etape´ est { ot (True), Not (False } parce que nous avons seulement l'operateur´ Not (non); b) pour la sorte <<Natural>>, le resultat´ de cette etape´ est { ext(0 } |
c) pour la sorte <<Colour>> l'ensemble de litteraux´ est vide mais le resultat´ de cette etape´ est { ake(Red), Take(green), Take(Blue }
3) Les termes des ensembles cre´ es´ au cours de l'etape´ prec´ edente´ sont tous la sorte du resultat´ de l'operateur´ applique;´ par exemple, tous les resultats´ de l'operateur´ Not sont de la sorte booleenne.´ Alors, on reunit´
tous les ensembles de la m| me sorte, aussi bien des ensemble initiaux que les ensembles nouvellement cre´ es:´
a) pour la sorte booleenne,´ on obtient l'ensemble { rue, False, Not(True), Not(False }
b) pour les nombres naturels cette etape´ donne l'ensemble { , Next(0 }
de termes:
|
a) l'ensemble de termes booleens´ gen´ er´ es´ par les litteraux´ True et False et l'operateur´ b) l'ensemble des termes naturels gen´ er´ es´ par le litteral´ 0 et l'operateur´ Next |
Not est { rue, False, Next est { , Next(0), |
|
|
Next(Next(0)), Next(Next(Next(0))), . | | } |
c) l'ensemble des termes de couleur gen´ er´ es´ par les litteraux´ Red, Green et Blue de la sorte Primary colour
Take(Green)), Mix(Red, Take(Blue)), Mix(Green, Take(Red)), Mix(Green, Take(Green)), Mix(Green, Take(Blue)), Mix(Blue, Take(Red)), Mix(Blue, Take(Green)), Mix(Blue, Take(Blue)), . | | }
D.6.1.4 Equations et axiomes
valeurs de la sorte. A titre d'exemple, il existe deux valeurs booleennes´ mais l'ensemble de termes booleens´ a un
|
Deux types particuliers d'equations,´ |
les axiomes et les equations´ |
conditionnelles, font l'objet des § D.6.1.4.2 |
mot-cle´ AXIOMS. Ce mot-cle´ a et´ e´ conserve´ pour des raisons d'ordre historique.
D.6.1.4.1 Equations
Une equation´ indique quels sont les termes consider´ es´ comme designant´ la m| me valeur. Une equation´ relie deux termes separ´ es´ par le symbole d'equivalence´ ==.
|
Par exemple <<Not(True) == False>> indique que les termes Not(True) et False sont equivalents;´ |
chaque fois |
Dans certaines equations,´ l'ensemble de termes est divise´ en sous-ensembles discontinus de termes qui designent´
la m| me valeur. Ces sous-ensembles sont appeles´ classes d'equivalence.´ Dans le langage courant, les classes d'equivalence´ sont identifiees´ aux valeurs.
|
Exemples: a) L'ensemble de termes de la sorte booleenne´ |
est divise´ en deux classes d'equivalence´ |
de termes par les |
||
|
deux axiomes suivants: Not(True) == False; Not(False) == True; Les classes d'equivalence´ qui en resultent´ sont: |
{ rue, Not(False), Not(Not(True)), Not(Not(Not(False))),
Not(Not(Not(Not(True)))), Not(Not(Not(Not(Not(False))))), . | | }
et
{ alse, Not(True), Not(Not(False)), Not(Not(Not(True))),
Not(Not(Not(Not(False)))), Not(Not(Not(Not(Not(True))))) } . | |
Ces deux classes d'equivalence´ sont identifiees´ aux valeurs True (Vrai) et False (Faux);
|
b) Dans le cas de couleurs, on peut desirer´ specifier´ que le Mix(Red, Take(Red)) == Take(Red); |
que le melange´ d'une couleur primaire avec une |
Mix(Red, Mix(Red, Take(Green))) == Mix(Red, Take(Green));
Mix(Red, Mix(Red, Take(Blue))) == Mix(Red Take(Blue));
Mix(Red, Mix(Green, Take(Red))) == Mix(Green, Take(Red));
Mix(Red, Mix(Blue, Take(Red))) == Mix(Blue, Take(Red)); etc.
Cela demande beaucoup de travail car des equations´ similaires apparaissent pour toutes les permutations de Red, Green et Blue. C'est pourquoi le LDS comporte la construction FOR-ALL qui introduit les noms de valeur
tre decrites´ en quelques lignes sous la forme suivante:
FOR ALL p1, p2 IN Primary colour
|
/*1*/ /*2*/ /*3*/ /*4*/ /*4*/ /*5*/ /*6*/ /*4*/ |
Mix(p1, Take(p1)) == Take(p1); Mix(p1, Mix(p1, Take(p2))) == Mix(p1, Take(p2)); Mix(p1, Mix(p2, Take(p1))) == Mix(p2, Take(p1)); Mix(p1, Take(p2)) == Mix(p2, Take(p1)); FOR ALL c IN Colour ( Mix(p1, Mix(p2, c)) == Mix(p2, Mix(p1, c)); ( Mix(p1, Mix(p2, c)) == Mix(Mix(p1, Take(p2)) c)) ) |
|
equations´ Les |
ne se contredisent pas mutuellement. Les equations´ susmentionnees´ creent´ 7 classes d'equivalence´ |
dans l'ensemble de termes de la sorte Colour, de |
sorte qu'avec ces equations,´ il y a sept valeurs de couleurs. Les termes suivants sont dans les classes d'equivalence´
|
differentes:´ |
|||
|
Take(Red), Take(Green), Take(Blue), Take(Red, Take(Green)), Mix(Green, Take(Blue)), Mix(Blue, Take(Red)), Mix(Blue, Mix(Green, Take(Red))). |
Dans les exemples d'equations´ comportant la construction FOR-ALL, appelees´ equations´ explicitement quantifiees,´ l'information que p1 et p2 sont des identificateurs de valeur de sorte Primary colour est redondante;
|
quantification si la sorte des identificateurs de valeur peut | tre deduite´ Exemple: Les equations´ 4 et 5 ci-dessus sont les m| mes que: Mix(p1, Take(p2)) , c)) == Mix(p2, Take(p1)); Mix(p1, Mix(p2, c)) == Mix(p2, Mix(p1, c)); D.6.1.4.2 Axiomes |
du contexte. Dans ce cas, on dit que l'equation´ |
Exemple:
Admettons qu'un operateur´ soit defini´ pour une couleur type: Contains: Colour, Primary colour-> Boolean; ce
contraire. Voici un exemple des equations´ dont il s'agit:
FOR ALL p IN Primary colour
|
( Contains(Take(p), p) FOR ALL c IN Colour ( Contains(Mix(p,c), p) |
== True; == True) |
|||
|
) |
La partie <<== True>> de ces equations´ peut | tre omise et les resultats´ sont appeles´ axiomes. Des axiomes
valeur True (vrai) de la sorte booleenne.´
|
D.6.1.4.3 Equations conditionnelles Les equations´ conditionnelles constituent un moyen d'ecrire´ des equations´ qui ne Exemple: |
qui ne sont valables que dans |
FOR ALL x, z IN Real
( z/= 0 == True ==> (x/z) * z == x)
|
sorte Real etait´ divisee´ par 0. Si l'on veut specifier´ FOR ALL x, z IN Real ( z = 0 == True ==> (x/z) * z == . | | ). |
ce qui se passe en cas de division par zero,´ |
il faudrait creer´ |
une |
En pareil cas, cependant, il est recommande´ de placer un <<terme conditionnel>> du c| te´ droit, pour faciliter la lecture. Dans le cas ci-dessus l'equation´ deviendrait:
|
FOR ALL x, z IN Real ( (x/z) * z == IF z/=0 ( (x/z) * z == THEN x |
x |
|
( (x/z) * z == ELSE . | | ( (x/z) * z == FI ) D.6.1.5 Informations complementaires |
. | | ementaires´ concernant les equations´ et les axiomes |
Les deux sections qui suivent traitent de certaines difficultes´ que l'on peut rencontrer lorsque des operateurs´
d'une equation.´
D.6.1.5.1 Coherence´ de la hierarchie´
En un point quelconque d'une specification´ en LDS, il existe une seule et unique definition´ de type de donnees.´
Cette definition´ de type de donnees´ contient les sortes, operateurs´ et equations´ pred´ efinis´ et l'ensemble des sortes, operateurs´ et equations´ definis´ par l'utilisateur dans les definitions´ de type partielles visibles en ce point. (C'est la raison pour laquelle un texte NEWTYPE . | | ENDNEWTYPE est appele´ definition´ de type partielle .)
|
Il en resulte´ |
Il en resulte´ certaines consequences´ pour les definitions´ de type aux niveaux inferieurs.´ |
Cette influence sur le |
||
|
type pourrait Il n'est |
pourrait | tre peu souhaitable. A titre d'exemple, on pourrait specifier´ de facon¸ erronee´ Il n'est pas admis de donner des equations´ telles que: |
que deux termes sont |
equivalentes;´
l'utilisateur contenant un operateur´ ayant un resultat´ pred´ efini´ doivent rapporter tous les termes produits par cet
Exemples:
a) Si, pour une raison quelconque, on donne l'axiome:
FOR ALL n, m IN Integer
( (Fact(n) = Fact(m)) => (n = m))
afin de specifier´ que si les resultats´ de l'operateur´ Fact sont les m| mes, les arguments sont alors les m| mes. (A noter que => est l'implication booleenne;´ cela a peu de relation avec le signe d'equation´ conditionnellle ==>). Ainsi, par accident, les valeurs sont unifiees.´ Des equations´ des exemples prec´ edents´ on peut deduire´ que Fact(0) = Fact(1) et
me resultat´ de l'operateur´ Fact sur n et m implique n = m. En Led:
FOR ALL n, m IN Integer
|
( n/=0, m/=0 ==> (Fact(n) = Fact(m)) => (n = m)) A noter que cette derniere equation´ n'ajoute rien a la semantique´ des nombres entiers; c'est un theoreme´ |
qui |
|
peut | tre deduit´ des autres |
equations.´ |
Par ailleurs, l'adjonction d'une equation´ prouvable ne presente´ |
pas |
b) Admettons que l'on decouvre´ la necessit´ e´ d'un operateur´ pour les factorielles lors de la specification´ d'un type donne.´ Dans la definition´ de type partielle de ce type, l'operateur´ Fact est introduit:
|
Fact: Integer -> Integer; et les equations´ suivantes sont donnees´ |
pour definir´ |
cet operateur:´ |
||||
|
Fact(0) == 1; FOR ALL n IN Integer ( n > 0 ==> Fact(n) == n * Fact(n--1)) |
Ces equations´ ne definissent´ pas Fact(--1) et ainsi, c'est un terme de la sorte Integer qui n'a pas de relation avec d'autres termes de cette sorte. En consequence,´ Fact(--1) est une nouvelle valeur de la sorte entier (et il en va de m| me pour Fact(--2), Fact(--3), etc). Cela n'est pas admis. L'exemple b) du § D.6.1.5.3 donne une definition´ correcte de fact.
D.6.1.5.2 Egalite´ et inegalit´ e´
|
Dans chaque type, les operateurs´ d'egalit´ "=": S, S -> Boolean; "/=": S, S -> Boolean; (Remarque -- Les guillemets specifient´ que |
d'egalit´ e que |
e´ et d'inegalit´ e´ sont implicites. Ainsi, si une definition´ que = et/= sont utilises´ comme operateurs´ infixes.) |
de type partielle |
L'operateur´ d'egalit´ e´ presente´ les propriet´ es´ previsibles:´
|
a = a, a = b a = b a = b a = b Ces |
a = a, a = b => b = a, a = b AND b = c => a = c, a = b => a == b, a = b => op(a) = op(b) for all operators op. Ces propriet´ es´ ne sont pas ecrites´ en syntaxe LDS |
LDS et ne doivent pas | tre enonc´ ees´ dans des axiomes ou des |
|
|
equations´ |
car elles sont implicites. La valeur booleenne´ |
obtenue lorsque cet operateur´ est applique´ est True (vrai) si |
les termes de la partie gauche et de la partie droite sont de m| me classe d'equivalence;´ sinon la valeur obtenue est False (faux). S'il n'est pas explicitement specifi´ e,´ que la valeur est True (vrai) ou False (faux), la specification´ est
Pour l'operateur´ d'inegalit´ e,´ c'est par une equation´ en LDS que l'on peut le mieux expliquer la semantique:´
FOR ALL a, b IN S
( a/= b == Not(a = b))
Il n'y a pas de difference´ entre l'egalit´ e´ et l'equivalence.´ Deux termes qui sont equivalents´ designent´ la m| me valeur et l'operateur´ d'egalit´ e´ entre eux donne le resultat´ True (vrai).
|
D.6.1.5.3 Erreur On a juge´ necessaire,´ pour les exemples qui precedent,´ de specifier´ que l'application de l'operateur´ |
a certaines |
valeurs est consider´ ee´ comme une erreur. Le LDS a un moyen de le specifier´ formellement: l'el´ ement´ ERROR.
est indefini>>.´
operateur.´
Lorsque Error resulte´ de l'application d'un operateur´ et que cette application est un argument d'un autre operateur,´ l'application d'operateur´ exterieur´ porte egalement´ Error dans son resultat´ (propagation-d'erreurs). Dans un terme conditionnel, la partie THEN ou la partie ELSE est evalu´ ee,´ de sorte que l'une d'elle peut | tre une erreur sans que celle-ci soit evalu´ ee´ (etant´ donnee´ que l'autre partie de l'alternative est evalu´ ee).´
Exemples:
a) Dans l'exemple de division de valeurs de sorte Real, les poids peuvent | tre remplaces´ comme suit:
|
FOR ALL x, z IN Real ( (x/z) * z == IF z/=0 ( (x/z) * z == THEN x ( (x/z) * z == ELSE Error! ( (x/z) * z == FI ) Pour plus de clarte,´ on pourrait ajouter: FOR ALL x IN Real ( x/0 == Error!) b) Dans l'exemple comportant l'operateur´ Fact, on pourrait specifier´ que |
que l'application de cet operateur´ sur |
|
des entiers negatifs´ est consider´ ee´ comme une erreur (Error). Cela permet d'eviter´ n < 0 ==> Fact(n) == Error!; |
que Fact(--1), Fact(--2), . | | ne |
Fact(0) == 1;
n > 0 ==> Fact(n) == Fact(n--1) * n;
|
le terme conditionnel devrait | tre utilise´ s'il y a deux cas complementaires;´ Fact(n) == IF n > 0 Fact(n) == THEN Fact(n--1) * n Fact(n) == ELSE IF n = 0 Fact(n) == ELSE THEN 1 Fact(n) == ELSE ELSE Error! Fact(n) == ELSE FI Fact(n) == FI D.6.2 Gen´ erateurs´ et heritage´ |
l'embo| tage de termes conditionnels rend |
Le present´ paragraphe traite de deux constructions qui peuvent | tre utilisees´ pour specifier´ des types ayant des parties communes. Le gen´ erateur´ specifie´ non un type mais un schema,´ qui devient un type lorsque les sortes, operateurs,´ litteraux´ et constantes formels sont remplaces´ par des termes reels.´
et d'operateurs´ peuvent | tre renommes´ et il est possible de specifier´ des litteraux,´ des operateurs´ et des equations´
supplementaires.´
D.6.2.1 Gen´ erateurs´
Une definition´ de gen´ erateur´ definit´ un schema´ parametr´ e´ par des noms formels de sortes, de litteraux,´ de
consultation, des tableaux.
partie de la definition´ de type de cet ensemble d'entiers.
|
Toutes les equations´ |
Figure D.6.2.1 (comme tableau) [T37.100], p. 10 ont une quantification implicite. La premiere equation´ indique que la suppression d'un |
ensemble s'il est le dernier el´ ement´ ajoute´ ou s'il se trouvait dans l'ensemble avant l'adjonction du dernier el´ ement.´ La
Dans l'exemple de la figure D-6.2.1 Int set (ensemble d'entiers) n'est qu'un exemple d'un ensemble et si l'on a
plusieurs fois. La figure D-6.2.2 presente´ le gen´ erateur.´ (A noter que les noms de sortes formels sont introduits par le mot cle´ TYPE, cela uniquement pour des raisons d'ordre historique.)
formel.
Figure D.6.2.2 (comme tableau) [T38.100], p. 11
Avec ce gen´ erateur,´ le type Int set peut | tre construit comme suit:
NEWTYPE Int set Set (Integer, empty int set)
ENDNEWTYPE Int set;
Si l'on compare les figures D-6.2.1 et D-6.2.2, on constate que:
a) GENERATOR et ENDGENERATOR sont remplaces´ par NEWTYPE et ENDNEWTYPE respectivement;
supprimes;´
c) Set, Item et empty set sont remplaces´ dans tout le gen´ erateur´ par Int set, Integer et empty int set,
Ainsi, il n'y a en fait aucune difference´ entre cet Int set et celui de la figure D-6.2.1, mais . | |
NEWTYPE PId-set Set(PId, empty pid set)
ENDNEWTYPE PId set;
-- si l'on a besoin d'un ensemble d'abonnes,´ dans lequel les abonnes´ sont represent´ es´ par un type
NEWTYPE Subscr set Set(Subscr, empty subscr set)
ENDNEWTYPE Subscr set;
Cela permet d'economiser´ du papier, de plus, le travail est facilite´ parce qu'il suffit de penser une fois aux
Exemple:
Cet exemple montre un gen´ erateur´ utilisant une sorte, un operateur,´ un litteral´ et une constante formels. Il decrit´
une rangee´ d'el´ ements´ ayant une longueur maximale max length. La sorte comprend un litteral´ designant´ la rangee´
|
rangees,´ le choix d'une sous-rangee´ et la determination´ de la longueur d'une rangee.´ Ce dernier operateur´ |
est rendu |
GENERATOR Row (TYPE Item, OPERATOR Length, LITERAL Empty,
CONSTANT max length)
|
LITERALS Empty OPERATORS Length: Row -> Integer; Insert: Row, Item, Integer -> Row; Delete: Row, Integer, Integer -> Row; "//": Row, Row -> Row; Select: Row, Integer, Integer -> Row /* and other operators relevant for rows of items */ AXIOMS /* The equations for the operators above, among * / * which the following two (or equivalents) */ |
Length(r) = max length ==> Insert(r, itm, int) == Error!;
Length(r1) + Length(r2) > max length ==> r1//r2 == Error!
ENDGENERATOR Row;
A noter que l'operateur´ formel Length (longueur) et le litteral´ Empty (vide) sont donnes´ une fois de plus dans le corps du gen´ erateur´ parce qu'ils sont renommes´ lors de leur instantiation. Dans le cas de l'operateur,´ les arguments et
pages et des livres, comme suit:
NEWTYPE Line Row(Character, Width, Empty line, 80)
ENDNEWTYPE Line;
NEWTYPE Page Row(Line, Length, Empty page, 66)
ENDNEWTYPE Page;
NEWTYPE Book Row(Page, Nr of pages, Empty book, 10000)
ENDNEWTYPE Book;
D.6.2.2 Heritage´
L'heritage´ constitue un moyen d'etablir´ toutes les valeurs de la sorte dite parente, certains ou tous les operateurs´
du type parent et toutes les equations´ du type parent. Pour les litteraux´ et les operateurs,´ il existe une possibilite´ de les
contexte qu'il s'agit d'un autre type, m| me si les litteraux´ sont les m| mes.
que les operateurs´ sont encore presents´ signifie que toutes les equations´ du type parent sont encore presentes´ (avec des operateurs´ portant un autre nom). Cela garantit que les valeurs parentes sont herit´ ees.´
Avec la possibilite´ d'emp| cher l'utilisation d'un operateur´ (lorsqu'il n'est pas herit´ e),´ on assure la possibilite´
equations´ comme dans un type ordinaire. Toutefois, il faut faire attention aux nouveaux litteraux´ et aux confusions possibles entre operateurs´ herit´ es´ et ajoutes.´
tre compatibles avec les equations´ comportant des operateurs´ herit´ es´ et non herit´ es.´
a) Supposons que le newtype couleur est complet et disponible. Ce type est fonde´ sur le choix et le melange´
quelque chose de semblable pour le choix et le melange´ de peinture.
uniquement deux remplacements:
NEWTYPE Colour
devient
GENERATOR Colour (TYPE Primary colour)
2) le mot-cle´ ENDNEWTYPE devient ENDGENERATOR.
Primary colour soit appelee´ Light primary, et que la sorte Paint primary soit definie´ comme:
NEWTYPE Paint primary
LITERALS Red, Yellow, Blue
ENDNEWTYPE Paint primary;
NEWTYPE Light colours Colour (Light primary) ENDNEWTYPE;
NEWTYPE Paint colours Colour (Paint primary) ENDNEWTYPE;
NEWTYPE Light
INHERITS Light colours
|
OPERATORS (Beam=Take, Mix, Contains) ADDING LITERALS White AXIOMS White == Mix (Red, Mix (Yellow, Beam (Blue))) ENDNEWTYPE Light; |
L'axiome ajoute´ indique que ce litteral´ ajoute´ devient un el´ ement´ de l'ensemble de termes dans lequel les trois couleurs primaires sont melang´ ees.´
Le newtype Palette a les litteraux´ de Paint colours et l'operateur´ Take est remplace´ par Paint (peinture):
NEWTYPE Palette
INHERITS Paint colours
OPERATORS (Paint Take, Mix, Contains)
ENDNEWTYPE Palette;
b) Admettons que l'on veuille etendre´ l'ensemble de types entiers (sorte Int set), introduit dans la section
choses.
el´ ements´ (PId par exemple) et il peut | tre pref´ erable´ de creer´ un newtype ayant la sorte New int set comportant un
NEWTYPE New int set
INHERITS Int set
OPERATORS ALL
ADDING
OPERATORS
Min: New int set-> Integer
AXIOMS
Min(Empty int set) == Error!;
Min(Add(Empty int set, x))==x;
|
Min(Add(Add(nis,x),y))== IF y <Min(Add(nis,x)) THEN y ELSE Min(Add(nis,x)) FI |
ENDNEWTYPE New int set;
l'instantiation de gen´ erateur.´ On en trouvera un exemple au § 5.4.1.12 de la Recommandation.
|
D.6.3 Observations relatives aux equations´ Lorsque l'on introduit un nouveau type de donnees,´ |
il est essentiel d'introduire suffisamment d'equations.´ Dans |
|
|
les paragraphes qui suivent, trois observations sont D.6.3.1 Conditions gen´ erales´ |
present´ ees´ concernant les equations´ qui en faciliteront |
a) chaque operateur´ appara| t au moins une fois dans l'ensemble des equations´ (sauf pour les cas <<pathologiques>>);
|
b) |
tous les enonc´ es´ vrais peuvent | tre tires´ des equations.´ Ils sont soit indiques´ |
comme des axiomes, soit |
Vrai = Faux.
|
Une procedure´ permettant D.6.3.2 Application |
permettant de trouver des equations´ peut | tre exprimee´ de fonctions aux constructeurs |
en LDS informel, comme indique´ dans la |
d'equivalence)´ de la sorte. Dans cette approche, les litteraux´ sont consider´ es´ comme des operateurs´ sans argument.
|
Exemples: a) le type booleen´ a ses litteraux´ |
pour constructeurs; |
||
|
b) le type naturel a le litteral´ |
0 et l'operateur´ Next comme |
constructeurs; un naturel quelconque peut | tre |
c) le gen´ erateur´ pour les ensembles a le litteral´ ensemble vide et l'operateur´ additif comme constructeurs;
d) le type entier peut | tre construit au moyen des litteraux´ 0 et 1, des operateurs´ + et moins unaires.
Figura D-6.3.1, (N), p. 12
A noter qu'il y a parfois plusieurs choix possibles pour l'ensemble de constructeurs. Tout choix sera valable pour le reste de la presente´ section mais les petits ensembles sont gen´ eralement´ les meilleurs.
Ensuite, les fonctions sont traitees´ une par une. Pour chaque argument d'une fonction, seuls sont enum´ er´ es´ tous
faut appliquer la quantification.
Exemples:
0
|
b) empty |
Pour les ensembles, la liste eventuelle´ set |
peut | tre: |
Si, dans le terme de droite d'une equation´ ayant (s,i) du c| te´ gauche, il y a une difference´ entre s etant´ vide ou n'etant´ pas vide, on peut re´ ecrire´ la liste comme suit:
empty set
une combinaison d'arguments tires´ de la liste. Les identificateurs de valeurs de differents´ arguments recoivent¸ des noms differents.´ La procedure´ indiquee´ ci-dessus pour les fonctions peut | tre appliquee´ aux constructeurs; dans ce
Exemples:
a) Pour l'operateur´ de multiplication de nombres naturels portant la signature
|
<<*>>:Natural, Natural -> Natural Cette procedure´ donne la partie de gauche des equations´ |
(incompletes) suivantes. L'utilisateur devra ajouter la |
partie de droite.
|
Next (n) 0*0 == Next (n) 0*Next (n) |
. | | ; == |
. | | ; |
||||
|
Next (n)*0 == Next (n)*Next (m) |
. | | ; == |
. | | ; |
b) Pour les operateurs´ Is in (est dans) et Delete (supprimer, dans le gen´ erateur´ Set (voir le § D.6.2.1),
§ D.6.1.4.2 doit | tre defini´ pour les arguments.
operateur:´
Contains(Take(p),q) ==p=q;
|
Contains(Mix(p,c),q) ==(p=q) OR Contains(c,q); Cette procedure´ de construction peut donner plus d'equations´ |
que cela n'est necessaire,´ |
mais elle est tres s| re. |
Dans l'exemple susmentionne´ de multiplication des nombres naturels, il est vraisemblable que la propriet´ e´ de
La procedure´ decrite´ dans cette section peut | tre appliquee´ en combinaison avec la procedure´ decrite´ dans la
D.6.3.3 Specification´ d'ensemble d'essai
On peut aussi considerer´ les equations´ du point de vue de la mise en oeuvre. Si les operateurs´ sont mis en oeuvre sous la forme de fonctions dans un langage de programmation, les equations´ montrent comment ces fonctions doivent | tre testees.´
la partie droite de cette equation´ et de voir si elles sont equivalentes.´ C'est la construction FOR ALL qui pourrait poser
Au lieu de tif de test peut utiliser FOR ALL i IN Integer
le dispositif de test peut utiliser FOR ALL i IN { (em10,--1,0,1,1 } et proceder´ ainsi dans la plupart des cas.
|
D.6.4 Caracteristiques´ La presente´ section decrit´ |
certains dispositifs du LDS qui sont rarement necessaires´ |
dont on peut pratiquement |
se passer, mais qui rendent quelquefois la t| che plus facile.
|
D.6.4.1 Operateurs´ caches´ Il arrive que l'ensemble des equations´ |
puisse | tre simplifie´ ou rendu plus lisible gr| ce a l'introduction d'un |
operateur´ supplementaire,´ mais cet operateur´ ne devrait pas | tre utilise´ dans les processus. Cela signifie que l'operateur´ est visible de l'interieur´ mais cache´ en dehors de la definition´ de type.
le type herit´ e´ qui doit | tre utilise.´ On peut s'assurer qu'il est correctement employe´ en examinant toutes les declarations´ de variables (aucune variable de sorte introduite par le type cache´ ne doit appara| tre).
Ce qui caracterise´ les operateurs´ caches,´ c'est qu'ils peuvent | tre atteints par une restriction de leur visibilite´ aux
Exemple:
Add(empty set,x)
|
et c'est ainsi que doit le faire chaque utilisateur. Dans les equations,´ |
le specificateur´ peut utiliser un operateur´ |
special,´ |
Mk set!:Item->Set;
defini´ par l'equation:´
Mk set!(itm) == Add(empty set,itm);
qui peut | tre utilise´ dans des definitions´ de type partiel mais non dans le corps de processus en LDS.
|
D.6.4.2 Relations d'ordre Lorsqu'il faut specifier´ une relation d'ordre sur les el´ ements´ |
d'une sorte, cela signifie en gen´ eral´ qu'il faut definir´ |
|
|
quatre operateurs´ (<,<=,>,>=) et les propriet´ es´ mathematiques´ |
ordinaires (transitivite,´ etc.). S'il y a de nombreux Par exemple, le type de donnees´ pred´ efinies´ Character |
|
Le LDS comporte une caracteristique´ qui permet d'abreger´ |
ces definitions´ |
de type longues, peu lisibles et |
d'introduire des operateurs´ de relation d'ordre et les equations´ normales. Lorsque ORDERING est specifi´ e,´ il faut donner les litteraux,´ s'il en existe, dans l'ordre ascendant.
Exemple:
NEWTYPE Even decimal digit
LITERALS 0,2,4,6,8
OPERATORS
ORDERING
ENDNEWTYPE Even decimal digit;
Maintenant, l'ordre 0<2<4<6<8 est implicite.
convient d'en indiquer ici la raison.
Admettons que l'on desire´ l'extension suivante de la sorte Even decimal digit:
NEWTYPE Decimal digit
INHERITS Even decimal digit
|
OPERATORS ALL ADDING LITERALS 1,3,5,7,9 AXIOMS 0<1; 1<2; 2<3; 3<4; 4<5; 5<6; 6<7; 7<8; 8<9 ENDNEWTYPE |
OPERATORS ALL ADDING LITERALS 1,3,5,7,9 AXIOMS 0<1; 1<2; 2<3; 3<4; 4<5; 5<6; 6<7; 7<8; 8<9 Decimal |
digit; |
|
Les axiomes donnes´ 0<2<4<6<8 |
ici ne peuvent | tre omis. Sans ces axiomes, il ne peut y avoir qu'un ordre dit partiel: |
||||
|
et |
|||||
|
1<3<5<7<9. |
|
Avec les axiomes ci-dessus, on obtient un ordre complet: 0<1<2<3<4<5<6<7<8<9 |
|||
|
mais |
avec l'axiome <<9<0>> au lieu de l'ensemble d'axiomes ci-dessus, l'ordre complet serrait le suivant: 1<3<5<7<9<0<2<4<6<8. |
D.6.4.3 Sortes avec champs
Comme indique´ au § 5.4.1.10 de la Recommandation, on peut definir´ une sorte structuree´ sans constructions
supplementaires´ dans le langage.
Une sorte structuree´ devrait | tre utilisee´ lorsqu'une valeur d'objet est formee´ par l'association de valeurs de plusieurs sortes. Chaque valeur de cette association est caracteris´ ee´ par un nom, appele´ nom de champ. La sorte d'un champ est fixe.
Exemples:
NEWTYPE Subscriber
STRUCT numbers Number key;
name Name key;
admin Administrative;
ENDNEWTYPE Subscriber;
NEWTYPE Name key
|
STRUCT name, street Charstring; number Integer; city Charstring; |
ENDNEWTYPE Name Key;
Avec une sorte structuree,´ certains operateurs´ sont definis´ implicitement:
b) les operateurs´ de selection´ de champ, les variables de la sorte structuree´ suivies par un ! et le nom de
l'operateur´ cache´ (§ D.6.4.1).
On trouvera un exemple dans la figure D-6.4.1.
D.6.4.4 Sortes indexees´
Une sorte indexee´ est une sorte pour laquelle le type a pour nom d'operateur´ Extract! (extraction). Dans les types de donnees´ pred´ efinies,´ le gen´ erateur´ Array est un tel type. Array est l'un des exemples les plus courants de type indexe.´
definitions´ de type.
On peut penser que le type Index dans le gen´ erateur´ pred´ efini´ Array doit | tre un type <<simple>> comme Integer, Natural ou Character. Toutefois, il n'y a pas de raison pour qu'une structure comme Name key ne puisse pas
Exemple:
NEWTYPE Subsc data base
Array (Name key, Subscriber)
ENDNEWTYPE Subsc data base;
Les sortes Name key et Subscriber sont celles qui ont et´ e´ definies´ dans la section prec´ edente.´ Supposons qu'il
processus qui comporte aussi une variable Sub db de la sorte Subsc data base. Dans ce processus, l'appel suivant
CALL Bill (Sub db) (. `P.M.`, `Downingstreet`10. `Londres`.)));
|
D.6.4.5 Valeur par defaut´ de variables Comme indique´ dans la section concernant la declaration´ |
de variables (§ D.3.10.1), il est possible d'affecter des |
(presque) toujours la valeur initiale d'une variable. Il existe une caracteristique´ qui permet d'eviter´ d'ecrire´ la valeur initiale pour chaque declaration:´ la clause DEFAULT.
ensemble imaginaire, seront initialisees´ avec empty set.
La notation:
DEFAULT empty set
valeur empty set de cette instantiation, sauf s'il y a une initialisation explicite (voir le § D.3.10.1.)
S'il n'est par s| r que la valeur initiale de toutes les variables d'une sorte soit la m| me, il ne faut pas utiliser la clause DEFAULT, sinon il est difficile d'eviter´ des surprises.
D.6.4.6 Operateurs´ actifs
Les utilisateurs qui connaissent la Recommandation Z.104 de 1984 concernant le LDS pourraient se demander ce qui est arrive´ aux operateurs´ dits actifs. En fait, cette caracteristique´ a et´ e´ supprimee,´ pour les raisons suivantes:
|
a) elle n'est pas necessaire´ car les operateurs´ courants et les procedures´ b) elle compromet la lisibilite´ des equations;´ |
et/ou macros offrent la m| me |