LANGAGE ORIENTÉ OBJET


PRINCIPE
FONCTIONS LOCALES
VARIABLES
EXEMPLE

















































PRINCIPE

Code et datas

         Dans les langages traditionnels, le code et les datas sont séparés. Or, dans des applications complexes (comme par exemple l´animation d´acteurs autonomes), il n´est plus possible d´exercer un contrôle exhaustif au moyen d´un programme unique se déroulant linéairement. Il est plus facile de laisser à ces acteurs le soin de décider eux-mêmes du détail de leurs comportements, le contrôle se limitant à donner des directives générales.
         Pour cela on considère que chaque acteur est en fait un programme accédant à la base de données et à des mémoires locales. Tout se passe comme si plusieurs programmes se déroulaient en parallèle et pouvaient dialoguer entre eux et avec le "superviseur" (en l´occurrence l´animateur qui devient alors un metteur en scène).

Implémentation dans anyflo

         Le langage anyflo est un interpréteur, écrit en C, mais n´ayant pas les limitations des langages compilés définissant des structures fixes: En effet tout y est défini dynamiquement: datas, types et même le code qui peut être généré dynamiquement en cours d´exécution.

FONCTIONS LOCALES

Définition de fonctions locales

         La commande local(0)vol(id)="f" ajoute, dans le volume id, une fonction locale copie de la fonction f().
         Une façon commode de procéder est d´écrire une fonction, par exemple toto, et de faire: local(0)vol(id)="toto".
         Le texte, et le code compilé, d´une copie de la fonction toto deviennent des propriétés du volume id.
         Une même fonction peut donc être chargée dans différents objets et s´y exécuter de façon non synchrone.

Accès à une fonction locale

         local(id_loc)obj(id_obj) référence la fonction locale id_loc de l´objet id_obj.
Exemples:
         1) $(local(2)vol(1)): Imprime le texte de la 2ème fonction locale du volume 1.
         2) local("toto")vol(1)="b": Remplace la fonction locale toto du volume 1 par la fonction b.
         3) edit local vol(1): Édite les noms des fonctions locales du volume 1.
         4) $(local(2)vol(1)): Imprime le texte de la fonction locale 2 du volume 1.
         5) w=local("toto")vol(1): Met dans w le texte de la fonction locale toto du volume 1.

Exécution de fonctions locales

Exécution par défaut

         Si yes local est actif, la 1ère fonction locale d´un volume est exécutée avant l´affichage de celui-ci

Appels internes

         Une fonction locale d´un objet peut en appeler une autre de ce même objet par simple invocation de son nom (et il ne peut pas y avoir d´ambiguite avec d´autres fonctions portant le même nom situées au dehors de cet objet).

Appels externes

         Il est possible d´exécuter n´importe quelle fonction locale de n´importe quel objet, soit depuis un autre objet, soit depuis le programme principal par:
         exec local(n)vol(id); exécute la fonction locale numéro n du volume id sans paramètres.
         exec local("toto")vol(id); exécute la fonction locale toto du volume id sans paramètres.
         exec local(n)vol(id)var(x)var(y)var(z); exécute la fonction locale numéro n du volume id en lui passant les paramètres x, y, z.

VARIABLES

Variables externes

         Comme toute fonction, une fonction locale peut avoir accès aux variables externes qui sont connues partout.
Declaration:
         extern nom_de_la_variable;

Variables statiques

         Comme toute fonction, une fonction locale peut posséder des variables statiques qui sont des varaibles permanentes mais connues à l´intérieur de cette fonction.
Déclarations:
         static x,y,z; Définit les varaibles statiques x, y, z.
         static x=(1,2,3); Définit la variable statique x

Global variables

         Des variables globales, c´est à dire propres à un objet et connues par toutes les fonctions locales (et inconnues à l´extérieur), peuvent être définies par la déclaration:
global g;
global g=1;: en l´initialisant à 1.

EXEMPLE

         demo1_local() lance l´exécution de la fonction demo1_local().
         Cette fonction encapsule un même programme dans plusieurs cubes qui se comportent différamment.
         Elle définit aussi une vue adaptative.