home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-12-12 | 72.9 KB | 2,581 lines |
- .rs
- .\" Troff code generated by TPS Convert from ITU Original Files
- .\" Not Copyright ( c) 1991
- .\"
- .\" Assumes tbl, eqn, MS macros, and lots of luck.
- .TA 1c 2c 3c 4c 5c 6c 7c 8c
- .ds CH
- .ds CF
- .EQ
- delim @@
- .EN
- .nr LL 40.5P
- .nr ll 40.5P
- .nr HM 3P
- .nr FM 6P
- .nr PO 4P
- .nr PD 9p
- .po 4P
-
- .rs
- \v | 5i'
- .sp 1P
- .LP
- D.5.4
- \fIDirectives applicables \*`a la repr\*'esentation en fonction des\fR
- \fI\*'etats et aux \*'el\*'ements graphiques\fR
- .sp 9p
- .RT
- .PP
- Le pr\*'esent paragraphe d\*'ecrit la repr\*'esentation en fonction des
- \*'etats du LDS/GR et des \*'el\*'ements graphiques utilis\*'es.
- .PP
- Le \(sc\ D.5.4.1 contient des observations d'ordre g\*'en\*'eral sur la
- repr\*'esentation en fonction des \*'etats: caract\*'eristiques, applications
- pertinentes et variantes.
- .PP
- Le \(sc\ D.5.4.2 explique la description d'\*'etats au moyen d'\*'el\*'ements
- graphiques.
- .RT
- .sp 1P
- .LP
- D.5.4.1
- \fIObservations d'ordre g\*'en\*'eral sur la repr\*'esentation en fonction\fR
- \fIdes \*'etats\fR
- .sp 9p
- .RT
- .PP
- Le LDS/GR offre trois versions diff\*'erentes pour d\*'ecrire un
- diagramme de processus.
- .PP
- La premi\*`ere est appel\*'ee version du LDS/GR en fonction des
- transitions, dans laquelle les transitions sont d\*'ecrites exclusivement
- par des symboles d'action explicites.
- .PP
- La seconde est appel\*'ee version du LDS/GR orient\*'ee vers les \*'etats ou
- extension graphique du LDS orient\*'ee vers les \*'etats; les \*'etats
- d'un processus
- y sont d\*'ecrits \*`a l'aide d'illustrations d'\*'etats et les transitions
- ne sont
- donn\*'ees qu'implicitement, par les diff\*'erences entre les \*'etats
- de d\*'epart et
- d'arriv\*'ee.
- .PP
- La derni\*`ere est appel\*'ee version mixte; il s'agit d'une combinaison
- des deux versions pr\*'ec\*'edentes.
- .PP
- On trouvera des exemples de ces trois versions dans l'annexe\ E du
- pr\*'esent fascicule.
- .PP
- La version orient\*'ee vers les transitions convient lorsque la s\*'equence
- des actions pr\*'esente plus d'importance que la description d\*'etaill\*'ee
- des
- \*'etats.
- .PP
- La version orient\*'ee vers les \*'etats d\*'ecrit en d\*'etail les \*'etats
- par des \*'enonc\*'es; elle convient donc au cas o\*`u un \*'etat de processus
- pr\*'esente plus
- d'importance que la s\*'equence des actions \*`a l'int\*'erieur de chaque
- transition, alors que l'explication graphique intuitive est souhaitable
- et qu'il est
- int\*'eressant de conna\* | tre les ressources ainsi que leurs relations
- avec les
- \*'etats.
- .PP
- Les illustrations d'\*'etat sont g\*'en\*'eralement exprim\*'ees par des
- \*'el\*'ements graphiques indiquant les ressources pertinentes de l'\*'etat
- en cours du
- processus. Cette version convient \*`a des applications dans lesquelles sont
- d\*'efinis des \*'el\*'ements graphiques appropri\*'es; l'utilisateur peut
- donc employer
- cette repr\*'esentation pour n'importe quelle application en d\*'efinissant des
- \*'el\*'ements graphiques appropri\*'es selon les besoins.
- .PP
- La version mixte convient lorsqu'il faut conna\* | tre \*`a la fois la
- s\*'equence des actions int\*'erieures \*`a chaque transition et les descriptions
- d\*'etaill\*'ees des \*'etats.
- .RT
- .sp 2P
- .LP
- D.5.4.2
- \fIIllustration d'\*'etat et \*'el\*'ement graphique\fR
- .sp 1P
- .RT
- .sp 1P
- .LP
- D.5.4.2.1\ \
- \fIEl\*'ement graphique et texte qualificatif\fR
- .sp 9p
- .RT
- .PP
- Si l'on a choisi l'option illustration d'\*'etat, celle\(hyci se compose
- d'\*'el\*'ements graphiques et d'un texte qualificatif, comme indiqu\*'e
- dans la
- figure\ D\(hy5.4.1\ a) \*`a\ D\(hy5.4.1\ d).
- .PP
- Cette combinaison rend compr\*'ehensibles les illustrations d'\*'etat. A
- titre d'exemple, la figure\ D\(hy5.4.1\ a) donne la signification d'un
- r\*'ecepteur
- \*`a cadran manipul\*'e par le processus, l'exemple\ b) celle d'un \*'emetteur
- de
- tonalit\*'e de num\*'erotation \*'emettant un signal permanent vers
- l'environnement.
- .PP
- A noter que les signaux de sortie (signaux non permanents) et les
- ressources pertinentes ne sont pas d\*'ecrits dans les illustrations d'\*'etat;
- les signaux de sortie peuvent \* | tre d\*'ecrits dans un diagramme de
- transition.
- .PP
- L'exemple c) montre un temporisateur dont l'expiration est toujours
- repr\*'esent\*'ee par une entr\*'ee. A noter que l'illustration graphique
- recommand\*'ee
- pour le temporisateur comporte le signal d'entr\*'ee pertinent\ t1.
- .PP
- Le dernier exemple, d), signifie qu'un enregistreur de messages
- vocaux est en cours de fonctionnement.
- .PP
- L'identit\*'e de la ressource peut \* | tre consid\*'erablement abr\*'eg\*'ee
- et
- devrait, si possible, \* | tre plac\*'ee \*`a l'int\*'erieur de l'illustration
- graphique appropri\*'ee. Ainsi, les \*'el\*'ements graphiques qui sont
- qualifi\*'es sont tout \*`a fait \*'evidents.
- .RT
- .sp 1P
- .LP
- D.5.4.2.2\ \ \fIIllustrations d'\*'etat compl\*`etes\fR
- .sp 9p
- .RT
- .PP
- Chaque illustration d'\*'etat doit comporter un nombre suffisant
- d'\*'el\*'ements graphiques afin de montrer:
- .RT
- .LP
- a)
- quelles ressources le processus met en oeuvre au cours de
- l'\*'etat repr\*'esent\*'e. Exemples: trajets de commutation, r\*'ecepteurs de
- signalisation, \*'emetteurs de signaux permanents et modules de commutation;
- .LP
- b)
- s'il y a en ce moment un ou plusieurs temporisateurs qui
- contr\* | lent le processus;
- .LP
- c)
- dans le cas o\*`u le processus concerne le traitement des
- appels, si la taxation est ou non actuellement en cours et quels abonn\*'es
- sont tax\*'es au cours de cette phase de l'appel;
- .bp
- .LP
- d)
- quels objets appartenant effectivement \*`a un autre processus (environnement)
- sont consid\*'er\*'es comme en relation avec des ressources du
- processus pendant l'\*'etat en cours;
- .LP
- e)
- les signaux permanents de sortie qui sont \*'emis dans cet
- \*'etat;
- .LP
- f
- )
- la relation entre les signaux et ressources existants dans l'\*'etat;
- .LP
- g)
- l'inventaire des ressources concernant l'\*'etat en cours du
- processus.
- .LP
- .rs
- .sp 31P
- .ad r
- \fBFigura D\(hy5.4.1, (N), p. 1\fR
- .sp 1P
- .RT
- .ad b
- .RT
- .sp 1P
- .LP
- D.5.4.2.3\ \ \fIExemple\fR
- .sp 9p
- .RT
- .PP
- A titre d'exemple d'application des principes expos\*'es ci\(hydessus,
- consid\*'erons l'\*'etat de la figure\ D\(hy5.4.2. On peut voir que, dans cet
- \*'etat:
- .RT
- .LP
- a)
- les ressources affect\*'ees aux processus sont: un r\*'ecepteur
- de chiffres \*`a cadran, un \*'emetteur de tonalit\*'es de num\*'erotation,
- un poste
- d'abonn\*'e appartenant \*`a l'environnement et des trajets de communication
- reliant ces organes;
- .LP
- b)
- un temporisateur\ t0 surveille le processus;
- .LP
- c)
- aucune taxation n'est en cours;
- .LP
- d)
- l'abonn\*'e est identifi\*'e comme l'abonn\*'e\ A mais aucune autre
- information de cat\*'egorie n'est prise en consid\*'eration;
- .LP
- e)
- les signaux d'entr\*'ee suivants sont attendus: A
- \(ulon
- \(ulhook (A\ raccroch\*'e), digit (chiffre) (chiffre num\*'erot\*'e) et\
- t0 (le
- temporisateur de supervision t0\ fonctionne);
- .LP
- f
- )
- le signal permanent de sortie DT (tonalit\*'e de
- num\*'erotation) a \*'et\*'e mis avant cet \*'etat et pendant celui\(hyci.
- .bp
- .LP
- .rs
- .sp 23P
- .ad r
- \fBFigure D\(hy5.4.2, (N), p. 2\fR
- .sp 1P
- .RT
- .ad b
- .RT
- .sp 1P
- .LP
- D.5.4.2.4\ \ \fIV\*'erification de la coh\*'erence de diagrammes LDS avec
- \*'el\*'ements\fR \fIgraphiques\fR
- .sp 9p
- .RT
- .PP
- On constate que l'illustration d'\*'etat est plus compacte et que,
- d'une certaine mani\*`ere, elle offre au lecteur plus d'informations; cependant,
- l'identification de la s\*'erie exacte d'op\*'erations accomplies au cours
- de la
- transition exige un examen tr\*`es attentif des ressources.
- .PP
- En outre, une simple observation de l'illustration d'\*'etat ne permet
- pas de d\*'eterminer l'ordre des actions dans la transition.
- .PP
- Les \*'el\*'ements graphiques repr\*'esent\*'es \*`a l'ext\*'erieur du
- bloc sont des
- \*'el\*'ements qui ne sont pas directement command\*'es par le processus
- donn\*'e: ceux qui sont repr\*'esent\*'es \*`a l'int\*'erieur du symbole
- <<limites du bloc>> sont directement command\*'es par ce processus. Par
- exemple, le processus d'appel partiellement
- sp\*'ecifi\*'e dans la figure\ D\(hy5.4.3 peut allouer ou lib\*'erer l'\*'emetteur
- de tonalit\*'e d'appel, l'\*'emetteur de sonnerie et les trajets de conversation;
- il peut
- \*'egalement d\*'eclencher ou arr\* | ter le temporisateur\ T4, mais il
- ne peut commander directement la condition du combin\*'e de l'abonn\*'e.
- .PP
- En concevant la logique \*`a partir d'une sp\*'ecification LDS avec
- \*'el\*'ements graphiques, seuls les \*'el\*'ements graphiques repr\*'esent\*'es
- \*`a l'int\*'erieur des limites du bloc ont une influence sur les actions
- ex\*'ecut\*'ees pendant les
- s\*'equences de la transition. Les \*'el\*'ements graphiques complexes
- repr\*'esent\*'es \*`a
- l'int\*'erieur des limites de ce bloc sont normalement inlus dans une illustration
- d'\*'etat:
- .RT
- .LP
- a)
- soit parce qu'ils indiquent les ressources et l'\*'etat de
- l'environnement concern\*'es par le signal d'entr\*'ee du processus pendant
- l'\*'etat
- donn\*'e;
- .LP
- b)
- soit pour am\*'eliorer l'intelligibilit\*'e du
- diagramme.
- .sp 1P
- .LP
- D.5.4.2.5\ \
- \fIUtilisation du symbole <<temporisateur>>\fR
- .sp 9p
- .RT
- .PP
- Que l'on emploie ou non des \*'el\*'ements graphiques, l'expiration d'un
- d\*'elai de temporisation est toujours repr\*'esent\*'ee par une entr\*'ee.
- .PP
- La pr\*'esence d'un symbole de temporisateur dans une illustration
- d'\*'etat implique qu'un temporisateur fonctionne pendant cet \*'etat.
- .bp
- .RT
- .LP
- .rs
- .sp 38P
- .ad r
- \fBFigure D\(hy5.4.3, (N), p. 3\fR
- .sp 1P
- .RT
- .ad b
- .RT
- .PP
- Conform\*'ement au principe g\*'en\*'eral expos\*'e dans les Recommandations,
- le d\*'emarrage, l'arr\* | t, le red\*'emarrage et l'expiration du temporisateur
- sont repr\*'esent\*'es \*`a l'aide d'\*'el\*'ements graphiques de la mani\*`ere
- suivante:
- .RT
- .LP
- a)
- pour montrer qu'une temporisation commence au cours d'une
- transition donn\*'ee, le symbole temporisateur doit appara\* | tre sur
- l'illustration d'\*'etat qui correspond \*`a la fin de cette transition
- et non sur celle qui
- correspond \*`a son d\*'ebut;
- .LP
- 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 d\*'ebut de cette transition
- et non sur
- celle qui correspond \*`a sa fin;
- .LP
- c)
- pour montrer qu'une temporisation est relanc\*'ee au cours
- d'une transition un symbole explicite de t\* | che doit \* | tre repr\*'esent\*'e
- dans
- cette transition (on en voit deux exemples sur la figure\ D\(hy5.4.4);
- .LP
- d)
- l'expiration du d\*'elai d'une temporisation donn\*'ee est
- repr\*'esent\*'ee par un symbole d'entr\*'ee associ\*'e \*`a un \*'etat
- dont l'illustration
- porte le symbole <<temporisateur>> correspondant. Il peut naturellement
- arriver que plusieurs temporisateurs surveillent \*`a la fois le m\* | me
- processus (voir la figure\ D\(hy5.4.5).
- .bp
- .LP
- .rs
- .sp 47P
- .ad r
- \fBFigure D\(hy5.4.4, (N), p. 4\fR
- .sp 1P
- .RT
- .ad b
- .RT
- .LP
- .bp
- .LP
- .rs
- .sp 37P
- .ad r
- \fBFigure D\(hy5.4.5, (N), p. 5\fR
- .sp 1P
- .RT
- .ad b
- .RT
- .sp 1P
- .LP
- D.5.5
- \fIDiagrammes auxiliaires\fR
- .sp 9p
- .RT
- .PP
- Pour faciliter la lecture et la compr\*'ehension 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 simplifi\*'ee du comportement du processus
- (ou d'une
- partie de celui\(hyci). Les documents auxiliaires ne remplacent pas les
- documents en LDS mais constituent une introduction \*`a ceux\(hyci.
- .PP
- On trouvera dans la pr\*'esente section des exemples de certains
- diagrammes auxiliaires couramment utilis\*'es, notamment des diagrammes
- synoptiques d'\*'etat, des matrices \*'etat/signal, et des diagrammes de
- s\*'equencement. (Le diagramme en arbre de bloc d\*'ecrit au \(sc\ D.4.4
- est \*'egalement
- un diagramme auxiliaire.)
- .RT
- .sp 1P
- .LP
- D.5.5.1
- \fIDiagramme synoptique d'\*'etat\fR
- .sp 9p
- .RT
- .PP
- Son objectif est de donner une vue d'ensemble des \*'etats d'un
- processus, et d'indiquer quelles transitions sont possibles entre eux. Etant
- donn\*'e qu'il s'agit de donner un aper\*,cu, l'on peut n\*'egliger les
- \*'etats ou les
- transitions de peu d'importance.
- .bp
- .PP
- Les diagrammes se composent de symboles d'\*'etat, de fl\*`eches
- repr\*'esentant des transitions et, \*'eventuellement, de symboles de d\*'ebut
- et
- d'arr\* | t.
- .PP
- Le symbole d'\*'etat doit indiquer le nom de l'\*'etat r\*'ef\*'erenc\*'e.
- Plusieurs noms d'\*'etat peuvent \* | tre inscrits dans le symbole, et
- il est possible
- d'employer un ast\*'erisque (*) pour d\*'esigner tous les \*'etats.
- .PP
- Chacune des fl\*`eches peut, de m\* | me que chacune des sorties possibles
- pendant la transition, \* | tre associ\*'ee au nom du signal ou de l'ensemble
- de
- signaux qui d\*'eclenchent la transition.
- .PP
- On trouvera dans la figure\ D\(hy5.5.1 un exemple de diagramme synoptique
- d'\*'etat.
- .RT
- .LP
- .rs
- .sp 23P
- .ad r
- \fBFigure D\(hy5.5.1, (MC), p. 6\fR
- .sp 1P
- .RT
- .ad b
- .RT
- .PP
- Il est possible de r\*'epartir sur plusieurs diagrammes le diagramme synoptique
- d'\*'etat d'un processus; chacun des diagrammes obtenus porte alors sur
- un aspect particulier, comme <<cas normal>>, traitement en cas de
- d\*'efaillance,\ etc.
- .LP
- .rs
- .sp 14P
- .ad r
- \fBFigure D\(hy5.5.2, (N), p. 7\fR
- .sp 1P
- .RT
- .ad b
- .RT
- .LP
- .bp
- .sp 1P
- .LP
- D.5.5.2
- \fIMatrice \*'etat/signal\fR
- .sp 9p
- .RT
- .PP
- La matrice \*'etat/signal doit servir de document <<pr\*'eliminaire>> \*`a
- un diagramme de processus important. Elle indique les endroits o\*`u existent
- des
- combinaisons entre un \*'etat et un signal dans le diagramme.
- .PP
- Le diagramme se compose d'une matrice bidimensionnelle; celle\(hyci
- pr\*'esente sur un axe tous les \*'etats d'un processus, et sur l'autre
- tous les
- signaux d'entr\*'ee valides d'un processus. L'\*'etat suivant est donn\*'e
- pour chaque \*'el\*'ement de matrice, de m\* | me que les sorties possibles
- au cours de la
- transition. Une r\*'ef\*'erence peut \* | tre indiqu\*'ee pour permettre
- de trouver la
- combinaison donn\*'ee par les indices, si elle existe.
- .PP
- L'\*'el\*'ement correspondant \*`a l'\*'etat fictif ou <<START>> et au signal
- fictif <<CREATE>> sert \*`a indiquer l'\*'etat initial du processus.
- .RT
- .LP
- .rs
- .sp 24P
- .ad r
- \fBFigure D\(hy5.5.3, (MC), p. 8\fR
- .sp 1P
- .RT
- .ad b
- .RT
- .PP
- Il est possible de fractionner la matrice en sous\(hyparties
- r\*'eparties sur plusieurs pages. Les r\*'ef\*'erences sont celles qu'emploie
- normalement l'usager dans la documentation.
- .PP
- Les signaux et les \*'etats doivent \* | tre de pr\*'ef\*'erence regroup\*'es
- de
- fa\*,con que chaque partie de la matrice porte sur un aspect particulier du
- comportement du processus.
- .RT
- .sp 1P
- .LP
- D.5.5.3
- \fIDiagramme de s\*'equencement\fR
- .sp 9p
- .RT
- .PP
- Le diagramme de s\*'equencement peut servir \*`a montrer l'\*'echange des
- s\*'equences de signaux autoris\*'ees entre un ou plusieurs processus et
- leur
- environnement.
- .PP
- Ce diagramme doit donner une vue d'ensemble de l'\*'echange de signaux
- entre les parties du syst\*`eme. Ce diagramme peut repr\*'esenter l'ensemble
- ou une partie de l'\*'echange de signaux, en fonction des aspects \*`a
- mettre en
- \*'evidence.
- .PP
- Les colonnes du diagramme indiquent les entit\*'es en communication
- (services, processus, blocs ou l'environnement).
- .PP
- Leurs interactions sont illustr\*'ees par un ensemble de lignes fl\*'ech\*'ees,
- dont chacune repr\*'esente un signal ou un ensemble de signaux.
- .bp
- .RT
- .LP
- .rs
- .sp 27P
- .ad r
- \fBFigure D\(hy5.5.4, (N), p. 9\fR
- .sp 1P
- .RT
- .ad b
- .RT
- .PP
- On peut annoter chaque s\*'equence afin de faire appara\* | tre
- clairement l'ensemble d'informations \*'echang\*'ees. Chaque ligne est
- accompagn\*'ee
- d'une annotation qui donne les renseignements requis (noms des signaux ou de
- proc\*'edures).
- .PP
- On peut placer un symbole de d\*'ecision dans les colonnes pour indiquer
- que la s\*'equence suivante est valide si la condition indiqu\*'ee est
- vraie. Dans ce cas, le symbole de d\*'ecision appara\* | t g\*'en\*'eralement
- plusieurs fois; il indique les diff\*'erentes s\*'equences produites par
- chacune des valeurs de la
- condition.
- .PP
- Ce diagramme peut repr\*'esenter la totalit\*'e ou seulement un
- sous\(hyensemble significatif des s\*'equences de signaux \*'echang\*'es.
- .PP
- La repr\*'esentation de l'interaction r\*'eciproque des services r\*'esultant
- de la subdivision d'un processus repr\*'esente une application utile de
- ce type
- de diagramme.
- .PP
- Les diagrammes de s\*'equencement ne comprennent g\*'en\*'eralement pas
- toutes les s\*'equences possibles; ils constituent souvent un pr\*'ealable
- \*`a la d\*'efinition compl\*`ete.
- .RT
- .sp 2P
- .LP
- D.6
- \fID\*'efinition des donn\*'ees en LDS\fR
- .sp 1P
- .RT
- .sp 1P
- .LP
- D.6.1
- \fIDirectives applicables aux\fR
- \fIdonn\*'ees en LDS\fR
- .sp 9p
- .RT
- .PP
- On trouvera dans la pr\*'esente section des renseignements
- compl\*'ementaires sur les concepts d\*'efinis au \(sc\ 5 de la Recommandation
- concernant le LDS. La principale diff\*'erence entre la pr\*'esente section
- et l'ancienne
- Recommandation\ Z.104 est que cette derni\*`ere a fait l'objet d'une r\*'evision
- \*`a des fins de clarification et d'harmonisation avec l'ISO. Certains
- des mots
- cl\*'es ont \*'et\*'e modifi\*'es et des adjonctions ont \*'et\*'e faites
- mais la coh\*'erence de
- la s\*'emantique a \*'et\*'e assur\*'ee avec le Livre rouge. L'emploi des
- donn\*'ees d\*'ecrites aux \(sc\ 2, 3 et\ 4 de la nouvelle Recommandation
- (auparavant\ Z.101\(hyZ.103) est
- rest\*'e tel quel.
- .bp
- .RT
- .sp 1P
- .LP
- D.6.1.1
- \fIIntroduction g\*'en\*'erale\fR
- .sp 9p
- .RT
- .PP
- Les types de donn\*'ees du LDS sont fond\*'es sur l'approche de <<types
- de donn\*'ees abstraits>>: on ne d\*'ecrit pas la mani\*`ere dont un type
- doit \* | tre mis en oeuvre, mais on se borne \*`a dire quel sera le r\*'esultat
- des op\*'erateurs
- appliqu\*'e aux valeurs.
- .PP
- Lorsque l'on d\*'efinit des donn\*'ees abstraites, chaque segment de la
- d\*'efinition, appel\*'ee <<d\*'efinition de type partielle>> est introduit
- par le mot\(hycl\*'e NEWTYPE. Chaque d\*'efinition de type partielle a
- une incidence sur les autres, de sorte que toutes les d\*'efinitions de
- type partielles au niveau du syst\*`eme
- constituent une d\*'efinition de type de donn\*'ees unique. Si plusieurs
- d\*'efinitions de type partielles sont introduites \*`a un niveau inf\*'erieur
- (niveau de bloc, par exemple), leur ensemble constitue, avec les d\*'efinitions
- de niveau sup\*'erieur,
- une d\*'efinition de type de donn\*'ees. Cela signifie qu'en un point quelconque
- de la sp\*'ecification, il n'existe qu'\fIune seule\fR d\*'efinition de type de
- donn\*'ees.
- .PP
- En substance, la d\*'efinition de type de donn\*'ees comprend trois
- parties:
- .RT
- .LP
- a)
- d\*'efinitions de sortes;
- .LP
- b)
- d\*'efinitions d'op\*'erateurs;
- .LP
- c)
- \*'equations.
- .PP
- Chacune de ces parties fait l'objet d'explications dans les
- paragraphes qui suivent. La d\*'efinition de type de donn\*'ees est structur\*'ee
- en
- d\*'efinitions de type de donn\*'ees partielles, chacune introduisant une
- sorte. Les d\*'efinitions d'op\*'erateurs et les \*'equations recouvrent
- les d\*'efinitions de type de donn\*'ees partielles.
- .sp 1P
- .LP
- D.6.1.2
- \fISortes\fR
- .sp 9p
- .RT
- .PP
- Une sorte est un ensemble de valeurs qui peut avoir un nombre fini ou infini
- d'\*'el\*'ements mais ne peut \* | tre vide.
- .RT
- .sp 1P
- .LP
- \fIExemples:\fR
- .sp 9p
- .RT
- .LP
- a)
- l'ensemble de valeurs de la sorte bool\*'eenne est { rue
- (vrai), False (faux }
- .LP
- b)
- l'ensemble de valeurs de la sorte Natural (naturel) est
- l'ensemble infini des nombres naturesls { ,\ 1, 2,\ . | \ }
- .LP
- c)
- l'ensemble de valeurs de la sorte Couleur
- \(ulprimaire est
- { ert, Rouge, Ble }
- .PP
- Tous les \*'el\*'ements d'une sorte ne doivent pas \* | tre directement
- fournis par l'utilisateur (cela exigerait un temps infini dans le cas des
- nombres naturels), mais le nom de la sorte doit \* | tre indiqu\*'e. Dans
- la syntaxe concr\*`ete, le mot\(hycl\*'e NEWTYPE est directement suivi
- par le nom de la sorte
- (certaines autres possibilit\*'es seront indiqu\*'ees plus loin). Ce nom
- est surtout utilis\*'e dans les d\*'efinitions d'op\*'erateurs, comme expliqu\*'e
- au \(sc\ D.6.1.3, et dans les d\*'eclarations de variables.
- .sp 1P
- .LP
- D.6.1.3
- \fIOp\*'erateurs, litt\*'eraux et termes\fR
- .sp 9p
- .RT
- .PP
- Les valeurs d'une sorte peuvent \* | tre d\*'efinies de trois
- mani\*`eres:
- .RT
- .LP
- a)
- par une \*'enum\*'eration: les valeurs sont d\*'efinies dans la
- section des litt\*'eraux;
- .LP
- b)
- par des op\*'erateurs: les valeurs sont donn\*'ees comme les
- r\*'esultats d'<<applications>> d'op\*'erateurs;
- .LP
- c)
- par une combinaison d'\*'enum\*'erations et d'op\*'erateurs.
- .PP
- La combinaison de litt\*'eraux et d'op\*'erateurs donne des termes.
- Les relations entre les termes sont exprim\*'ees \*`a l'aide d'\*'equations.
- Les
- paragraphes qui suivent traitent des litt\*'eraux, des op\*'erateurs et
- des termes; le \(sc\ D.6.1.4 traite des \*'equations.
- .sp 1P
- .LP
- D.6.1.3.1\ \ \fILitt\*'eraux\fR
- .sp 9p
- .RT
- .PP
- Les litt\*'eraux sont des valeurs \*'enum\*'er\*'ees d'une sorte. Une
- d\*'efinition de type partiel ne doit pas n\*'ecessairement comporter de
- litt\*'eraux: tous les \*'el\*'ements de la sorte peuvent \* | tre d\*'efinis
- au moyen d'op\*'erateurs.
- Les litt\*'eraux peuvent \* | tre consid\*'er\*'es comme des op\*'erateurs
- d\*'epourvus
- d'arguments. Une relation entre les litt\*'eraux peut \* | tre exprim\*'ee
- dans des
- \*'equations. Dans la syntaxe concr\*`ete, les litt\*'eraux sont introduits
- apr\*`es le mot\(hycl\*'e LITERALS.
- .RT
- .sp 1P
- .LP
- \fIExemples:\fR
- .sp 9p
- .RT
- .LP
- a)
- La d\*'efinition de la sorte bool\*'eenne contient deux litt\*'eraux,
- \*`a savoir True (vrai) et False (faux). Ainsi, la d\*'efinition du type
- bool\*'een se pr\*'esente comme suit:
- .LP
- NEWTYPE Boolean
- .LP
- \ \ LITERALS True, False
- .LP
- \ \ . | |
- .LP
- ENDNEWTYPE Boolean;
- .bp
- .LP
- b)
- la sorte naturelle peut \* | tre d\*'efinie \*`a l'aide d'un
- litt\*'eral, le z\*'ero. Les autres valeurs peuvent \* | tre g\*'en\*'er\*'ees
- au moyen de ce
- litt\*'eral et d'op\*'erateurs;
- .LP
- c)
- les valeurs de la sorte couleur
- \(ulprimaire peuvent
- \* | tre d\*'efinies de la m\* | me mani\*`ere que les litt\*'eraux bool\*'eens;
- .LP
- NEWTYPE Primary
- \(ulcolour
- .LP
- \ \ LITERALS Red, Green, Blue
- .LP
- \ \ . | |
- .LP
- ENDNEWTYPE Primary
- \(ulcolour;
- .LP
- d)
- au \(sc D.6.1.3.2, le troisi\*`eme exemple\ c) pr\*'esente une
- d\*'efinition de type partielle sans litt\*'eraux.
- .sp 1P
- .LP
- D.6.1.3.2\ \ \fIOp\*'erateurs\fR
- .sp 9p
- .RT
- .PP
- Un op\*'erateur est une fonction math\*'ematique qui met en concordance
- une ou plusieurs valeurs (\*'eventuellement de sortes diff\*'erentes) avec
- une valeur r\*'esultante. Les op\*'erateurs sont introduits apr\*`es le
- mot\(hycl\*'e OPERATORS, la ou les sortes de leur ou leurs arguments et
- la sorte de r\*'esultat sont \*'egalement
- indiqu\*'ees (on parle de signature des op\*'erateurs).
- .RT
- .sp 1P
- .LP
- \fIExemples:\fR
- .sp 9p
- .RT
- .LP
- a)
- dans le type bool\*'een, un op\*'erateur appel\*'e <<not>> peut \* | tre
- d\*'efini; il aura un argument de sorte bool\*'een et \*'egalement un r\*'esultat
- de sorte bool\*'een. Dans la d\*'efinition du type bool\*'een, il se pr\*'esente
- comme suit:
- .LP
- NEWTYPE Boolean
- .LP
- \ \ LITERALS True, False
- .LP
- \ \ OPERATORS <<Not>>: Boolean\(hy>Boolean;
- .LP
- \ \ . | |
- .LP
- ENDNEWTYPE Boolean;
- .LP
- b)
- l'op\*'erateur susmentionnn\*'e n\*'ecessaire pour construire tous
- les nombres naturels est Next. Cet op\*'erateur prend un argument de sorte
- naturelle et donne une valeur naturelle (la valeur sup\*'erieure suivante)
- en tant que r\*'esultat;
- .LP
- c)
- il est possible de d\*'efinir pour des couleurs un nouveau type qui n'a
- pas de litt\*'eraux mais utilise des litt\*'eraux de la sorte couleur
- primaire et certains op\*'erateurs:
- .LP
- NEWTYPE Color
- .LP
- \ \ OPERATORS
- .LP
- \ \ \ \ Take: Primary
- \(ulcolour\(hy>Colour;
- .LP
- \ \ \ \ Mix: Primary
- \(ulcolour, Colour\(hy>Colour;
- .LP
- \ \ \ . | |
- .LP
- ENDNEWTYPE Colour;
- .PP
- Il s'agissait de prendre une couleur primaire et de la consid\*'erer comme
- une couleur puis de commencer \*`a m\*'elanger plusieurs couleurs primaires
- afin d'obtenir d'autres couleurs.
- .sp 1P
- .LP
- D.6.1.3.3\ \
- \fITermes\fR
- .sp 9p
- .RT
- .PP
- A l'aide de litt\*'eraux et d'op\*'erateurs, il est possible de
- construire comme suit l'ensemble des termes:
- .RT
- .LP
- 1)
- Rassembler tous les litt\*'eraux dans un ensemble de la sorte dans laquelle
- ils sont d\*'efinis \(em\ chaque litt\*'eral est un terme.
- .LP
- 2)
- Un nouvel ensemble de termes est cr\*'e\*'e pour chaque op\*'erateur
- lorsque l'op\*'erateur est appliqu\*'e \*`a toutes les combinaisons possibles
- de termes de la sorte correcte cr\*'e\*'es pr\*'ec\*'edemment:
- .LP
- a)
- pour la sorte <<Boolean>>, l'ensemble de litt\*'eraux est { rue (vrai),
- False (faux } Le r\*'esultat de cette \*'etape est { ot (True), Not
- (False } parce que nous avons seulement l'op\*'erateur Not (non);
- .LP
- b)
- pour la sorte <<Natural>>, le r\*'esultat de cette \*'etape
- est { ext(0 }
- .LP
- c)
- pour la sorte <<Colour>> l'ensemble de litt\*'eraux est
- vide mais le r\*'esultat de cette \*'etape est { ake(Red), Take(green),
- Take(Blue }
- .LP
- 3)
- Les termes des ensembles cr\*'e\*'es au cours de l'\*'etape
- pr\*'ec\*'edente sont tous la sorte du r\*'esultat de l'op\*'erateur appliqu\*'e;
- par exemple, tous les r\*'esultats de l'op\*'erateur Not sont de la sorte
- bool\*'eenne. Alors, on
- r\*'eunit tous les ensembles de la m\* | me sorte, aussi bien des ensemble
- initiaux que les ensembles nouvellement cr\*'e\*'es:
- .LP
- a)
- pour la sorte bool\*'eenne, on obtient l'ensemble { rue, False, Not(True),
- Not(False }
- .LP
- b)
- pour les nombres naturels cette \*'etape donne l'ensemble { ,\ Next(0 }
- .bp
- .LP
- 4)
- Les deux derni\*`eres \*'etapes sont r\*'ep\*'et\*'ees \*`a maintes
- reprises, et d\*'efinissent en g\*'en\*'eral un ensemble infini de termes:
- .LP
- a)
- l'ensemble de termes bool\*'eens g\*'en\*'er\*'es par les
- litt\*'eraux True et False et l'op\*'erateur Not est { rue, False, Not(True),
- Not(False), Not(Not(True)), Not(Not(False)), Not(Not(Not(True))),\ . | | }
- .LP
- b)
- l'ensemble des termes naturels g\*'en\*'er\*'es par le
- litt\*'eral\ 0 et l'op\*'erateur Next est { ,\ Next(0), Next(Next(0)),
- Next(Next(Next(0))),\ . | | }
- .LP
- c)
- l'ensemble des termes de couleur g\*'en\*'er\*'es par les
- litt\*'eraux Red, Green et Blue de la sorte Primary
- \(ulcolour et les op\*'erateurs
- Take et Mix est { ake(Red), Take(Green), Take(Blue), Mix(Red, Take(Red)),
- Mix(Red, 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)),\ . | | }
- .sp 1P
- .LP
- D.6.1.4
- \fIEquations et axiomes\fR
- .sp 9p
- .RT
- .PP
- D'une mani\*`ere g\*'en\*'erale, le nombre de termes g\*'en\*'er\*'es au
- paragraphe pr\*'ec\*'edent est sup\*'erieur au nombre de valeurs de la
- sorte. A titre d'exemple,
- il existe deux valeurs bool\*'eennes mais l'ensemble de termes bool\*'eens a un
- nombre infini d'\*'el\*'ements. Il existe cependant une possibilit\*'e
- d'\*'etablir des
- r\*`egles sp\*'ecifiant quels sont les termes consid\*'er\*'es comme d\*'esignant
- la m\* | me
- valeur. Ces r\*`egles sont appel\*'ees \*'equations et font l'objet du
- paragraphe
- suivant. Deux types particuliers d'\*'equations, les axiomes et les \*'equations
- conditionnelles, font l'objet des \(sc\ D.6.1.4.2 et\ D.6.1.4.3.
- .PP
- Les \*'equations, les axiomes et les \*'equations conditionnelles sont
- donn\*'es, dans la syntaxe concr\*`ete apr\*`es le mot\(hycl\*'e AXIOMS.
- Ce mot\(hycl\*'e a \*'et\*'e
- conserv\*'e pour des raisons d'ordre historique.
- .RT
- .sp 1P
- .LP
- D.6.1.4.1\ \ \fIEquations\fR
- .sp 9p
- .RT
- .PP
- Une \*'equation indique quels sont les termes consid\*'er\*'es comme
- d\*'esignant la m\* | me valeur. Une \*'equation relie deux termes s\*'epar\*'es
- par le
- symbole d'\*'equivalence\ ==.
- .PP
- Par exemple <<Not(True)\ ==\ False>> indique que les termes Not(True)
- et False sont \*'equivalents; chaque fois que l'on trouve Not(True), on peut le
- remplacer par False sans changement de sens et vice versa.
- .PP
- Dans certaines \*'equations, l'ensemble de termes est divis\*'e en
- sous\(hyensembles discontinus de termes qui d\*'esignent la m\* | me valeur.
- Ces
- sous\(hyensembles sont appel\*'es classes d'\*'equivalence. Dans le langage
- courant, les classes d'\*'equivalence sont identifi\*'ees aux valeurs.
- .RT
- .sp 1P
- .LP
- \fIExemples:\fR
- .sp 9p
- .RT
- .LP
- a)
- L'ensemble de termes de la sorte bool\*'eenne est divis\*'e en
- deux classes d'\*'equivalence de termes par les deux axiomes suivants:
- .LP
- Not(True)
- ==\ False;
- .LP
- Not(False)
- ==\ True;
- .LP
- Les classes d'\*'equivalence qui en r\*'esultent sont:
- .LP
- { rue, Not(False), Not(Not(True)), Not(Not(Not(False))),
- .LP
- Not(Not(Not(Not(True)))), Not(Not(Not(Not(Not(False))))),\ . | | }
- .LP
- et
- .LP
- { alse, Not(True), Not(Not(False)), Not(Not(Not(True))),
- .LP
- Not(Not(Not(Not(False)))), Not(Not(Not(Not(Not(True))))) } . | |
- .LP
- Ces deux classes d'\*'equivalence sont identifi\*'ees aux valeurs
- True (Vrai) et False (Faux);
- .LP
- b)
- Dans le cas de couleurs, on peut d\*'esirer sp\*'ecifier que le
- m\*'elange d'une couleur primaire avec une couleur qui contient cette couleur
- primaire ne fait pas de diff\*'erence. De plus, l'ordre dans lequel les
- primaires sont m\*'elang\*'es est sans importance. Cela peut \* | tre \*'enonc\*'e
- dans les \*'equations
- suivantes:
- .LP
- Mix(Red, Take(Red))
- ==\ Take(Red);
- .LP
- Mix(Red, Mix(Red, Take(Green)))
- ==\ Mix(Red, Take(Green));
- .LP
- Mix(Red, Mix(Red, Take(Blue)))
- ==\ Mix(Red Take(Blue));
- .LP
- Mix(Red, Mix(Green, Take(Red)))
- ==\ Mix(Green, Take(Red));
- .LP
- Mix(Red, Mix(Blue, Take(Red)))
- ==\ Mix(Blue,
- Take(Red));\ etc.
- .bp
- .LP
- 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\(hyALL qui introduit les noms de
- valeur repr\*'esentant une classe d'\*'equivalence arbitraire (ou la valeur
- associ\*'ee \*`a cette classe d'\*'equivalence). Cela peut \* | tre tr\*`es
- utile dans la situation ci\(hydessus; toutes les \*'equations susmentionn\*'ees
- et celles qui sont indiqu\*'ees
- par\ etc. peuvent \* | tre d\*'ecrites en quelques lignes sous la forme
- suivante:
- .LP
- FOR ALL p1, p2 IN Primary
- \(ulcolour
- .LP
- /*1*/\ \ \ Mix(p1, Take(p1))\ ==\ Take(p1);
- .LP
- /*2*/\ \ \ Mix(p1, Mix(p1, Take(p2)))\ ==\ Mix(p1, Take(p2));
- .LP
- /*3*/\ \ \ Mix(p1, Mix(p2, Take(p1)))\ ==\ Mix(p2, Take(p1));
- .LP
- /*4*/\ \ \ Mix(p1, Take(p2))\ ==\ Mix(p2, Take(p1));
- .LP
- /*4*/\ \ \
- FOR ALL c IN Colour
- .LP
- /*5*/\ \ \ (\ Mix(p1, Mix(p2, c))\ ==\ Mix(p2, Mix(p1, c));
- .LP
- /*6*/\ \ \
- (\
- Mix(p1, Mix(p2, c))\ ==\ Mix(Mix(p1, Take(p2))\ c))
- .LP
- /*4*/\ \ \
- )
- .LP
- Dans les \*'equations ci\(hydessus, il y a chevauchement mais cela ne
- pose pas de probl\*`emes pour autant que les \*'equations ne se contredisent
- pas mutuellement.
- .LP
- Les \*'equations susmentionn\*'ees cr\*'eent 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 diff\*'erentes:
- .LP
- Take(Red), Take(Green), Take(Blue),
- .LP
- Take(Red, Take(Green)),
- .LP
- Mix(Green, Take(Blue)),
- .LP
- Mix(Blue, Take(Red)),
- .LP
- Mix(Blue, Mix(Green, Take(Red))).
- .LP
- Tous les autres termes de la sorte Colour sont \*'equivalents \*`a l'un
- des termes ci\(hydessus.
- .LP
- Dans les exemples d'\*'equations comportant la construction
- FOR\(hyALL, appel\*'ees \*'equations explicitement quantifi\*'ees, l'information
- que p1 et p2 sont des identificateurs de valeur de sorte Primary
- \(ulcolour est redondante; l'argument de l'op\*'erateur Take et le premier
- argument de l'op\*'erateur Mix ne
- peuvent \* | tre de la sorte Primary
- \(ulcolour. En g\*'en\*'eral, les \*'equations
- explicitement quantifi\*'ees deviennent plus lisibles mais il est possible
- d'omettre la quantification si la sorte des identificateurs de valeur peut
- \* | tre d\*'eduite du contexte. Dans ce cas, on dit que l'\*'equation
- est implicitement quantifi\*'ee.
- .sp 1P
- .LP
- \fIExemple:\fR
- .sp 9p
- .RT
- .LP
- Les \*'equations 4 et 5 ci\(hydessus sont les m\* | mes que:
- .LP
- Mix(p1, Take(p2))
- , c))
- \ \ \ ==\ Mix(p2, Take(p1));
- .LP
- Mix(p1, Mix(p2, c))\ \ \ ==\ Mix(p2, Mix(p1,\ c));
- .sp 1P
- .LP
- D.6.1.4.2\ \ \fIAxiomes\fR
- .sp 9p
- .RT
- .PP
- Les axiomes sont simplement des esp\*`eces particuli\*`eres
- d'\*'equation, introduites parce que dans des situations pratiques, de
- nombreuses \*'equations se rapportent \*`a des bool\*'eens. Dans ce cas,
- les \*'equations tendent \*`a prendre la forme\ . | | \ ==\ True (vrai),
- c'est\(hy\*`a\(hydire qu'elles indiquent qu'un terme donn\*'e est \*'equivalent
- \*`a True.
- .RT
- .sp 1P
- .LP
- \fIExemple:\fR
- .sp 9p
- .RT
- .LP
- Admettons qu'un op\*'erateur soit d\*'efini pour une couleur type:
- Contains: Colour, Primary
- \(ulcolour\(hy> Boolean; ce qui doit donner la r\*'eponse
- True (vrai) si la couleur primaire est contenue dans la couleur et False
- (faux) dans le cas contraire. Voici un exemple des \*'equations dont il
- s'agit:
- .LP
- FOR ALL p IN Primary
- \(ulcolour
- .LP
- (\ Contains(Take(p), p)
- == True;
- .LP
- FOR ALL c IN Colour
- .LP
- (\ Contains(Mix(p,c), p)
- == True)
- .LP
- )
- .LP
- La partie <<== True>> de ces \*'equations peut \* | tre omise et les
- r\*'esultats sont appel\*'es axiomes. Des axiomes peuvent se reconna\* | tre
- \*`a
- l'absence du symbole d'\*'equivalence\ ==; ils d\*'esignent des termes qui sont
- \*'equivalents \*`a la valeur True (vrai) de la sorte bool\*'eenne.
- .LP
- La construction de la seconde \*'equation peut para\* | tre quelque peu
- forc\*'ee. Une meilleure mani\*`ere d'\*'ecrire ces \*'equations est indiqu\*'ee
- apr\*`es
- l'introduction de certaines constructions utiles.
- .bp
- .sp 1P
- .LP
- D.6.1.4.3\ \
- \fIEquations conditionnelles\fR
- .sp 9p
- .RT
- .PP
- Les \*'equations conditionnelles constituent un moyen d'\*'ecrire des
- \*'equations qui ne sont valables que dans certaines conditions. Ces conditions
- sont d\*'esign\*'ees par la m\* | me syntaxe que les \*'equations non conditionnelles
- et
- sont s\*'epar\*'ees par un symbole\ ==> de l'\*'equation qui est valable
- si la condition est remplie.
- .RT
- .sp 1P
- .LP
- \fIExemple:\fR
- .sp 9p
- .RT
- .LP
- L'exemple type d'une \*'equation conditionnelle est la d\*'efinition
- de la division en type r\*'eel o\*`u:
- .LP
- FOR ALL x, z IN Real
- .LP
- (\ \ z/= 0 == True\ \ \ \ ==>\ \ \ \ (x/z) * z == x)
- .LP
- indique que, si la condition <<z n'est pas \*'egale \*`a 0>> est valable,
- la division par\ z suivie de la multiplication par\ z donne la valeur originale.
- Cette \*'equation conditionnelle n'indique rien quant \*`a ce qui devrait
- arriver si une valeur de la sorte Real \*'etait divis\*'ee par\ 0. Si l'on
- veut sp\*'ecifier ce qui se passe en cas de division par z\*'ero, il faudrait
- cr\*'eer une \*'equation
- conditionnelle de la forme suivante:
- .LP
- FOR ALL x, z IN Real
- .LP
- (\ \ z = 0 == True\ \ \ \ ==>\ \ \ \ (x/z) * z == . | | ).
- .LP
- En pareil cas, cependant, il est recommand\*'e de placer un
- <<terme conditionnel>> du c\* | t\*'e droit, pour faciliter la lecture.
- Dans le cas
- ci\(hydessus l'\*'equation deviendrait:
- .LP
- FOR ALL x, z IN Real
- .LP
- (\ \ (x/z) * z\ \ \ \ ==\ \ \ IF z/=0
- .LP
- (\ \ (x/z) * z\ \ \ \ ==\ \ \
- THEN x
- .LP
- (\ \ (x/z) * z\ \ \ \ ==\ \ \
- ELSE . | |
- .LP
- (\ \ (x/z) * z\ \ \ \ ==\ \ \
- FI
- .LP
- )
- .sp 1P
- .LP
- D.6.1.5
- \fIInformations compl\*'ementaires concernant les \*'equations et les\fR
- \fIaxiomes\fR
- .sp 9p
- .RT
- .PP
- Les deux sections qui suivent traitent de certaines difficult\*'es
- que l'on peut rencontrer lorsque des op\*'erateurs donnent des r\*'esultats
- appartenant \*`a une sorte d\*'ej\*`a d\*'efinie. Le \(sc\ D.6.1.5.3 explique
- la notion
- d'erreur en tant que terme d'une \*'equation.
- .RT
- .sp 1P
- .LP
- D.6.1.5.1\ \ \fICoh\*'erence de la hi\*'erarchie\fR
- .sp 9p
- .RT
- .PP
- En un point quelconque d'une sp\*'ecification en LDS, il existe une
- seule et unique d\*'efinition de type de donn\*'ees. Cette d\*'efinition
- de type de
- donn\*'ees contient les sortes, op\*'erateurs et \*'equations pr\*'ed\*'efinis
- et l'ensemble des sortes, op\*'erateurs et \*'equations d\*'efinis par
- l'utilisateur dans les
- d\*'efinitions de type partielles visibles en ce point. (C'est la raison pour
- laquelle un texte NEWTYPE\ . | | ENDNEWTYPE est appel\*'e d\*'efinition
- de type
- \fIpartielle\fR .)
- .PP
- Il en r\*'esulte certaines cons\*'equences pour les d\*'efinitions de type
- aux niveaux inf\*'erieurs. Cette influence sur le type pourrait \* | tre
- peu souhaitable. A titre d'exemple, on pourrait sp\*'ecifier de fa\*,con
- erron\*'ee que deux termes sont \*'equivalents, les rendant ainsi \*'equivalents
- alors qu'ils ne sont pas dans une
- port\*'ee englobante.
- .PP
- Il n'est pas admis de donner des \*'equations telles que:
- .RT
- .LP
- a)
- les valeurs d'une sorte qui sont diff\*'erentes dans une
- port\*'ee \*`a un niveau sup\*'erieur soient rendues \*'equivalentes;
- .LP
- b)
- de nouvelles valeurs soient ajout\*'ees \*`a une sorte d\*'efinie
- dans une port\*'ee de niveau sup\*'erieur.
- .PP
- Cela signifie par exemple que, dans un bloc au niveau du
- syst\*`eme, des d\*'efinitions de type partielles sp\*'ecifi\*'ees par
- l'utilisateur
- contenant un op\*'erateur ayant un r\*'esultat pr\*'ed\*'efini doivent
- rapporter tous les termes produits par cet op\*'erateur \*`a des valeurs
- de cette sorte de r\*'esultat.
- .sp 1P
- .LP
- \fIExemples:\fR
- .sp 9p
- .RT
- .LP
- a)
- Si, pour une raison quelconque, on donne l'axiome:
- .LP
- FOR ALL n, m IN Integer
- .LP
- (\ (Fact(n) = Fact(m))\ \ \ \ =>\ \ \ \ (n = m))
- .LP
- afin de sp\*'ecifier que si les r\*'esultats de l'op\*'erateur Fact sont
- les m\* | mes, les arguments sont alors les m\* | mes. (A noter que\ =>
- est
- l'implication bool\*'eenne; cela a peu de relation avec le signe d'\*'equation
- conditionnellle\ ==>). Ainsi, par accident, les valeurs sont unifi\*'ees. Des
- \*'equations des exemples pr\*'ec\*'edents on peut d\*'eduire que Fact(0)\
- =\ Fact(1) et
- cette derni\*`ere \*'equation indique que\ 0 et\ 1 sont des notations diff\*'erentes
- de la m\* | me valeur. Sur la base de cette derni\*`ere \*'equation, on
- peut prouver
- que les nombres d'\*'el\*'ements de la sorte Integer sont r\*'eduits \*`a
- un.
- .bp
- .LP
- Avec l'aide d'une \*'equation conditionnelle, on peut indiquer que, pourvu
- que\ n et\ m ne soient pas \*'egaux \*`a\ 0, le m\* | me r\*'esultat de
- l'op\*'erateur Fact sur\ n et\ m implique n\ =\ m. En Led:
- .LP
- FOR ALL n, m IN Integer
- .LP
- (\ n/=0, m/=0 ==> (Fact(n) = Fact(m))\ \ \ \ =>\ \ \ \ (n = m))
- .LP
- A noter que cette derni\*`ere \*'equation n'ajoute rien \*`a la
- s\*'emantique des nombres entiers; c'est un th\*'eor\*`eme qui peut \* | tre
- d\*'eduit des
- autres \*'equations. Par ailleurs, l'adjonction d'une \*'equation prouvable ne
- pr\*'esente pas d'inconv\*'enient.
- .LP
- b)
- Admettons que l'on d\*'ecouvre la n\*'ecessit\*'e d'un op\*'erateur pour
- les factorielles lors de la sp\*'ecification d'un type donn\*'e. Dans la
- d\*'efinition de type partielle de ce type, l'op\*'erateur Fact est introduit:
- .LP
- Fact:\ Integer \(hy> Integer;
- .LP
- et les \*'equations suivantes sont donn\*'ees pour d\*'efinir cet
- op\*'erateur:
- .LP
- Fact(0) == 1;
- .LP
- FOR ALL n IN Integer
- .LP
- (\ n > 0 ==> Fact(n) == n * Fact(n\(em1))
- .LP
- Ces \*'equations ne d\*'efinissent pas Fact(\(em1) et ainsi, c'est un
- terme de la sorte Integer qui n'a pas de relation avec d'autres termes
- de cette sorte. En cons\*'equence, Fact(\(em1) est une nouvelle valeur
- de la sorte entier
- (et il en va de m\* | me pour Fact(\(em2), Fact(\(em3),\ etc). Cela n'est
- pas admis.
- L'exemple\ b) du \(sc\ D.6.1.5.3 donne une d\*'efinition correcte de fact.
- .sp 1P
- .LP
- D.6.1.5.2\ \
- \fIEgalit\*'e et in\*'egalit\*'e\fR
- .sp 9p
- .RT
- .PP
- Dans chaque type, les op\*'erateurs d'\*'egalit\*'e et d'in\*'egalit\*'e sont
- implicites. Ainsi, si une d\*'efinition de type partielle introduit une
- sorte\ S, il y a alors des d\*'efinitions implicites d'op\*'erateur:
- .RT
- .LP
- "=": S, S \(hy> Boolean;
- .LP
- "/=": S, S \(hy> Boolean;
- .PP
- (\fIRemarque\fR \ \(em\
- Les guillemets sp\*'ecifient que = et/= sont utilis\*'es comme op\*'erateurs
- infixes.)
- .PP
- L'op\*'erateur d'\*'egalit\*'e pr\*'esente les propri\*'et\*'es pr\*'evisibles:
- .PP
- a = a,
- .PP
- a = b => b = a,
- .PP
- a = b AND b = c => a = c,
- .PP
- a = b => a == b,
- .PP
- a = b => op(a) = op(b) for all operators op.
- .PP
- Ces propri\*'et\*'es ne sont pas \*'ecrites en syntaxe LDS et ne doivent pas
- \* | tre \*'enonc\*'ees dans des axiomes ou des \*'equations car elles
- sont implicites.
- La valeur bool\*'eenne obtenue lorsque cet op\*'erateur est appliqu\*'e
- 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 sp\*'ecifi\*'e, que la valeur est True (vrai) ou False (faux), la
- sp\*'ecification est incompl\*`ete.
- .PP
- Pour l'op\*'erateur d'in\*'egalit\*'e, c'est par une \*'equation en LDS
- que l'on peut le mieux expliquer la s\*'emantique:
- .RT
- .LP
- FOR ALL a, b IN S
- .LP
- (\ a/= b == Not(a = b))
- .PP
- Il n'y a pas de diff\*'erence entre l'\*'egalit\*'e et l'\*'equivalence.
- Deux termes qui sont \*'equivalents d\*'esignent la m\* | me valeur et
- l'op\*'erateur d'\*'egalit\*'e entre eux donne le r\*'esultat True (vrai).
- .sp 1P
- .LP
- D.6.1.5.3\ \
- \fIErreur\fR
- .sp 9p
- .RT
- .PP
- On a jug\*'e n\*'ecessaire, pour les exemples qui pr\*'ec\*`edent, de
- sp\*'ecifier que l'application de l'op\*'erateur \*`a certaines valeurs
- est consid\*'er\*'ee comme une erreur. Le LDS a un moyen de le sp\*'ecifier
- formellement: l'\*'el\*'ement
- ERROR. L'erreur devrait servir \*`a exprimer:
- .RT
- .LP
- <<l'application de cet op\*'erateur \*`a cette valeur n'est pas admise
- et lorsqu'il se pr\*'esente, le comportement futur est ind\*'efini>>.
- .PP
- Dans la syntaxe concr\*`ete, cela est indiqu\*'e par le terme Error!, qui
- ne peut \* | tre utilis\*'e comme argument d'un op\*'erateur.
- .bp
- .PP
- Lorsque Error r\*'esulte de l'application d'un op\*'erateur et que cette
- application est un argument d'un autre op\*'erateur, l'application d'op\*'erateur
- ext\*'erieur porte \*'egalement Error dans son r\*'esultat (propagation\(hyd'erreurs).
- Dans un terme conditionnel, la partie THEN \fIou\fR la partie ELSE est
- \*'evalu\*'ee,
- de sorte que l'une d'elle peut \* | tre une erreur sans que celle\(hyci
- soit \*'evalu\*'ee (\*'etant donn\*'ee que l'autre partie de l'alternative
- est \*'evalu\*'ee).
- .RT
- .sp 1P
- .LP
- \fIExemples:\fR
- .sp 9p
- .RT
- .LP
- a)
- Dans l'exemple de division de valeurs de sorte Real, les
- poids peuvent \* | tre remplac\*'es comme suit:
- .LP
- FOR ALL x, z IN Real
- .LP
- (\ (x/z) * z\ ==\ IF z/=0
- .LP
- (\ (x/z) * z\ ==\
- THEN \ \ \ x
- .LP
- (\ (x/z) * z\ ==\
- ELSE \ \ \ Error!
- .LP
- (\ (x/z) * z\ ==\
- FI
- .LP
- )
- .LP
- Pour plus de clart\*'e, on pourrait ajouter:
- .LP
- FOR ALL x IN Real
- .LP
- (\ x/0 == Error!)
- .LP
- b)
- Dans l'exemple comportant l'op\*'erateur Fact, on pourrait
- sp\*'ecifier que l'application de cet op\*'erateur sur des entiers n\*'egatifs
- est
- consid\*'er\*'ee comme une erreur (Error). Cela permet d'\*'eviter que
- Fact(\(em1),
- Fact(\(em2),\ . | | ne deviennent de nouvelles valeurs de la sorte Integer
- (entier). Il conviendrait de d\*'efinir l'op\*'erateur Fact comme suit:
- .LP
- n < 0
- ==>
- Fact(n) == Error!;
- .LP
- Fact(0) == 1;
- .LP
- n > 0
- ==>
- Fact(n) == Fact(n\(em1) * n;
- .LP
- Ces trois lignes sont beaucoup plus claires que l'\*'equation du style
- programmation indiqu\*'ee ci\(hyapr\*`es. En g\*'en\*'eral, le terme conditionnel
- devrait \* | tre utilis\*'e s'il y a deux cas compl\*'ementaires; l'embo\* | tage
- de termes conditionnels rend l'\*'equation illisible, comme on peut le
- voir
- ci\(hydessous:
- .LP
- Fact(n)\ \ \ ==\ \ \ IF n > 0
- .LP
- Fact(n)\ \ \ ==\ \ \
- THEN Fact(n\(em1) * n
- .LP
- Fact(n)\ \ \ ==\ \ \
- ELSE\ \ IF n = 0
- .LP
- Fact(n)\ \ \ ==\ \ \ ELSE\ \
- THEN 1
- .LP
- Fact(n)\ \ \ ==\ \ \ ELSE\ \
- ELSE Error!
- .LP
- Fact(n)\ \ \ ==\ \ \ ELSE\ \
- FI
- .LP
- Fact(n)\ \ \ ==\ \ \
- FI
- .sp 1P
- .LP
- D.6.2
- \fIG\*'en\*'erateurs et h\*'eritage\fR
- .sp 9p
- .RT
- .PP
- Le pr\*'esent paragraphe traite de deux constructions qui peuvent
- \* | tre utilis\*'ees pour sp\*'ecifier des types ayant des parties communes.
- Le
- g\*'en\*'erateur sp\*'ecifie non un type mais un sch\*'ema, qui devient
- un type lorsque les sortes, op\*'erateurs, litt\*'eraux et constantes formels
- sont remplac\*'es par des
- termes r\*'eels.
- .PP
- L'h\*'eritage offre la possibilit\*'e de cr\*'eer un nouveau type en partant
- d'un type d\*'ej\*`a existant. Les noms de litt\*'eraux et d'op\*'erateurs
- peuvent \* | tre renomm\*'es et il est possible de sp\*'ecifier des litt\*'eraux,
- des op\*'erateurs et des \*'equations suppl\*'ementaires.
- .RT
- .sp 1P
- .LP
- D.6.2.1
- \fIG\*'en\*'erateurs\fR
- .sp 9p
- .RT
- .PP
- Une d\*'efinition de g\*'en\*'erateur d\*'efinit un sch\*'ema param\*'etr\*'e
- par des
- noms formels de sortes, de litt\*'eraux, de constantes et d'op\*'erateurs. Les
- g\*'en\*'erateurs sont destin\*'es \*`a des types qui repr\*'esentent des
- <<variations sur un th\*`eme>>, tels que des ensembles d'\*'el\*'ements,
- des cha\* | nes d'\*'el\*'ements, des
- fichiers d'enregistrement, des tables de consultation, des tableaux.
- .PP
- On peut l'expliquer \*`a l'aide d'un exemple pour lequel des variations
- peuvent \* | tre envisag\*'ees. Admettons qu'il soit n\*'ecessaire qu'un
- type ressemble \*`a la notion math\*'ematique d'un ensemble d'entiers.
- La partie suivante du texte fait partie de la d\*'efinition de type de
- cet ensemble
- d'entiers.
- .bp
- .RT
- .LP
- .rs
- .sp 24P
- .ad r
- \fBFigure D.6.2.1 (comme tableau) [T37.100], p. 10\fR
- .sp 1P
- .RT
- .ad b
- .RT
- .LP
- .sp 6
- .PP
- Toutes les \*'equations ont une quantification implicite. La
- premi\*`ere \*'equation indique que la suppression d'un \*'el\*'ement de
- l'ensemble vide donne
- l'ensemble vide pour r\*'esultat. La seconde \*'equation indique que la
- suppression apr\*`es insertion du m\* | me \*'el\*'ement donne pour r\*'esultat
- l'ensemble tel qu'il
- \*'etait avant l'insertion (\*`a condition que l'ensemble ne contienne pas
- l'\*'el\*'ement); sinon l'ordre d'insertion et de suppression peut \* | tre
- interchangeable. La troisi\*`eme \*'equation indique que l'\*'el\*'ement
- vide ne contient pas d'\*'el\*'ements. La quatri\*`eme \*'equation indique
- qu'un \*'el\*'ement se trouve dans un ensemble s'il est le dernier \*'el\*'ement
- ajout\*'e ou s'il se trouvait dans l'ensemble avant l'adjonction du dernier
- \*'el\*'ement. La derni\*`ere \*'equation indique que
- l'ordre d'addition des \*'el\*'ements ne fait aucune diff\*'erence.
- .PP
- Dans l'exemple de la figure D\(hy6.2.1 Int
- \(ulset (ensemble
- \(uld'entiers) n'est qu'un exemple d'un ensemble et si l'on a \*'egalement
- besoin d'un
- PId
- \(ulset, d'un Subscriber
- \(ulset (ensemble
- \(uld'abonn\*'es) et d'un
- Exchange
- \(ulname
- \(ulset (ensemble
- \(ulde
- \(ulnoms
- \(ulde
- \(ulcentral) dans la
- sp\*'ecification, personne ne sera surpris qu'il contienne tous les op\*'erateurs
- Add (ajouter), Delete (supprimer) et Is
- \(ulin (est
- \(uldans) et un litt\*'eral pour l'ensemble vide. Les \*'equations donn\*'ees
- pour ces op\*'erateurs facilitent la
- g\*'en\*'eralisation \*`a d'autres ensembles.
- .PP
- Tel est le cas o\*`u la notion de g\*'en\*'erateur se r\*'ev\*`ele utile;
- le texte commun peut \* | tre donn\*'e une fois et \* | tre utilis\*'e
- plusieurs fois. La
- figure\ D\(hy6.2.2 pr\*'esente le g\*'en\*'erateur. (A noter que les noms
- de sortes formels sont introduits par le mot cl\*'e TYPE, cela uniquement
- pour des raisons d'ordre historique.)
- .RT
- .PP
- Au lieu d'utiliser Integer (entier), on utilise le type formel
- Item et, pour pouvoir donner diff\*'erents noms \*`a l'ensemble entier
- vide et aux ensembles vides dans d'autres types, on fait \*'egalement de
- ce litt\*'eral un
- param\*`etre formel.
- .bp
- .RT
- .LP
- .rs
- .sp 24P
- .ad r
- \fBFigure D.6.2.2 (comme tableau) [T38.100], p. 11\fR
- .sp 1P
- .RT
- .ad b
- .RT
- .PP
- .sp 1
- Avec ce g\*'en\*'erateur, le type Int
- \(ulset peut \* | tre construit comme
- suit:
- .RT
- .LP
- NEWTYPE Int
- \(ulset Set (Integer, empty
- \(ulint
- \(ulset)
- .LP
- ENDNEWTYPE Int
- \(ulset;
- .PP
- Si l'on compare les figures D\(hy6.2.1 et D\(hy6.2.2, on
- constate que:
- .LP
- a)
- GENERATOR et ENDGENERATOR sont remplac\*'es par NEWTYPE et
- ENDNEWTYPE respectivement;
- .LP
- b)
- les param\*`etres formels de g\*'en\*'erateur (le texte entre
- parenth\*`eses apr\*`es le nom de g\*'en\*'erateur) sont supprim\*'es;
- .LP
- c)
- Set, Item et empty
- \(ulset sont remplac\*'es dans tout le
- g\*'en\*'erateur par Int
- \(ulset, Integer et empty
- \(ulint
- \(ulset,
- respectivement.
- .PP
- Ainsi, il n'y a en fait aucune diff\*'erence entre cet
- Int
- \(ulset et celui de la figure\ D\(hy6.2.1, mais\ . | |
- .LP
- \(em
- si l'on a besoin d'un ensemble de valeurs Pid, on peut cr\*'eer le type
- \*`a l'aide de:
- .LP
- NEWTYPE PId\(hyset Set(PId, empty
- \(ulpid
- \(ulset)
- .LP
- ENDNEWTYPE PId
- \(ulset;
- .LP
- \(em
- si l'on a besoin d'un ensemble d'abonn\*'es, dans lequel les
- abonn\*'es sont repr\*'esent\*'es par un type introduisant la sorte Subscr,
- l'ensemble d'abonn\*'es peut \* | tre cr\*'e\*'e \*`a l'aide de:
- .LP
- NEWTYPE Subscr
- \(ulset Set(Subscr,
- empty
- \(ulsubscr
- \(ulset)
- .LP
- ENDNEWTYPE Subscr
- \(ulset;
- .LP
- Cela permet d'\*'economiser du papier, de plus, le travail est facilit\*'e
- parce qu'il suffit de penser une fois aux ensembles et que ce travail peut
- \* | tre d\*'el\*'egu\*'e \*`a des sp\*'ecialistes qualifi\*'es sur les
- types de donn\*'ees
- abstraites.
- .bp
- .sp 1P
- .LP
- \fIExemple:\fR
- .sp 9p
- .RT
- .LP
- Cet exemple montre un g\*'en\*'erateur utilisant une sorte, un
- op\*'erateur, un litt\*'eral et une constante formels. Il d\*'ecrit une
- rang\*'ee
- d'\*'el\*'ements ayant une longueur maximale max
- \(ullength. La sorte comprend un
- litt\*'eral d\*'esignant la rang\*'ee vide et les op\*'erateurs pour insertion
- et
- suppression d'\*'el\*'ements dans une rang\*'ee ou de celle\(hyci, l'encha\* | nement
- de
- rang\*'ees, le choix d'une sous\(hyrang\*'ee et la d\*'etermination de
- la longueur d'une
- rang\*'ee. Ce dernier op\*'erateur est rendu formel ce qui permet de la
- nommer \*`a
- nouveau.
- .LP
- GENERATOR Row (TYPE Item, OPERATOR Length, LITERAL Empty,
- .LP
- \ \ \ \ \ \ \ \ \ \ \ \ CONSTANT max
- \(ullength)
- .LP
- \ \ LITERALS Empty
- .LP
- \ \ OPERATORS
- .LP
- \ \ \ \ Length: Row
- \(hy> Integer;
- .LP
- \ \ \ \ Insert: Row, Item, Integer
- \(hy> Row;
- .LP
- \ \ \ \ Delete: Row, Integer, Integer
- \(hy> Row;
- .LP
- \ \ \ \ "//": Row, Row
- \(hy> Row;
- .LP
- \ \ \ \ Select: Row, Integer, Integer
- \(hy> Row
- .LP
- \ \ \ \ /* and other operators relevant for rows of items */
- .LP
- \ \ AXIOMS
- .LP
- \ \ \ \ /* The equations for the operators above, among *
- .LP
- \ \ \ \ /
- * which the following two (or equivalents)
- */
- .LP
- \ \ \ \ Length(r) = max
- \(ullength ==> Insert(r, itm, int) == Error!;
- .LP
- \ \ \ \ Length(r1) + Length(r2) > max
- \(ullength ==> r1//r2 == Error!
- .LP
- ENDGENERATOR Row;
- .LP
- A noter que l'op\*'erateur formel Length (longueur) et le
- litt\*'eral Empty (vide) sont donn\*'es une fois de plus dans le corps
- du g\*'en\*'erateur parce qu'ils sont renomm\*'es lors de leur instantiation.
- Dans le cas de
- l'op\*'erateur, les arguments et la sorte de r\*'esultat ne sont donn\*'es
- que dans le corps. Le g\*'en\*'erateur Row (rang\*'ee) peut servir \*`a
- faire des lignes, des pages et des livres, comme suit:
- .LP
- NEWTYPE Line Row(Character, Width, Empty
- \(ulline, 80)
- .LP
- ENDNEWTYPE Line;
- .LP
- NEWTYPE Page Row(Line, Length, Empty
- \(ulpage, 66)
- .LP
- ENDNEWTYPE Page;
- .LP
- NEWTYPE Book Row(Page, Nr
- \(ulof
- \(ulpages,
- Empty
- \(ulbook,\ 10000)
- .LP
- ENDNEWTYPE Book;
- .sp 1P
- .LP
- D.6.2.2
- \fIH\*'eritage\fR
- .sp 9p
- .RT
- .PP
- L'h\*'eritage constitue un moyen d'\*'etablir toutes les valeurs de la
- sorte dite parente, certains ou tous les op\*'erateurs du type parent et toutes
- les \*'equations du type parent. Pour les litt\*'eraux et les op\*'erateurs,
- il existe une possibilit\*'e de les nommer \*`a nouveau. En g\*'en\*'eral,
- c'est une m\*'ethode
- satisfaisante parce que, dans ce cas, le lecteur peut d\*'eduire du contexte
- qu'il s'agit d'un autre type, m\* | me si les litt\*'eraux sont les m\* | mes.
- .PP
- Si un op\*'erateur n'est pas h\*'erit\*'e, on lui attribue syst\*'ematiquement
- un autre nom inaccessible \*`a l'utilisateur. Le fait que les op\*'erateurs
- sont encore pr\*'esents signifie que toutes les \*'equations du type parent
- sont encore pr\*'esentes (avec des op\*'erateurs portant un autre nom).
- Cela garantit que les valeurs
- parentes sont h\*'erit\*'ees.
- .PP
- Avec la possibilit\*'e d'emp\* | cher l'utilisation d'un op\*'erateur
- (lorsqu'il n'est pas h\*'erit\*'e), on assure la possibilit\*'e d'ajouter
- de nouveaux
- op\*'erateurs. Apr\*`es le mot cl\*'e ADDING, on peut donner des litt\*'eraux,
- des
- op\*'erateurs et des \*'equations comme dans un type ordinaire. Toutefois,
- il faut
- faire attention aux nouveaux litt\*'eraux et aux confusions possibles entre
- op\*'erateurs h\*'erit\*'es et ajout\*'es.
- .PP
- Lorsque les litt\*'eraux sont ajout\*'es, le r\*'esultat des op\*'erateurs
- h\*'erit\*'es, appliqu\*'es \*`a des nouveaux litt\*'eraux, doit \* | tre
- d\*'efini (par des
- \*'equations). Lorsque des op\*'erateurs sont ajout\*'es, il ne faut pas
- oublier les
- op\*'erateurs nomm\*'es \*`a nouveau de mani\*`ere invisible et les \*'equations
- associ\*'ees. Les \*'equations de d\*'efinition des op\*'erateurs ajout\*'es
- devraient \* | tre compatibles avec les \*'equations comportant des op\*'erateurs
- h\*'erit\*'es et non h\*'erit\*'es.
- .bp
- .PP
- Apr\*`es cette liste d'avertissements, prenons quelques
- exemples:
- .RT
- .LP
- a)
- Supposons que le newtype couleur est complet et disponible. Ce type est
- fond\*'e sur le choix et le m\*'elange de faisceaux de lumi\*`ere de couleur
- primaire. Il faudrait de longues r\*'eflexions et un long texte et/ou copie
- pour d\*'efinir quelque chose de semblable pour le choix et le m\*'elange
- de peinture.
- .LP
- Une solution commode \*`a ce probl\*`eme consiste \*`a faire du
- newtype Colour (couleur) un g\*'en\*'erateur en effectuant uniquement deux
- remplacements:
- .LP
- 1)
- la premi\*`ere ligne
- .LP
- \ \ NEWTYPE Colour
- .LP
- devient
- .LP
- \ \ GENERATOR Colour (TYPE Primary
- \(ulcolour)
- .LP
- 2)
- le mot\(hycl\*'e ENDNEWTYPE devient ENDGENERATOR.
- .LP
- On peut maintenant nommer \*`a nouveau le g\*'en\*'erateur lorsqu'il
- est instanci\*'e. Supposons que la sorte ant\*'erieure Primary
- \(ulcolour soit appel\*'ee Light
- \(ulprimary, et que la sorte Paint
- \(ulprimary soit d\*'efinie comme:
- .LP
- NEWTYPE Paint
- \(ulprimary
- .LP
- \ \ LITERALS Red, Yellow, Blue
- .LP
- ENDNEWTYPE Paint
- \(ulprimary;
- .PP
- Il est maintenant tr\*`es facile de d\*'efinir deux types similaires, un
- pour la lumi\*`ere et un pour la peinture:
- .LP
- NEWTYPE Light
- \(ulcolours Colour (Light
- \(ulprimary)
- ENDNEWTYPE;
- .LP
- NEWTYPE Paint
- \(ulcolours Colour (Paint
- \(ulprimary)
- ENDNEWTYPE;
- .PP
- Il n'y a pas de probl\*`eme jusqu'ici, mais comment peut\(hyon voir la
- diff\*'erence entre Take (Red) de Light
- \(ulcolour et celui de Paint
- \(ulcolour avec la m\* | me syntaxe? S'il est n\*'ecessaire de distinguer
- entre ces deux termes, on peut avoir recours \*`a l'h\*'eritage. Au lieu
- de Light
- \(ulcolours et
- Paint
- \(ulcolours, les types Light (lumi\*`ere) et Palette sont d\*'efinis par
- h\*'eritage et le nom de l'op\*'erateur Take (prendre) est modifi\*'e:
- .LP
- NEWTYPE Light
- .LP
- \ \ INHERITS Light
- \(ulcolours
- .LP
- \ \ OPERATORS (Beam=Take, Mix, Contains)
- .LP
- \ \ ADDING
- .LP
- \ \ \ \ LITERALS White
- .LP
- \ \ \ \ AXIOMS
- .LP
- \ \ \ \ \ \ White == Mix (Red, Mix (Yellow, Beam (Blue)))
- .LP
- ENDNEWTYPE Light;
- .LP
- Maintenant le newtype Light (lumi\*`ere) a les litt\*'eraux de
- Light
- \(ulcolours et le litt\*'eral White (blanc). Light
- \(ulcolours n'a pas de
- litt\*'eraux qui lui soient propres (car il utilise les litt\*'eraux de
- Light
- \(ulprimary), de sorte que White est le seul litt\*'eral de Light. Les
- op\*'erateurs et les \*'equations de Light sont les m\* | mes que ceux de
- Light
- \(ulcolours, \*`a l'exception du fait que le nom d'op\*'erateur Take est
- remplac\*'e par Beam (faisceau) et que l'\*'equation pour White a \*'et\*'e
- ajout\*'ee.
- L'axiome ajout\*'e indique que ce litt\*'eral ajout\*'e devient un \*'el\*'ement
- de l'ensemble de termes dans lequel les trois couleurs primaires sont m\*'elang\*'ees.
- .LP
- Le newtype Palette a les litt\*'eraux de Paint
- \(ulcolours et
- l'op\*'erateur Take est remplac\*'e par Paint (peinture):
- .LP
- NEWTYPE Palette
- .LP
- \ \ INHERITS Paint
- \(ulcolours
- .LP
- \ \ OPERATORS (Paint
- \(ulTake, Mix, Contains)
- .LP
- ENDNEWTYPE Palette;
- .LP
- b)
- Admettons que l'on veuille \*'etendre l'ensemble de types
- entiers (sorte Int
- \(ulset), introduit dans la section pr\*'ec\*'edente, par un
- op\*'erateur qui trouve le plus petit entier de l'ensemble. Tout d'abord,
- il faut se demander si cet op\*'erateur peut \* | tre introduit dans la
- d\*'efinition de
- g\*'en\*'erateur pour le rendre disponible \*`a tous les ensembles et autres
- choses.
- .bp
- .LP
- S'il est vrai que cela peut \* | tre fait, cela limiterait
- l'\*'el\*'ement \*`a la d\*'efinition de > et <. Cela ne convient pas \*`a
- tous les \*'el\*'ements (PId par exemple) et il peut \* | tre pr\*'ef\*'erable
- de cr\*'eer un newtype ayant la
- sorte New
- \(ulint
- \(ulset comportant un op\*'erateur Min.
- .LP
- NEWTYPE New
- \(ulint
- \(ulset
- .LP
- \ \ INHERITS Int
- \(ulset
- .LP
- \ \ OPERATORS ALL
- .LP
- \ \ ADDING
- .LP
- \ \ \ \ OPERATORS
- .LP
- \ \ \ \ \ \ Min: New
- \(ulint
- \(ulset\(hy> Integer
- .LP
- \ \ \ \ AXIOMS
- .LP
- \ \ \ \ \ \ Min(Empty
- \(ulint
- \(ulset) == Error!;
- .LP
- \ \ \ \ \ \ Min(Add(Empty
- \(ulint
- \(ulset, x))==x;
- .LP
- \ \ \ \ \ \ Min(Add(Add(nis,x),y))==
- .LP
- \ \ \ \ \ \ \ \ IF y <Min(Add(nis,x))
- .LP
- \ \ \ \ \ \ \ \ THEN y
- .LP
- \ \ \ \ \ \ \ \ ELSE Min(Add(nis,x))
- .LP
- \ \ \ \ \ \ \ \ FI
- .LP
- ENDNEWTYPE New
- \(ulint
- \(ulset;
- .PP
- Etant donn\*'e que l'adjonction apr\*`es une instantiation de g\*'en\*'erateur
- est relativement courante, le texte commen\*,cant par ADDING et se terminant
- juste avant le ENDNEWTYPE peut \* | tre donn\*'e \*`a l'int\*'erieur de
- l'instantiation de g\*'en\*'erateur. On en trouvera un exemple au \(sc\
- 5.4.1.12 de la Recommandation.
- .sp 1P
- .LP
- D.6.3
- \fIObservations relatives aux \*'equations\fR
- .sp 9p
- .RT
- .PP
- Lorsque l'on introduit un nouveau type de donn\*'ees, il est essentiel
- d'introduire suffisamment d'\*'equations. Dans les paragraphes qui suivent,
- trois observations sont pr\*'esent\*'ees concernant les \*'equations qui
- en faciliteront
- l'\*'etablissement.
- .RT
- .sp 1P
- .LP
- D.6.3.1
- \fIConditions g\*'en\*'erales\fR
- .sp 9p
- .RT
- .PP
- De quelque mani\*`ere que l'on construise les \*'equations, il faut
- tenir compte des faits suivants:
- .RT
- .LP
- a)
- chaque op\*'erateur appara\* | t au moins une fois dans l'ensemble des
- \*'equations (sauf pour les cas <<pathologiques>>);
- .LP
- b)
- tous les \*'enonc\*'es vrais peuvent \* | tre tir\*'es des \*'equations.
- Ils sont soit indiqu\*'es comme des axiomes, soit d\*'eduits par substitution
- de
- termes \*'equivalents dans les \*'equations;
- .LP
- c)
- aucune incoh\*'erence doit \* | tre d\*'ecel\*'ee, c'est\(hy\*`a\(hydire que
- l'on ne peut d\*'eduire des \*'equations que Vrai\ =\ Faux.
- .PP
- Une proc\*'edure permettant de trouver des \*'equations peut \* | tre
- exprim\*'ee en LDS informel, comme indiqu\*'e dans la figure\ D\(hy6.3.1.
- .sp 1P
- .LP
- D.6.3.2
- \fIApplication de fonctions aux\fR
- \fIconstructeurs\fR
- .sp 9p
- .RT
- .PP
- D'une mani\*`ere g\*'en\*'erale, l'ensemble d'op\*'erateurs poss\*`ede un
- sous\(hyensemble d'op\*'erateurs appel\*'es <<constructeurs>> et <<fonctions>>.
- Les
- constructeurs peuvent servir \*`a g\*'en\*'erer toutes les valeurs (classes
- d'\*'equivalence) de la sorte. Dans cette approche, les litt\*'eraux sont
- consid\*'er\*'es comme des op\*'erateurs sans argument.
- .RT
- .sp 1P
- .LP
- \fIExemples:\fR
- .sp 9p
- .RT
- .LP
- a)
- le type bool\*'een a ses litt\*'eraux pour constructeurs;
- .LP
- b)
- le type naturel a le litt\*'eral 0 et l'op\*'erateur Next comme
- constructeurs; un naturel quelconque peut \* | tre construit seulement avec\ 0
- et\ Next;
- .LP
- c)
- le g\*'en\*'erateur pour les ensembles a le litt\*'eral
- ensemble
- \(ulvide et l'op\*'erateur
- \(uladditif comme constructeurs; un ensemble
- quelconque ne peut \* | tre construit qu'en utilisant Empty
- \(ulset
- (ensemble
- \(ulvide) et Add (ajouter);
- .LP
- d)
- le type entier peut \* | tre construit au moyen des litt\*'eraux 0 et\
- 1, des op\*'erateurs\ + et moins unaires.
- .bp
- .LP
- .rs
- .sp 33P
- .ad r
- \fBFigura D\(hy6.3.1, (N), p. 12\fR
- .sp 1P
- .RT
- .ad b
- .RT
- .PP
- A noter qu'il y a parfois plusieurs choix possibles pour
- l'ensemble de constructeurs. Tout choix sera valable pour le reste de la
- pr\*'esente section mais les petits ensembles sont g\*'en\*'eralement les
- meilleurs.
- .PP
- Ensuite, les fonctions sont trait\*'ees une par une. Pour chaque argument
- d'une fonction, seuls sont \*'enum\*'er\*'es tous les termes possibles
- compos\*'es de
- constructeurs. Pour \*'eviter le probl\*`eme que posent les nombres infinis de
- termes, il faut appliquer la quantification.
- .RT
- .sp 1P
- .LP
- \fIExemples:\fR
- .sp 9p
- .RT
- .LP
- a)
- Pour les nombres naturels, cette liste peut \* | tre
- r\*'eduite \*`a:
- .LP
- 0
- .LP
- Next (n) o\*`u n est tout nombre naturel.
- .LP
- b)
- Pour les ensembles, la liste \*'eventuelle peut \* | tre:
- .LP
- empty
- \(ulset
- .LP
- Add (s,i) o\*`u s est tout ensemble et i tout \*'el\*'ement
- (item).
- .PP
- Si, dans le terme de droite d'une \*'equation ayant (s,i) du c\* | t\*'e
- gauche, il y a une diff\*'erence entre s \*'etant vide ou n'\*'etant pas
- vide, on peut r\*'e\*'ecrire la liste comme suit:
- .LP
- empty
- \(ulset
- .LP
- Add (empty
- \(ulset,i) o\*`u i est un \*'el\*'ement (item)
- quelconque,
- .LP
- Add (Add (s,i),j) o\*`u s est un ensemble quelconque et i, j, un \*'el\*'ement
- quelconque.
- .bp
- .PP
- Apr\*`es la cr\*'eation de cette liste, on obtient les parties de
- gauche des \*'equations en appliquant chaque fonction \*`a une combinaison
- d'arguments tir\*'es de la liste. Les identificateurs de valeurs de diff\*'erents
- arguments re\*,coivent des noms diff\*'erents. La proc\*'edure indiqu\*'ee
- ci\(hydessus pour les fonctions peut \* | tre appliqu\*'ee aux constructeurs;
- dans ce cas, elle donne les relations entre des termes o\*`u les constructeurs
- sont utilis\*'es dans
- diff\*'erents ordres.
- .sp 1P
- .LP
- \fIExemples:\fR
- .sp 9p
- .RT
- .LP
- a)
- Pour l'op\*'erateur de multiplication de nombres naturels
- portant la signature
- .LP
- <<*>>:Natural, Natural \(hy> Natural
- .LP
- Cette proc\*'edure donne la partie de gauche des \*'equations
- (incompl\*`etes) suivantes. L'utilisateur devra ajouter la partie de droite.
- .LP
- Next (n)
- 0*0
- ==
- . | | ;
- .LP
- Next (n)
- 0*Next (n)
- ==
- . | | ;
- .LP
- Next (n)*0
- ==
- . | | ;
- .LP
- Next (n)*Next (m)
- ==
- . | | ;
- .LP
- b)
- Pour les op\*'erateurs Is
- \(ulin (est
- \(uldans) et Delete
- (supprimer, dans le g\*'en\*'erateur Set (voir le \(sc\ D.6.2.1), cette
- approche est
- d\*'ej\*`a appliqu\*'ee.
- .LP
- c)
- Pour la sorte Colour, les constructeurs sont Take et Mix.
- Un op\*'erateur analogue \*`a Contains dans le \(sc\ D.6.1.4.2 doit \* | tre
- d\*'efini
- pour les arguments.
- .LP
- Take(p) o\*`u p est toute couleur primaire
- .LP
- Mix(p,c) o\*`u p est toute couleur primaire et c une couleur
- quelconque.
- .LP
- Etant donn\*'e que l'on avait annonc\*'e au \(sc D.6.1.4.2 que les
- \*'equations compl\*`etes seraient donn\*'ees pour cet op\*'erateur:
- .LP
- Contains(Take(p),q) ==p=q;
- .LP
- Contains(Mix(p,c),q) ==(p=q) OR Contains(c,q);
- .PP
- Cette proc\*'edure de construction peut donner plus d'\*'equations que
- cela n'est n\*'ecessaire, mais elle est tr\*`es s\* | re. Dans l'exemple
- susmentionn\*'e de multiplication des nombres naturels, il est vraisemblable
- que la propri\*'et\*'e de commutativit\*'e de la multiplication sera indiqu\*'ee
- et qu'en cons\*'equence, seule la derni\*`ere (ou la seconde) \*'equation
- des trois premi\*`eres sera n\*'ecessaire.
- .PP
- La proc\*'edure d\*'ecrite dans cette section peut \* | tre appliqu\*'ee en
- combinaison avec la proc\*'edure d\*'ecrite dans la section pr\*'ec\*'edente,
- o\*`u elle est utile pour la t\* | che <<Penser
- \(ul\*`a
- \(ulun
- \(ul\*'enonc\*'e>>.
- .RT
- .sp 1P
- .LP
- D.6.3.3
- \fISp\*'ecification d'ensemble d'essai\fR
- .sp 9p
- .RT
- .PP
- On peut aussi consid\*'erer les \*'equations du point de vue de la mise
- en oeuvre. Si les op\*'erateurs sont mis en oeuvre sous la forme de fonctions
- dans un langage de programmation, les \*'equations montrent comment ces
- fonctions
- doivent \* | tre test\*'ees.
- .PP
- Il convient d'\*'evaluer les expressions correspondant \*`a la partie de
- gauche d'une \*'equation, de faire de m\* | me pour la partie droite de cette
- \*'equation et de voir si elles sont \*'equivalentes. C'est la construction
- FOR ALL qui pourrait poser certains probl\*`emes. Ceux\(hyci peuvent souvent
- \* | tre r\*'esolus de mani\*`ere pragmatique:
- .RT
- .LP
- Au lieu de
- tif de test peut utiliser
- \ \ FOR ALL i IN Integer
- .LP
- le dispositif de test peut utiliser\ \ FOR ALL i IN { (em10,\(em1,0,1,1 }
- et proc\*'eder ainsi dans la plupart des cas.
- .PP
- Consid\*'erer des \*'equations comme n\*'ecessaires \*`a la mise en oeuvre
- peut \* | tre utile pour ce qui est de la t\* | che <<Penser
- \(ul\*`a
- \(ulun
- \(ul\*'enonc\*'e>>
- dans la proc\*'edure du \(sc\ D.6.3.1.
- .sp 1P
- .LP
- D.6.4
- \fICaract\*'eristiques\fR
- .sp 9p
- .RT
- .PP
- La pr\*'esente section d\*'ecrit certains dispositifs du LDS qui sont
- rarement n\*'ecessaires dont on peut pratiquement se passer, mais qui rendent
- quelquefois la t\* | che plus facile.
- .RT
- .sp 1P
- .LP
- D.6.4.1
- \fIOp\*'erateurs cach\*'es\fR
- .sp 9p
- .RT
- .PP
- Il arrive que l'ensemble des \*'equations puisse \* | tre simplifi\*'e ou
- rendu plus lisible gr\* | ce \*`a l'introduction d'un op\*'erateur suppl\*'ementaire,
- mais cet op\*'erateur ne devrait pas \* | tre utilis\*'e dans les processus.
- Cela signifie
- que l'op\*'erateur est visible de l'int\*'erieur mais cach\*'e en dehors de la
- d\*'efinition de type.
- .bp
- .PP
- On peut atteindre ce r\*'esultat en d\*'efinissant un <<type cach\*'e>>,
- c'est\(hy\*`a\(hydire un type que l'utilisateur ne doit pas employer. A
- partir de ce
- type cach\*'e, l'utilisateur peut h\*'eriter de tous les op\*'erateurs
- auxquels il peut avoir acc\*`es; c'est le type h\*'erit\*'e qui doit \* | tre
- utilis\*'e. On peut s'assurer
- qu'il est correctement employ\*'e en examinant toutes les d\*'eclarations de
- variables (aucune variable de sorte introduite par le type cach\*'e ne doit
- appara\* | tre).
- .PP
- Ce qui caract\*'erise les op\*'erateurs cach\*'es, c'est qu'ils peuvent
- \* | tre atteints par une restriction de leur visibilit\*'e aux seules
- \*'equations. On peut le faire en pla\*,cant un point d'exclamation apr\*`es
- l'op\*'erateur.
- .RT
- .sp 1P
- .LP
- \fIExemple:\fR
- .sp 9p
- .RT
- .PP
- La mani\*`ere courante de faire un ensemble d'un \*'el\*'ement \*`a partir
- du g\*'en\*'erateur Set est la suivante:
- .RT
- .LP
- Add(empty
- \(ulset,x)
- .LP
- et c'est ainsi que doit le faire chaque utilisateur. Dans les \*'equations, le
- sp\*'ecificateur peut utiliser un op\*'erateur sp\*'ecial, par exemple:
- .LP
- Mk
- \(ulset!:Item\(hy>Set;
- .LP
- d\*'efini par l'\*'equation:
- .LP
- Mk
- \(ulset!(itm) == Add(empty
- \(ulset,itm);
- .LP
- qui peut \* | tre utilis\*'e dans des d\*'efinitions de type partiel mais
- non dans le
- corps de processus en LDS.
- .sp 1P
- .LP
- D.6.4.2
- \fIRelations d'ordre\fR
- .sp 9p
- .RT
- .PP
- Lorsqu'il faut sp\*'ecifier une relation d'ordre sur les \*'el\*'ements
- d'une sorte, cela signifie en g\*'en\*'eral qu'il faut d\*'efinir quatre
- op\*'erateurs
- (<,<=,>,>=) et les propri\*'et\*'es math\*'ematiques ordinaires (transitivit\*'e,
- etc.).
- S'il y a de nombreux litt\*'eraux, il faut \*'egalement donner de nombreuses
- \*'equations. Par exemple, le type de donn\*'ees pr\*'ed\*'efinies Character
- est d\*'efini de cette mani\*`ere.
- .PP
- Le LDS comporte une caract\*'eristique qui permet d'abr\*'eger ces
- d\*'efinitions de type longues, peu lisibles et ennuyeuses: c'est l'abr\*'eviation
- ORDERING (relation d'ordre).
- .PP
- ORDERING est donn\*'e dans la liste d'op\*'erateurs, de pr\*'ef\*'erence
- au d\*'ebut ou \*`a la fin de celle\(hyci. Cela permet d'introduire des
- op\*'erateurs de relation d'ordre et les \*'equations normales. Lorsque
- ORDERING est sp\*'ecifi\*'e, il faut
- donner les litt\*'eraux, s'il en existe, dans l'ordre ascendant.
- .RT
- .sp 1P
- .LP
- \fIExemple:\fR
- .sp 9p
- .RT
- .LP
- NEWTYPE Even
- \(uldecimal
- \(uldigit
- .LP
- \ \ LITERALS 0,2,4,6,8
- .LP
- \ \ OPERATORS
- .LP
- \ \ \ \ ORDERING
- .LP
- ENDNEWTYPE Even
- \(uldecimal
- \(uldigit;
- .PP
- Maintenant, l'ordre 0<2<4<6<8 est implicite.
- .PP
- Au \(sc D.6.2.2 (H\*'eritage), on soulignait qu'il fallait s'assurer que
- les litt\*'eraux \*'etaient ajout\*'es \*`a une sorte h\*'erit\*'ee. Il
- convient d'en indiquer ici la raison.
- .PP
- Admettons que l'on d\*'esire l'extension suivante de la sorte
- Even
- \(uldecimal
- \(uldigit:
- .RT
- .LP
- NEWTYPE Decimal
- \(uldigit
- .LP
- \ \ INHERITS Even
- \(uldecimal
- \(uldigit
- .LP
- \ \ OPERATORS ALL
- .LP
- \ \ ADDING
- .LP
- \ \ \ \ LITERALS 1,3,5,7,9
- .LP
- \ \ \ \ AXIOMS
- .LP
- \ \ \ \ \ \ 0<1; 1<2;
- .LP
- \ \ \ \ \ \ 2<3; 3<4;
- .LP
- \ \ \ \ \ \ 4<5; 5<6;
- .LP
- \ \ \ \ \ \ 6<7; 7<8;
- .LP
- \ \ \ \ \ \ 8<9
- .LP
- ENDNEWTYPE Decimal
- \(uldigit;
- .bp
- .PP
- Les axiomes donn\*'es ici ne peuvent \* | tre omis. Sans ces axiomes, il
- ne peut y avoir qu'un ordre dit partiel:
- .LP
- 0<2<4<6<8
- .LP
- et
- .LP
- 1<3<5<7<9.
- .PP
- Avec les axiomes ci\(hydessus, on obtient un ordre complet:
- .LP
- 0<1<2<3<4<5<6<7<8<9
- .LP
- mais avec l'axiome <<9<0>> au lieu de l'ensemble d'axiomes ci\(hydessus,
- l'ordre
- complet serrait le suivant:
- .LP
- 1<3<5<7<9<0<2<4<6<8.
- .sp 1P
- .LP
- D.6.4.3
- \fISortes avec champs\fR
- .sp 9p
- .RT
- .PP
- Comme indiqu\*'e au \(sc 5.4.1.10 de la Recommandation, on peut d\*'efinir
- une sorte structur\*'ee sans constructions sp\*'eciales, mais les sortes
- structur\*'ees sont \*`a la fois courantes et utiles, ce qui justifie certaines
- constructions
- suppl\*'ementaires dans le langage.
- .PP
- Une sorte structur\*'ee devrait \* | tre utilis\*'ee lorsqu'une valeur
- d'objet est form\*'ee par l'association de valeurs de plusieurs sortes.
- Chaque valeur de cette association est caract\*'eris\*'ee par un nom, appel\*'e
- nom de champ. La sorte
- d'un champ est fixe.
- .RT
- .sp 1P
- .LP
- \fIExemples:\fR
- .sp 9p
- .RT
- .LP
- NEWTYPE Subscriber
- .LP
- \ \ STRUCT numbers Number
- \(ulkey;
- .LP
- \ \ \ \ \ \ name Name
- \(ulkey;
- .LP
- \ \ \ \ \ \ admin Administrative;
- .LP
- ENDNEWTYPE Subscriber;
- .LP
- NEWTYPE Name
- \(ulkey
- .LP
- \ \ STRUCT name,
- .LP
- \ \ \ \ \ \ street Charstring;
- .LP
- \ \ \ \ \ \ number Integer;
- .LP
- \ \ \ \ \ \ city Charstring;
- .LP
- ENDNEWTYPE Name
- \(ulKey;
- .PP
- Avec une sorte structur\*'ee, certains op\*'erateurs sont d\*'efinis
- implicitement:
- .LP
- a)
- l'op\*'erateur constructeur, <<(.<<avant, et>>.)>> apr\*`es les
- valeurs de champ;
- .LP
- b)
- les op\*'erateurs de s\*'election de champ, les variables de la
- sorte structur\*'ee suivies par un ! et le nom de champ, ou suivies par
- le nom de champ entre parenth\*`eses. Il ne faut pas confondre la variable
- suivie d'un !
- avec l'op\*'erateur cach\*'e (\(sc\ D.6.4.1).
- .PP
- On trouvera un exemple dans la figure D\(hy6.4.1.
- .LP
- .rs
- .sp 12P
- .ad r
- \fBFigure D.6.4.1 (comme tableau) [T39.100], p. 13\fR
- .sp 1P
- .RT
- .ad b
- .RT
- .LP
- .bp
- .sp 1P
- .LP
- D.6.4.4
- \fISortes index\*'ees\fR
- .sp 9p
- .RT
- .PP
- Une sorte index\*'ee est une sorte pour laquelle le type a pour nom
- d'op\*'erateur Extract! (extraction). Dans les types de donn\*'ees pr\*'ed\*'efinies,
- le
- g\*'en\*'erateur Array est un tel type. Array est l'un des exemples les
- plus courants de type index\*'e.
- .PP
- Pour l'op\*'erateur cach\*'e Extract!, il existe une syntaxe concr\*`ete
- sp\*'eciale qui doit \* | tre appliqu\*'ee en dehors des d\*'efinitions
- de type.
- .PP
- On peut penser que le type Index dans le g\*'en\*'erateur pr\*'ed\*'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
- \(ulkey ne puisse pas \* | tre utilis\*'ee comme Index.
- .RT
- .sp 1P
- .LP
- \fIExemple:\fR
- .sp 9p
- .RT
- .LP
- NEWTYPE Subsc
- \(uldata
- \(ulbase
- .LP
- \ \ Array (Name
- \(ulkey, Subscriber)
- .LP
- ENDNEWTYPE Subsc
- \(uldata
- \(ulbase;
- .PP
- Les sortes Name
- \(ulkey et Subscriber sont celles qui ont \*'et\*'e d\*'efinies dans la
- section pr\*'ec\*'edente. Supposons qu'il existe une proc\*'edure Bill
- comportant un param\*`etre de sorte Subscriber et que cette proc\*'edure soit
- d\*'efinie dans un processus qui comporte aussi une variable Sub
- \(uldb de la sorte Subsc
- \(uldata
- \(ulbase. Dans ce processus, l'appel suivant pourrait
- appara\* | tre.
- .LP
- CALL Bill (Sub
- \(uldb)
- (. `P.M.`, `Downingstreet`10. `Londres`.)));
- .sp 1P
- .LP
- D.6.4.5
- \fIValeur par d\*'efaut de variables\fR
- .sp 9p
- .RT
- .PP
- Comme indiqu\*'e dans la section concernant la d\*'eclaration de
- variables (\(sc\ D.3.10.1), il est possible d'affecter des valeurs \*`a
- une variable imm\*'ediatement apr\*`es la d\*'eclaration. Cependant, certains
- types ont une valeur qui sera (presque) toujours la valeur initiale d'une
- variable. Il existe une
- caract\*'eristique qui permet d'\*'eviter d'\*'ecrire la valeur initiale
- pour chaque
- d\*'eclaration: la clause DEFAULT.
- .PP
- A titre d'exemple, on peut consid\*'erer l'ensemble. Il est tr\*`es
- probable que presque toutes les variables, de tout ensemble imaginaire,
- seront initialis\*'ees avec empty
- \(ulset.
- .PP
- La notation:
- .RT
- .LP
- DEFAULT empty
- \(ulset
- .LP
- apr\*`es la liste d'\*'equations indique que chaque variable de chaque
- instantiation de ce g\*'en\*'erateur sera initialis\*'ee \*`a la valeur
- empty
- \(ulset de cette
- instantiation, sauf s'il y a une initialisation explicite (voir le
- \(sc\ D.3.10.1.)
- .PP
- 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.
- .sp 1P
- .LP
- D.6.4.6
- \fIOp\*'erateurs actifs\fR
- .sp 9p
- .RT
- .PP
- Les utilisateurs qui connaissent la Recommandation Z.104 de 1984
- concernant le LDS pourraient se demander ce qui est arriv\*'e aux op\*'erateurs
- dits actifs. En fait, cette caract\*'eristique a \*'et\*'e supprim\*'ee,
- pour les raisons
- suivantes:
- .RT
- .LP
- a)
- elle n'est pas n\*'ecessaire car les op\*'erateurs courants et les proc\*'edures
- et/ou macros offrent la m\* | me capacit\*'e d'expression;
- .LP
- b)
- elle compromet la lisibilit\*'e des \*'equations;
- .LP
- c)
- de nombreux utilisateurs ont eu des difficult\*'es \*`a
- l'utiliser correctement;
- .LP
- d)
- elle ne s'int\*`egre pas au mod\*`ele de type de donn\*'ees
- abstrait fond\*'e sur les alg\*`ebres initiales qui constituent le mod\*`ele
- choisi
- comme base math\*'ematique de cette partie du LDS.
- .LP
- .rs
- .sp 6P
- .sp 2P
- .LP
- \fBMONTAGE: \(sc D.7 SUR LE RESTE DE CETTE PAGE\fR
- .sp 1P
- .RT
- .LP
- .bp
-