> Tech > Utiliser des définitions centrales

Utiliser des définitions centrales

Tech - Par Renaud ROSSET - Publié le 24 juin 2010
email

La compilation conditionnelle simplifie le développement modulaire, particulièrement dans l’utilisation des définitions centrales des types de données et des prototypes de procédures. Les programmes de service RPG modernes rendent possibles le développement orienté objet. En fait, on encapsule un objet dans un programme de service. Ainsi, un programme de service

Utiliser des définitions centrales

NUM contiendrait des procédures qui manipulent des nombres. Sans trop d’efforts, on se retrouve avec des dizaines de programmes de service pour des objets basiques et d’applications. Toutefois, pour utiliser une procédure dans un programme, il faut inclure un prototype. Plutôt que de créer manuellement les prototypes dans chaque programme qui les utilise, vous pouvez copier une définition centrale des prototypes.

Le membre STDTYPH (figure 1) définit les types de données standard à utiliser dans n’importe quel programme. Le membre NUMH (figure 2) définit des définitions communes et les prototypes de procédures pour manipuler des nombres. Pour utiliser les définitions dans un programme, on ajoute des directives /COPY pour les membres aux D-specs :

/COPY itoolkitH,stdTypH
/COPY itoolkitH,numH

On observera comment le membre NUMH (figure 2) définit des variables comme les types de données standard dans STDTYPH (figure 1). Par conséquent, NUMH dépend de STDTYPH.

Supposons qu’un autre programme veuille appeler une procédure dans NUM mais sans vouloir utiliser directement les types standard dans STDTYPH. Le programme ne devrait pas avoir à se préoccuper des dépendances internes de NUMH; il doit simplement inclure une directive /COPY pour NUMH. Pour que le programme se compile, NUMH doit inclure une directive /COPY (B en figure 2). Cependant, maintenant le premier programme avec les deux directives /COPY ne se compilera pas parce que STDTYPH est copié deux fois et qu’il y a donc des définitions de données en double. La compilation conditionnelle résout élégamment ce problème (en A de la figure 1) à l’aide d’un nom de condition appelé STDTYPH. La première fois que STDTYPH est copié par le compilateur, le nom de condition STDTYPH n’a pas été défini, donc il est défini et le membre est traité. Quand STDTYPH est copié à nouveau, le nom de condition STDTYPH est déjà défini et le compilateur saute à la fin du membre. Cette approche peut être utilisée dans tous les membres de copie pour permettre leur assemblage dans n’importe quel ordre, comme le montre A en figure 2.

Il existe une autre technique dans NUMH qui mérite attention. Ce membre de copie est conçu pour être inclus dans le programme de service NUM et les programmes qui utilisent ses procédures. Certaines des procédures convertissent un nombre en un jeton (une courte chaîne de caractères) et exposent la longueur du jeton en utilisant une variable exportée appelée numTokenLen à laquelle le programme appelant peut accéder si nécessaire. Le programme de service NUM doit exporter numTokenLen. Les programmes qui accèdent à la variable doivent l’importer. Par conséquent, NUMH contient deux définitions de la variable (C en figure 2) qui sont contrôlées par la compilation conditionnelle. Le comportement par défaut est de définir numTokenLen comme un import, mais le programme de service NUM définit le nom de condition numExport avant de copier NUMH pour définir numTokenLen comme un export. Cette façon de faire permet de créer des membres de copie qui pourront être interprétés différemment par différents programmes.

Téléchargez cette ressource

Guide de Sécurité IA et IoT

Guide de Sécurité IA et IoT

Compte tenu de l'ampleur des changements que l'IA est susceptible d'entraîner, les organisations doivent élaborer une stratégie pour se préparer à adopter et à sécuriser l'IA. Découvrez dans ce Livre blanc Kaspersky quatre stratégies efficaces pour sécuriser l'IA et l'IoT.

Tech - Par Renaud ROSSET - Publié le 24 juin 2010