Les contraintes sur les types de données

Ce programme présente la déclaration de contraintes sur un type.

Le fichier source est ${UPS_HOME}/upssdk/demo/${UPS_LANGUAGE}/contrainte.upl.

Mode compilé

Commande de compilation

upscmp Source=contrainte.upl

Commande d'exécution

contrainte

Mode interprété

upssng Source=contrainte.upl

Fichier source

Source Composant "Exemple sur les contraintes" Version 4.0.0;

Enumere
/******/
Type TypeA=Entier Contrainte Objet>=1;
Type TypeB=Entier Contrainte Objet>2;
Type TypeC=Reel Contrainte Objet<=3;
Type TypeD=Reel Contrainte Objet<4;
Type TypeE=Entier Contrainte Objet Entre 2 Et 10;
Type TypeF=Reel Contrainte Objet Dans (1.0, 2.0, 3.0, 4.0);
Type TypeG=Caractere Contrainte Objet>="ABCD";
Type TypeH=Caractere Contrainte Objet Entre "A" Et "Z";
Type TypeI=Caractere Contrainte Objet Dans ("A", "B", "C", "D", "E");

Type TypeJ Defaut
/***************/ Fin Type

Type TypeJBis Defaut Transactionnel
/*********************************/
Fin Type

Type TypeM Defaut
/***************/
Selon A : Couleur Faire Fin Selon
Constructeur();
Fin Type

Type TypeN Defaut
/***************/
Fin Type

Type TypeO=TypeN Contrainte();
Type TypeP=Caractere Contrainte Objet Comme "a[xyz]c";

Prive :
Contrainte TypeO()
/****************/
Debut
Si (A!=Nul) OuExclusif (B!=Nul) Alors Fin Si
Retourner Faux;
Fin Contrainte

Public :
Procedure P(A : Entier Entree Sortie, B : Reel Entree Sortie, C : Caractere Entree Sortie)
/**********************************************************************************/
Debut
Ecran.Ecrire("P");
A=3;
B=4.0;
C="C";
Fin Procedure

Fonction F() Retourner Booleen
/****************************/
Debut
Retourner Vrai;
Fin Fonction

Fonction G(C : Couleur) Retourner Couleur
/***************************************/
Debut
Retourner C;
Fin Fonction

Principal
/*******/
Variable
/******/
Debut
VA=2;
Ecran.Ecrire(VA);
VB=3;
Ecran.Ecrire(VB);
VC=2.71;
Ecran.Ecrire(VC);
VD=3.14;
Ecran.Ecrire(VD);
VE=3;
Ecran.Ecrire(VE);
VF=2.0;
Ecran.Ecrire(VF);
VG="ZZZZ";
Ecran.Ecrire(VG);
VH="C";
Ecran.Ecrire(VH);
VI="C";
Ecran.Ecrire(VI);
VP="axc";
Ecran.Ecrire(VP);
Ecran.Ecrire("\n");

VA=2;
VF=3.0;
VI="B";
P(VA, VF, VI);
Ecran.Ecrire(VA);
Ecran.Ecrire(VF);
Ecran.Ecrire(VI);
Ecran.Ecrire("\n");

VJ=TypeJ();
VJ.A=2;
Ecran.Ecrire(VJ.A);
VJ.B=3;
Ecran.Ecrire(VJ.B);
VJ.C=2.71;
Ecran.Ecrire(VJ.C);
VJ.D=3.14;
Ecran.Ecrire(VJ.D);
VJ.E=3;
Ecran.Ecrire(VJ.E);
VJ.F=2.0;
Ecran.Ecrire(VJ.F);
VJ.G="ZZZZ";
Ecran.Ecrire(VJ.G);
VJ.H="C";
Ecran.Ecrire(VJ.H);
VJ.I="C";
Ecran.Ecrire(VJ.I);
Ecran.Ecrire("\n");

TypeJBis.ActiverContrainte(ContrainteValidation);
VJBis=TypeJBis();
VJBis.A=2;
VJBis.B=3;
VJBis.C=2.71;
VJBis.D=3.14;
VJBis.E=3;
VJBis.F=2.0;
VJBis.G="ZZZZ";
VJBis.H="C";
VJBis.I="C";
TachePrincipale.TransactionCourante.Valider();
Ecran.Ecrire(VJBis.A);
Ecran.Ecrire(VJBis.B);
Ecran.Ecrire(VJBis.C);
Ecran.Ecrire(VJBis.D);
Ecran.Ecrire(VJBis.E);
Ecran.Ecrire(VJBis.F);
Ecran.Ecrire(VJBis.G);
Ecran.Ecrire(VJBis.H);
Ecran.Ecrire(VJBis.I);
Ecran.Ecrire("\n");

Si F() Alors Fin Si
VL=VK+"le monde";
Ecran.Ecrire(VL);
Ecran.Ecrire("\n");

VM.A=G(Bleu);
VM.A.CasBleu.B=10;
Ecran.Ecrire(VM.A.CasBleu.B);
VM.A=G(Rouge);
VM.A.Defaut.C=20;
Ecran.Ecrire(VM.A.Defaut.C);
Ecran.Ecrire("\n");

TypeO.ActiverContrainte(ContrainteValidation);
VO=TypeO();
VO.A="Bonjour le monde";
VO.B=Nul;
TypeO.ActiverContrainte(ContrainteImmediate);
Ecran.Ecrire(VO.A);
Fin Principal

Résultat de l'exécution

3 4 2.71 3.14 3 2.0 ZZZZ C C axc P 3 4.0 C 2 3 2.71 3.14 3 2.0 ZZZZ C C 2 3 2.71 3.14 3 2.0 ZZZZ C C Bonjour le monde 10 20 Bonjour le monde