Le clônage

Ce programme présente le clonage de scalaires et d'objets.

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

Mode compilé

Commande de compilation

upscmp Source=cloner.upl

Commande d'exécution

cloner

Mode interprété

upssng Source=cloner.upl

Fichier source

Source Composant "Exemple d'emploi du clonage" Version 4.0.0;

Enumere
/*****/
Type Personne1 Defaut
/*******************/
Fin Type

Type Personne2 Defaut
/*******************/ Fin Type

Variable
Procedure Bonjour()
/*****************/
Debut
Ecran.Ecrire("bonjour");
Fin Procedure

Fonction Personne2.Cloner(EntrepotCible : Nul Ou Entrepot=Nul, Profondeur : ProfondeurClonage=ClonageObjetSeul) Retourner Nul Ou Personne2
/************************************************************************/
Variable
/******/
Debut
R=Personne2();
Selon Profondeur Faire Fin Selon
Retourner R;
Fin Fonction

Fonction F(Per1 : Nul Ou Personne2, Per2 : Nul Ou Personne2) Retourner ComparaisonObjet
/*************************************************************************************/
Debut
Si Per1==Nul Ou Per2==Nul Alors Fin Si
Si Per1.Nom<Per2.Nom Alors Fin Si
Si Per1.Nom>Per2.Nom Alors Fin Si
Retourner ComparaisonEgal;
Fin Fonction

Principal
/*******/
Debut
X1=Personne1();
X1.Nom="nom1";
X1.Prenom="prenom1";
X1.Pointure=1;
X1.Taille=10.1;
X1.Yeux=Rouge;

X2=Personne1();
X2.Nom="nom2";
X2.Prenom="prenom2";
X2.Pointure=2;
X2.Taille=20.2;
X2.Yeux=Rouge;

Y1=Personne2();
Y1.Nom="nom1";
Y1.Prenom="prenom1";
Y1.Pointure=1;
Y1.Taille=10.1;
Y1.Yeux=Rouge;

Y2=Personne2();
Y2.Nom="nom2";
Y2.Prenom="prenom2";
Y2.Pointure=2;
Y2.Taille=20.2;
Y2.Yeux=Rouge;

A1=Binaire("coucou");
A2=A1.Cloner();
A1=Nul;
Ecran.Ecrire(Caractere(A1));
Ecran.Ecrire(Caractere(A2));

B1="coucou";
B2=B1.Cloner();
B1=Nul;
Ecran.Ecrire(B1);
Ecran.Ecrire(B2);

C1=Date("16-5-1968 22:45:58");
C2=C1.Cloner();
C1=Nul;
Ecran.Ecrire(Caractere(C1, "%jj-%mm-%A %HH:%Mi:%S"));
Ecran.Ecrire(Caractere(C2, "%jj-%mm-%A %HH:%Mi:%S"));

D1=32;
D2=D1.Cloner();
D1=Nul;
Ecran.Ecrire(D1);
Ecran.Ecrire(D2);

E1=Bleu;
E2=E1.Cloner();
E1=Nul;
Ecran.Ecrire(Couleur(E1));
Ecran.Ecrire(Couleur(E2));

F1=DivisionParZero;
F2=F1.Cloner();
F1=Nul;
Ecran.Ecrire(F2.NomException);

G1=Fichier("coucou.txt", EcritureTexte);
G2=G1.Cloner();
G1=Nul;
Ecran.Ecrire(G2.NomFlux);

H1=Global;
H2=H1.Cloner();
H1=Nul;
Ecran.Ecrire(H2.NomModule);

J1=32.64;
J2=J1.Cloner();
J1=Nul;
Ecran.Ecrire(J1);
Ecran.Ecrire(J2);

N1=Bonjour;
N2=N1.Cloner();
N1=Nul;
N2();

O1=EntrepotSysteme;
O2=O1.Cloner();
O1=Nul;
Ecran.Ecrire(O2.NomEntrepot);
Ecran.Ecrire("\n");

Ecran.Ecrire("Clonage type");
X3=X1.Cloner();
X1.Nom="NOM1";
X1.Prenom="PRENOM1";
Ecran.Ecrire(X3.Nom+" "+X3.Prenom);
X1.Nom="nom1";
X1.Prenom="prenom1";
X3=X1.Cloner(Nul, ClonageObjetsDirects);
X1.Nom="NOM1";
X1.Prenom="PRENOM1";
Ecran.Ecrire(X3.Nom+" "+X3.Prenom);
X1.Nom="nom1";
X1.Prenom="prenom1";
X3=X1.Cloner(Nul, ClonageRecursif);
X1.Nom="NOM1";
X1.Prenom="PRENOM1";
Ecran.Ecrire(X3.Nom+" "+X3.Prenom);
X1.Nom="nom1";
X1.Prenom=prenom1";
Y3=Y1.Cloner();
Y1.Nom="NOM1";
Y1.Prenom="PRENOM1";
Ecran.Ecrire(Y3.Nom+" "+Y3.Prenom);
Y1.Nom="nom1";
Y1.Prenom="prenom1";
Y3=Y1.Cloner(Nul, ClonageObjetsDirects);
Y1.Nom="NOM1";
Y1.Prenom="PRENOM1";
Ecran.Ecrire(Y3.Nom+" "+Y3.Prenom);
Y1.Nom="nom1";
Y1.Prenom="prenom1";
Y3=Y1.Cloner(Nul, ClonageRecursif);
Y1.Nom="NOM1";
Y1.Prenom="PRENOM1";
Ecran.Ecrire(Y3.Nom+" "+Y3.Prenom);
Y1.Nom="nom1";
Y1.Prenom="prenom1";
Ecran.Ecrire("\n");

Ecran.Ecrire("Clonage liste");
K1=ListeDe(X1);
K1+=X2;
K2=K1.Cloner();
X1.Nom="NOM1";
X1.Prenom="PRENOM1";
X2.Nom="NOM2";
X2.Prenom="PRENOM2";

Pour X3=K2.ParcoursAuDebut() JusquA K2.DernierElement() Faire Fin Pour
X1.Nom="nom1";
X1.Prenom="prenom1";
X2.Nom="nom2";
X2.Prenom="prenom2";
K2=K1.Cloner(Nul, ClonageObjetsDirects);
X1.Nom="NOM1";
X1.Prenom="PRENOM1";
X2.Nom="NOM2";
X2.Prenom="PRENOM2";
Pour X3=K2.ParcoursAuDebut() JusquA K2.DernierElement() Faire Fin Pour
X1.Nom="nom1";
X1.Prenom="prenom1";
X2.Nom="nom2";
X2.Prenom="prenom2";
K2=K1.Cloner(Nul, ClonageRecursif);
X1.Nom="NOM1";
X1.Prenom="PRENOM1";
X2.Nom="NOM2";
X2.Prenom="PRENOM2";
Pour X3=K2.ParcoursAuDebut() JusquA K2.DernierElement() Faire Fin Pour
X1.Nom="nom1";
X1.Prenom="prenom1";
X2.Nom="nom2";
X2.Prenom="prenom2";
Ecran.Ecrire("\n");

Ecran.Ecrire("Clonage reference");
L1=ReferenceDe(X1);
L2=L1.Cloner();
X1.Nom="NOM1";
X1.Prenom="PRENOM1";
X2.Nom="NOM2";
X2.Prenom="PRENOM2";
Ecran.Ecrire(L2.Valeur.Nom+" "+L2.Valeur.Prenom);
X1.Nom="nom1";
X1.Prenom="prenom1";
X2.Nom="nom2";
X2.Prenom="prenom2";
L2=L1.Cloner(Nul, ClonageObjetsDirects);
X1.Nom="NOM1";
X1.Prenom="PRENOM1";
X2.Nom="NOM2";
X2.Prenom="PRENOM2";
Ecran.Ecrire(L2.Valeur.Nom+" "+L2.Valeur.Prenom);
X1.Nom="nom1";
X1.Prenom="prenom1";
X2.Nom="nom2";
X2.Prenom="prenom2";
L2=L1.Cloner(Nul, ClonageRecursif);
X1.Nom="NOM1";
X1.Prenom="PRENOM1";
X2.Nom="NOM2";
X2.Prenom="PRENOM2";
Ecran.Ecrire(L2.Valeur.Nom+" "+L2.Valeur.Prenom);
X1.Nom="nom1";
X1.Prenom="prenom1";
X2.Nom="nom2";
X2.Prenom="prenom2";
Ecran.Ecrire("\n");

Ecran.Ecrire("Clonage tableau");
M1[0]=Y1;
M1[1]=Y2;
M2=M1.Cloner();
Y1.Nom="NOM1";
Y1.Prenom="PRENOM1";
Y2.Nom="NOM2";
Y2.Prenom="PRENOM2";
Pour I=0 JusquA 1 Faire Fin Pour
Y1.Nom="nom1";
Y1.Prenom="prenom1";
Y2.Nom="nom2";
Y2.Prenom="prenom2";
M2=M1.Cloner(Nul, ClonageObjetsDirects);
Y1.Nom="NOM1";
Y1.Prenom="PRENOM1";
Y2.Nom="NOM2";
Y2.Prenom="PRENOM2";
Pour I=0 JusquA 1 Faire Fin Pour
Y1.Nom="nom1";
Y1.Prenom="prenom1";
Y2.Nom="nom2";
Y2.Prenom="prenom2";
M2=M1.Cloner(Nul, ClonageRecursif);
Y1.Nom="NOM1";
Y1.Prenom="PRENOM1";
Y2.Nom="NOM2";
Y2.Prenom="PRENOM2";
Pour I=0 JusquA 1 Faire Fin Pour
Y1.Nom="nom1";
Y1.Prenom="prenom1";
Y2.Nom="nom2";
Y2.Prenom="prenom2";
Ecran.Ecrire("\n");

Ecran.Ecrire("Clonage arbre");
P1=ArbreBinaireDe(F, Faux);
P1+=Y1;
P1+=Y2;
P2=P1.Cloner();
Y1.Nom="NOM1";
Y1.Prenom="PRENOM1";
Y2.Nom="NOM2";
Y2.Prenom="PRENOM2";
Pour Y3=P2.ParcoursAuDebut() JusquA P2.DernierElement() Faire Fin Pour
Y1.Nom="nom1";
Y1.Prenom="prenom1";
Y2.Nom="nom2";
Y2.Prenom="prenom2";
P2=P1.Cloner(Nul, ClonageObjetsDirects);
Y1.Nom="NOM1";
Y1.Prenom="PRENOM1";
Y2.Nom="NOM2";
Y2.Prenom="PRENOM2";
Pour Y3=P2.ParcoursAuDebut() JusquA P2.DernierElement() Faire Fin Pour
Y1.Nom="nom1";
Y1.Prenom="prenom1";
Y2.Nom="nom2";
Y2.Prenom="prenom2";
P2=P1.Cloner(Nul, ClonageRecursif);
Y1.Nom="NOM1";
Y1.Prenom="PRENOM1";
Y2.Nom="NOM2";
Y2.Prenom="PRENOM2";
Pour Y3=P2.ParcoursAuDebut() JusquA P2.DernierElement() Faire Fin Pour
Y1.Nom="nom1";
Y1.Prenom="prenom1";
Y2.Nom="nom2";
Y2.Prenom="prenom2";
Ecran.Ecrire("\n");
Fin Principal

Résultat de l'exécution

coucou coucou 16-05-1968 22:45:58 32 bleu DivisionParZero coucou.txt cloner 32.6400000000000 bonjour Systeme Clonage type nom1 prenom1 nom1 prenom1 nom1 prenom1 nom1 prenom1 nom1 prenom1 nom1 prenom1 Clonage liste NOM1 PRENOM1 NOM2 PRENOM2 nom1 prenom1 nom2 prenom2 nom1 prenom1 nom2 prenom2 Clonage reference NOM1 PRENOM1 nom1 prenom1 nom1 prenom1 Clonage tableau NOM1 PRENOM1 NOM2 PRENOM2 nom1 prenom1 nom2 prenom2 nom1 prenom1 nom2 prenom2 Clonage arbre NOM1 PRENOM1 NOM2 PRENOM2 nom1 prenom1 nom2 prenom2 nom1 prenom1 nom2 prenom2