Téléchargement des produits


Version anglaise


 


Description

Une fois qu'une instance de classe est déclarée dans un programme via l'ordre REF_CLASSE, une syntaxe particulière est à utiliser afin de pouvoir accéder à ses attributs, en lecture comme en écriture.

Cette syntaxe est basée sur le principe des Getter et Setter (accesseurs et mutateurs des langages objet).


Récupération de la valeur d'un attribut de classe

Pour récupérer la valeur d'un attribut scalaire ou tableau d'une variable de type REF_CLASSE, la syntaxe suivante doit être utilisée :

MaVariableResultat = MaVariableRefClasse[(indiceVarD1[,indiceVarD2])] .getNomAttribut() [(indiceD1[,indiceD2])]


Dans le cas d'un attribut de type REF_CLASSE, l'opérateur point permet d'accéder au Getter de la classe associée à l'attribut REF_CLASSE, et donc de récupérer les valeurs de ses propres attributs, sans limite d'imbrication d'attributs REF_CLASSE dans la chaine d'invocation :

MaVariableResultat = MaVariableRefClasse[(indiceVarD1[,indiceVarD2])].getNomAttributRefClasse1()[(indiceD1[,indiceD2])].[getNomAttributRefClasseX())[(indiceD1[,indiceD2])].]getNomAttribut()[(indiceD1[,indiceD2])]


MaVariableResultat doit être une variable ayant un type Adélia compatible avec celui de l'attribut concerné.

indiceVarD1 et indiceVarD2 peuvent être des constantes ou des variables numériques représentant respectivement des postes de tableau à une ou deux dimensions, dans le cas où la variable REF_CLASSE concernée est un tableau.

De la même façon, indiceD1  et indiceD2 peuvent être des constantes ou des variables numériques représentant respectivement des postes de tableau à une ou deux dimensions, dans le cas où l'attribut concerné est un tableau.


Exemples :


Classe Adélia CONTROLE_TECHNIQUE dont le source L4G est :

*attributs

{

ALPHA(20)    IdAgrementControleur;

ALPHA(400)   Anomalies();

ALPHA(400)   Defaillances(100);

DATE         DateExpiration;

}


Classe Adélia IMMATRICULATION dont le source L4G est :

*attributs

{

ALPHA(15)                      Numero;

DATE                           DateImmatriculation;

REF_CLASSE(CONTROLE_TECHNIQUE) ControlesTechnique(40)

}


Classe Adélia VOITURE dont le source L4G est :

*attributs

{

ALPHA(15)                      Marque;

ALPHA(250)                     Modele;

NUM_BIN_2                      NbCv;

DATE                           DateAchat;

ALPHA(50)                      Options(30)

REF_CLASSE(IMMATRICULATION)    Immatriculation

}


Puis dans le programme Visual Adélia :

* Déclaration d'une variable REF_CLASSE ainsi que des variables de travail :

REF_CLASSE(VOITURE) iVoiture(3)

NUM_BIN_2 MonBin2

DATE MaDate

ALPHA(50) TabOptions(30)

ALPHA(50) option

ALPHA(20) IdControleur;


* Récupération de la valeur de l'attribut 'NbCv' de la classe iVoiture :

MonBin2 = iVoiture(1).getNbCv()


* Récupération de la valeur de l'attribut 'NbCv' de la classe iVoiture :

MaDate = iVoiture(1).getDateAchat()


* Récupération de la valeur du 1er élément de l'attribut 'Options' de l'instance de classe iVoiture(1) :

Option = iVoiture(1).getOptions()(1)


* Récupération de l'identifiant d'agrément du centre qui a réalisé le premier contrôle technique :

IdControleur = iVoiture(1).getImmatriculation().getControlesTechnique()(1).getIdAgrementControleur()


Remarque :

On suppose ici que le poste de tableau iVoiture(1) est déjà instancié (par exemple qu'il est un des paramètres en entrée du programme ou de la procédure), ou alors qu'il a été instancié au sein du programme via l'ordre L4G NEW. On suppose aussi que les attributs REF_CLASSE des classes CONTROLE_TECHNIQUE et IMMATRICULATION  ont également été instanciés via le même ordre L4G NEW.

iVoiture (1) = new VOITURE()


Il est possible de tester si le poste de tableau iVoiture(1) est instancié, à l'aide du mot réservé *NULL :

Si iVoiture (1) = *NULL ...


 Il en va de même pour les instances des classes IMMATRICULATION et CONTROLE_TECHNIQUE :

Si iVoiture(1) .getImmatriculation()= *NULL ...

Si iVoiture(1) .getImmatriculation().getControlesTechnique()(1)= *NULL ...


Récupération de tous les éléments d'un attribut de tableau

Pour récupérer la totalité des valeurs d'un attribut de tableau à une dimension, deux dimensions ou dynamique, la syntaxe suivante doit être utilisée :
              MaVariableTableau = MaVariableRefClasse[(indiceVarD1[,indiceVarD2])] .getNomAttributTableau()

             MaVariableTableau = MaVariableRefClasse[(indiceVarD1[,indiceVarD2])].getNomAttributRefClasse1()[(indiceD1[,indiceD2])].[getNomAttributRefClasseX())[(indiceD1[,indiceD2])].]getNomAttributTableau()


MaVariableTableau doit être une variable tableau ayant un type Adélia et des dimensions compatibles avec ceux de l'attribut tableau concerné.

indiceVarD1 et indiceVarD2 peuvent être des constantes ou des variables numériques représentant respectivement des postes de tableau à une ou deux dimensions, dans le cas où la variable REF_CLASSE concernée est un tableau.

De la même façon, indiceD1 et indiceD2 peuvent être des constantes ou des variables numériques représentant respectivement des postes de tableau à une ou deux dimensions, dans le cas où l'attribut REF_CLASSE concerné est un tableau.


Si le nombre de postes de MaVariableTableau  est différent du nombre de postes de l'attribut tableau, seuls les postes en commun sont récupérés.


Exemple :

REF_CLASSE(VOITURE) iVoiture

ALPHA(50)           TabOptions(30)

ALPHA(400)          Defaillances(50)


iVoiture = new VOITURE()


* .... valorisation des attributs d'instance...


* Récupération de la valeur de l'attribut tableau 1D 'Options' de l'instance de classe VOITURE dans la variable tableau "tabOptions"
tabOptions = iVoiture.getOptions()


* Récupération des 50 premières occurrences de la valeur de l'attribut tableau 1D 'Defaillances' du premier contrôle technique dans la variable tableau "Defaillances"
Defaillances = iVoiture.getImmatriculation().getControlesTechnique()(1).getDefaillances()

↑ Haut de page



Modification de la valeur d'un attribut de classe

Pour fixer la valeur d'un attribut scalaire ou tableau d'une variable de type REF_CLASSE, la syntaxe suivante doit être utilisée :

MaVariableRefClasse [(indiceVarD1[,indiceVarD2])] .setNomAttribut(NouvelleValeur[,indiceD1[,indiceD2]])


Dans le cas d'un attribut de type REF_CLASSE, l'opérateur point permet d'accéder au Getter de la classe associée à l'attribut REF_CLASSE, et donc de fixer les valeurs de ses propres attributs, sans limite d'imbrication d'attributs REF_CLASSE dans la chaine d'invocation :

         MaVariableRefClasse[(indiceVarD1[,indiceVarD2])].getNomAttributRefClasse1()[(indiceD1[,indiceD2])].[getNomAttributRefClasseX())[(indiceD1[,indiceD2])].]setNomAttribut(NouvelleValeur[,indiceD1[,indiceD2]])


NouvelleValeur peut être une constante alphanumérique, numérique ou une variable ayant un type Adélia compatible avec celui de l'attribut concerné. Dans le cas d'une constante numérique avec décimales, le point est le seul séparateur décimal admis. 

indiceVarD1 et indiceVarD2 peuvent être des constantes ou des variables numériques représentant respectivement les postes de tableau à une ou deux dimensions, dans le cas où la variable REF_CLASSE concernée est un tableau.

De la même façon, indiceD1 et indiceD2 peuvent être des constantes ou des variables numériques représentant respectivement les postes de tableau à une ou deux dimensions, dans le cas où l'attribut concerné est un tableau.


Exemples

Les exemples ci-dessous utilisent les classes VOITURE, IMMATRICULATION et CONTROLE_TECHNIQUE décrites dans les exemples du paragraphe "Récupération de la valeur d'un attribut de classe"

Se reporter à la documentation de l'ordre L4G NEW pour la syntaxe de l'instanciation.


* Déclaration des variables :

REF_CLASSE(VOITURE)         iVoiture

REF_CLASSE(CAMION)          iCamion(5)

REF_CLASSE(IMMATRICULATION) iImmatriculation

DATE                        DateImmat

num_bin_2                   Idx


* Exemple 1 : mise à jour d'un attribut de type REF_CLASSE d'une instance sous forme de poste de tableau, via une variable instance intermédiaire :

iCamion(1) = new CAMION()

iImmatriculation = new IMMATRICULATION()

iCamion(1).setImmatriculation(iImmatriculation)


* Exemple 2 : mise à jour directe d'un attribut de type REF_CLASSE :

iVoiture = new VOITURE()

iVoiture.setImmatriculation(new IMMATRICULATION())


* Exemple 3 : mise à jour d'un attribut de type REF_CLASSE tableau dans une sous-classe :

iVoiture = new VOITURE()

iVoiture.setImmatriculation(new IMMATRICULATION())

iVoiture.getImmatriculation().setControlesTechnique(new CONTROLE_TECHNIQUE(), 1)


* Exemple 4 : mise à jour d'un attribut de type ALPHA :

iVoiture = new VOITURE()

iVoiture.setMarque('Peugeot')


* Exemple 5 : mise à jour d'un attribut de type DATE dans une sous-classe :

iVoiture = new VOITURE()

iVoiture.setImmatriculation(new IMMATRICULATION())

iVoiture.getImmatriculation().setDateImmatriculation(DateImmat)


* Exemple 6 : mise à jour d'un élément de tableau d'un attribut de type ALPHA :

iVoiture = new VOITURE()

iVoiture.setOptions('Climatisation', 1)

idx  = 2

iVoiture.setOptions('Toit ouvrant', idx)


* Exemple 7 : mise à jour d'un élément de tableau d'un attribut de type ALPHA dans une classe imbriquée :

iVoiture = new VOITURE()

iVoiture.setImmatriculation(new IMMATRICULATION())

iVoiture.getImmatriculation().setControlesTechnique(new CONTROLE_TECHNIQUE(), 2)

iVoiture.getImmatriculation().getControlesTechnique()(2).setDefaillances('Plaquettes frein AVG usées', 1)

idx  = 2

iVoiture.getImmatriculation().getControlesTechnique()(2).setDefaillances('Pneu ARG lisse',2)


↑ Haut de page



Pour mettre à jour tous les éléments d'un attribut tableau

MaVariableRefClasse[(indiceVarD1[,indiceVarD2])] .setNomAttributTableau(NouveauTableau | NouvelleValeur)

MaVariableRefClasse[(indiceVarD1[,indiceVarD2])].getNomAttributRefClasse1()[(indiceD1[,indiceD2])].[getNomAttributRefClasseX())[(indiceD1[,indiceD2])].]setNomAttributTableau(NouveauTableau | NouvelleValeur)


NouveauTableau doit être une variable tableau ayant un type Adélia et des dimensions compatibles avec ceux de l'attribut tableau concerné. Si le nombre de postes de NouveauTableau est différent du nombre de postes de l'attribut tableau, la mise à jour porte uniquement sur le nombre de postes en commun. 

NouvelleValeur peut être une constante alphanumérique, numérique, ou une variable simple, ayant un type Adélia compatible avec celui de l'attribut tableau concerné. Les mots réservés *VRAI et *FAUX pour le type BOOL ainsi que *NULL pour le type IMAGE, sont également admis.  Plus largement, les mots réservés ayant un type Adélia compatible avec celui de l'attribut tableau concerné sont admis.

indiceVarD1 et indiceVarD2 peuvent être des constantes ou des variables numériques représentant respectivement les postes de tableau à une ou deux dimensions, dans le cas où la variable REF_CLASSE concernée est un tableau.

De la même façon, indiceD1 et indiceD2 peuvent être des constantes ou des variables numériques représentant respectivement les postes de tableau à une ou deux dimensions, dans le cas où l'attribut REF_CLASSE concerné est un tableau.


Exemples :

Classe Adélia CLASSE_EXEMPLE dont le source L4G est :

*attributs

{

NUM_BIN_4    NumBin4_1D(2);

NUM_BIN_4    NumBin4_2D(2, 2);

}


* Programme de test

REF_CLASSE(CLASSE_EXEMPLE)iClasseExp

REF_CLASSE(VOITURE)       iVoiture

NUM_BIN_4                 MonBin4

NUM_BIN_4                 MonTableau2DBin4(2,2)

NUM_BIN_4                 MonTableau1DBin4(2)



     * Exemple 1 : mise à jour d'un attribut tableau à partir d'une valeur :

MonBin4 = 5865


iClasseExp .setTableauBin4_2D (444)

iClasseExp .setTableauBin4_1D (444)


* Exemple 2 : mise à jour d'un attribut tableau à partir d'une variable tableau :

MonTableau1DBin4(1) = 5

MonTableau1DBin4(2) = 10

MonTableau2DBin4(1,1) = 20

MonTableau2DBin4(1,2) = 40

MonTableau2DBin4(2,1) = 60

MonTableau2DBin4(2,2) = 80

iClasseExp.setTableauBin4_1D (MonTableau1DBin4)

iClasseExp.setTableauBin4_2D (MonTableau2DBin4)


* Exemple 3 : mise à jour d'un attribut tableau de sous-classe à partir d'une valeur :

    iVoiture = new VOITURE()

    iVoiture.setImmatriculation(new IMMATRICULATION())

    iVoiture.getImmatriculation().setControlesTechnique(new CONTROLE_TECHNIQUE(), 2)

    iVoiture.getImmatriculation().getControlesTechnique()(2).setDefaillances('Feux de changement de direction')

↑ Haut de page



Pour mettre à jour un élément d'un attribut de type tableau dynamique

Exemple :

Classe Adélia TICKET dont le source L4G est :

*attributs

{

   ALPHA(15)    Id;

   ALPHA(250)   Comments();

   DATE         Updates();

   REF_CLASSE(SOURCE)       Sources()

}

Classe Adélia SOURCE dont le source L4G est :

*attributs

{

   ALPHA(15)    Nom;

   ALPHA(1000)  Lignes();

}


Exemples :

REF_CLASSE(TICKET)     iTick
REF_CLASSE(SOURCE)     iSrc
DATE currDate


        * Instanciation

iTick = new TICKET()
iTick.Comments = new ALPHA(250)()(10)

iTick.Updates = new DATE()(10)
iTick.Sources = new SOURCE()(10)


* Mise à jour

iTick.setId('1')

iTick.setComments('Création du ticket', 1)

iTick.setUpdates(currDate, 1)

iSrc = new SOURCE()

iTick.setSources(iSrc, 1)


* Mise à jour d'un attribut tableau dynamique dans une sous-classe

iTick = new TICKET()

iTick.Sources = new SOURCE()(10)

iSrc = new SOURCE()

iTick.setSources(iSrc, 1)

iTick.getSources()(1).Lignes = new ALPHA(1000)()(500)

iTick.getSources()(1).setLignes('* Déclaration des variables', 1)

iTick.getSources()(1).setLignes('BOOL bErreur', 2)



Pour mettre à jour tous les éléments d'un attribut de type tableau dynamique

MaVariableRefClasse[(indiceVarD1[,indiceVarD2])] .setNomAttributTableau(NouveauTableau | NouvelleValeur)

MaVariableRefClasse[(indiceVarD1[,indiceVarD2])].getNomAttributRefClasse1()[(indiceD1[,indiceD2])].[getNomAttributRefClasseX())[(indiceD1[,indiceD2])].]setNomAttributTableau(NouveauTableau | NouvelleValeur)


NouveauTableau doit être une variable tableau de dimension 1 ayant un type Adélia compatible avec celui de l'attribut tableau dynamique concerné.
Lorsque le nombre de postes de NouveauTableau est différent du nombre d'éléments courants de l'attribut tableau dynamique, la mise à jour porte sur le nombre de postes de NouveauTabeau, et le nombre de postes et d'éléments de l'attribut tableau dynamique après affectation est égal au nombre de postes de "NouveauTabeau".

NouvelleValeur peut être une constante alphanumérique, numérique, ou une variable simple, ayant un type Adélia compatible avec celui de l'attribut tableau concerné. Les mots réservés *VRAI et *FAUX pour le type BOOL ainsi que *NULL pour le type IMAGE, sont également admis. Plus largement, les mots réservés ayant un type Adélia compatible avec celui de l'attribut tableau concerné sont admis. 
NouvelleValeur est affecté à tous les postes alloués de l'attribut concernés.

indiceVarD1 et indiceVarD2 peuvent être des constantes ou des variables numériques représentant respectivement les postes de tableau à une ou deux dimensions, dans le cas où la variable REF_CLASSE concernée est un tableau. 

De la même façon,  indiceD1 et indiceD2 peuvent être des constantes ou des variables numériques représentant respectivement les postes de tableau à une ou deux dimensions, dans le cas où l'attribut REF_CLASSE concerné est un tableau.


Exemple :

REF_CLASSE(TICKET) itick
REF_CLASSE(SOURCE) iSrc
DATE               tabDates(10)

ALPHA(250)         myComment

ALPHA(1000)        LigneCommentaire


myComment = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'

* ... valorisation des occurrences du tableau 1D "tabDates"...


* Instanciation de la classe et des tableaux dynamiques
iTick = new TICKET()
iTick.Comments = new ALPHA(250)()(10)
iTick.Updates = new DATE()(10)
iTick.Sources = new SOURCE()(10)


* Mise à jour de l'attribut tableau dynamique "Updates" à partir de la totalité de la variable tableau "tabDates"
iTick.setUpdates(tabDates)


* Mise à jour de l'attribut tableau dynamique "Comments" à partir de la variable simple "myComment"
iTick.setComments(myComment)


* Cas dans une sous-classe

iTick = new TICKET()

iTick.Sources = new SOURCE()(10)

iSrc = new SOURCE()

iTick.setSources(iSrc, 1)

iTick.getSources()(1).Lignes = new ALPHA(1000)()(500)

iTick.getSources()(1).setLignes(LigneCommentaire)


↑ Haut de page



Pour ajouter un élément en fin d'un attribut de type tableau dynamique

Toujours à partir des classes TICKET et VOITURE, il est possible d'ajouter une valeur à la fin des tableaux dynamiques 'Comments', 'Updates', 'Sources ou 'Anomalies', et ce, quelle que soit la taille initiale allouée pour ces tableaux.


Exemples :

REF_CLASSE(TICKET)              itick
REF_CLASSE(SOURCE)              iSrc

REF_CLASSE(VOITURE)             iVoiture

REF_CLASSE(CONTROLE_TECHNIQUE)  iControleTech 
DATE                            currDate

       

       * Exemple 1

iTick = new TICKET()
iTick.Comments = new ALPHA(250)()(1)

iTick.Updates = new DATE()(5)
iTick.Sources = new SOURCE()(2)

iTick.setId('1')


iTick.setComments('Création du ticket', 1)

iTick.setComments('Ticket creation', *FIN)


iTick.setUpdates(currDate, 1)


iSrc = new SOURCE()

iTick.setSources(iSrc, 1)

iSrc = new SOURCE()

iTick.setSources(iSrc, *FIN)

iSrc = new SOURCE()

iTick.setSources(iSrc, *FIN)


* Exemple 2 : sous-classe

   iVoiture = new VOITURE()

   iVoiture.setImmatriculation(new IMMATRICULATION())

   iControleTech = new CONTROLE_TECHNIQUE ()

   iVoiture.getImmatriculation().setControlesTechnique(iControleTech , 2)

   iVoiture.getImmatriculation().getControlesTechnique()(2).Anomalies = new ALPHA(250)()(1)


   iVoiture.getImmatriculation().getControlesTechnique()(2).setAnomalies('Anomalie 1', 1)

   iVoiture.getImmatriculation().getControlesTechnique()(2).setAnomalies('Anomalie 2', *FIN)

↑ Haut de page



Récupération du nombre d'éléments d'un attribut de type tableau dynamique

La fonction prédéfinie &NBR_ELT permet de récupérer le nombre d'éléments d'un attribut de type tableau dynamique.


Exemples :


REF_CLASSE(TICKET)  itick

REF_CLASSE(VOITURE) iVoiture(4,4)

NUM_BIN_2           nbComments

NUM_BIN_2           nbAnomalies


        * Exemple 1

iTick = new TICKET()
iTick.Comments = new ALPHA(250)()(1)


iTick.setComments('Comment 1', 1)

iTick.setComments('Comment 2', *FIN)

iTick.setComments('Comment 3', *FIN)


nbComments = &NBR_ELT(iTick.getComments())


* Exemple 2 : sous-classe

   iVoiture(2,2) = new VOITURE()

   iVoiture(2,2).setImmatriculation(new IMMATRICULATION())

   iVoiture(2,2).getImmatriculation().setControlesTechnique(new CONTROLE_TECHNIQUE (), 1)

   iVoiture(2,2).getImmatriculation().getControlesTechnique()(1).Anomalies = new ALPHA(250)()(20)


   iVoiture(2,2).getImmatriculation().getControlesTechnique()(1).setAnomalies('Anomalie 1', 1)

   iVoiture(2,2).getImmatriculation().getControlesTechnique()(1).setAnomalies('Anomalie 2', 2)


   nbAnomalies = &NBR_ELT(iVoiture(2,2).getImmatriculation().getControlesTechnique()(1).getAnomalies())


↑ Haut de page


Copyrights     Ι      ©Hardis Group 2025 - Toute représentation ou reproduction intégrale ou partielle faite sans le consentement écrit d'Hardis Group est illicite.


  • Aucune étiquette