1

Object Layer

L'Object Layer implémente les prototypes des classes et des instances So-o et toutes les fonctions nécessaires à la classe Root.

Tout le code de l'Object Layer de So-o est dans le fichier OL.js.

Remarquez que seules les fonctions de l'interface de So-o et les méthodes de la classe Root accèdent à ce code.

  1. export function Definition(cname, sc, rev, cprops, iprops, cmsgs, imsgs) {

Le conteneur d'une classe est une fonction appelée Definition. Elle a 7 arguments.

cname spécifie le nom de la classe, un nom de variable valide.

sc est la référence globale de la superclasse de la nouvelle classe. Si sc vaut null, la nouvelle classe hérite par défaut de la classe Root définie par la variable globale Root.

rev est le numéro de révision de la classe, un entier > 0.

cprops et iprops listent les propriétés de la classe et des instances de la classe. Une propriété est une chaîne de caractères. Une liste de propriétés est un tableau ou vaut null.

cmsgs et imsgs sont des listes associatives de messages et de méthodes de la classe et des instances de la classe. Un message est une chaîne de caractères. Une méthode est le code d'une fonction. Une liste de messages et de méthodes est un objet ou vaut null.

  1.     const varname= /^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/;
  2.  
  3.     if (! (typeof cname === 'string' && cname.match(varname)))
  4.         throw new TypeError();

Vérifie si le nom de la classe est une chaîne de caractères et un nom de variable valide. Déclenche une exception TypeError en cas d'erreur.

  1.     if (! (sc === null || (typeof sc === 'object' && sc.prototype instanceof Definition)))
  2.         throw new TypeError();

Vérifie si la superclasse est null ou une classe. Déclenche une exception TypeError en cas d'erreur.

  1.     if (!(Number.isInteger(rev) && rev > 0))
  2.         throw new TypeError();

Vérifie si le numéro de révision est un entier > 0. Déclenche une exception TypeError en cas d'erreur.

  1.     this.prototype = Object.create(Definition.prototype);

Initialise la nouvelle Definition.

  1.     this.name = cname;
  2.     this.revision = rev;
  3.     this.superclass = 'Root' !== cname ? (sc ? sc : Root) : null;
  4.     this.cproperties = cprops;
  5.     this.iproperties = iprops;
  6.     this.cmessages = cmsgs;
  7.     this.imessages = imsgs;

Si sc est null, la superclasse de la classe vaut Root excepté pour la classe Root qui est la seule classe sans superclasse.

  1.     this.attributes = {};
  2. }

Un objet contient les valeurs des propriétés d'une classe.

NOTE : Seule la fonction defclass de l'interface peut construire une Definition.

  1. Definition.prototype.toString = function() {
  2.     return 'class(' + this.name + ')';
  3. };

La représentation textuelle d'une classe retourne le mot class suivi par le nom de la classe entre parenthèses.

  1. Definition.prototype.sendself = function(msg, args) {
  2.     return class_send_message(this, msg, args);
  3. }

sendself envoie msg avec args en argument à la classe. args est un tableau. sendself retourne le résultat de l'appel de class_send_message avec la classe, le message et les paramètres du message en argument.

NOTE : Seule la fonction sendmsg de l'interface appelle la méthode sendself d'une Definition.

  1. Definition.prototype.sendsuper = function(fc, msg, args) {
  2.     return class_super_send_message(fc, this, msg, args);
  3. }

sendsuper envoie msg avec args en argument à la classe, dans le contexte de la classe fc. args est un tableau.

sendsuper retourne le résultat de l'appel de class_super_send_message avec la classe de la méthode de l'appel, la classe, le message et les paramètres du message en argument.

NOTE : Seule la fonction supersend de l'interface appelle la méthode sendsuper d'une Definition.

  1. export function Instance(c) {

Le conteneur d'une instance est une fonction appelée Instance. Elle a 1 argument.

c est la référence globale de la classe de la nouvelle instance.

  1.     if (! (typeof c === 'object' && c.prototype instanceof Definition))
  2.         throw new TypeError();

Vérifie si la classe est une Definition. Déclenche une exception TypeError en cas d'erreur.

  1.     this.prototype = Object.create(Instance.prototype);

Initialise la nouvelle Instance.

  1.     this.class = c;

Lie l'instance à sa classe.

  1.     this.attributes = {};
  2. }

Un objet contient les valeurs des propriétés d'une instance.

NOTE : Seule la fonction class_make de l'Object Layer construits une Instance.

  1. Instance.prototype.toString = function() {
  2.     return 'object(' + this.class.name + ')';
  3. };

La représentation textuelle d'une instance retourne le mot object suivi par le nom de la classe de l'instance entre parenthèses.

  1. Instance.prototype.sendself = function(msg, args) {
  2.     return object_send_message(this, msg, args);
  3. }

sendself envoie msg avec args en argument à l'instance. args est un tableau. sendself retourne le résultat de l'appel de object_send_message avec l'instance, le message et les paramètres du message en argument.

NOTE : Seule la fonction sendmsg de l'interface appelle la méthode sendself d'une Instance.

  1. Instance.prototype.sendsuper = function(fc, msg, args) {
  2.     return object_super_send_message(fc, this, msg, args);
  3. }

sendsuper envoie msg avec args en argument à l'instance, dans le contexte de la classe fc. sendsuper retourne le résultat de l'appel de object_super_send_message avec la classe de la méthode de l'appel, l'instance, le message et les paramètres du message en argument.

NOTE : Seule la fonction supersend de l'interface appelle la méthode sendsuper d'une Instance.

Le reste du code implémente toutes les fonctions de l'Object Layer dont la classe Root a besoin.

class_class_method_symbol
Retourne le nom d'une méthode de classe.
class_instance_method_symbol
Retourne le nom d'une méthode d'instance.
class_name
Retourne le nom d'une classe.
class_revision
Retourne le numéro de révision d'une classe.
class_superclass
Retourne la superclasse d'une classe.
class_class_properties
Retourne les propriétés de classe définies par une classe.
class_instance_properties
Retourne les propriétés d'instance définies par une classe.
class_class_messages
Retourne les messages de classe définis par une classe.
class_instance_messages
Retourne les messages d'instance définis par une classe.
class_set_class_properties
Initialise les propriétés de classe d'une classe.
class_set_instance_properties
Initialise les propriétés d'instance d'une classe.
class_set_class_messages
Initialise les messages de classe d'une classe.
class_set_instance_messages
Initialise les messages d'instance d'une classe.
class_add_class_message
Ajoute un message de classe à une classe.
class_remove_class_message
Retire un message de classe à une classe.
class_add_instance_message
Ajoute un message d'instance à une classe.
class_remove_instance_message
Retire un message d'instance à une classe.
class_add_class_property
Ajoute une propriété de classe à une classe.
class_remove_class_property
Retire une propriété de classe à une classe.
class_add_instance_property
Ajoute une propriété d'instance à une classe.
class_remove_instance_property
Retire une propriété d'instance à une classe.
class_attributes
Retourne les valeurs des propriétés d'une classe.
class_set_attributes
Initialise les valeurs des propriétés d'une classe.
class_is_kind_of
Vérifie si une classe est une sous-classe d'une autre classe.
class_get
Retourne la valeur d'une propriété d'une classe.
class_set
Modifie la valeur d'une propriété d'une classe.
class_make
Retourne une nouvelle instance d'une classe.
object_class
Retourne la classe d'une instance.
object_superclass
Retourne la superclasse d'une instance.
object_assume
Change la classe d'une instance.
object_attributes
Retourne les valeurs des propriétés d'une instance.
object_set_attributes
Initialise les valeurs des propriétés d'une instance.
object_get
Retourne la valeur d'une propriété d'une instance.
object_set
Modifie la valeur d'une propriété d'une instance.
object_copy
Retourne une copie d'une instance.
class_find_class_property
Vérifie si une propriété de classe d'une classe existe.
class_find_instance_property
Vérifie si une propriété d'instance d'une classe existe.
class_find_class_method_class
Retourne la classe qui implémente un message de classe.
class_find_class_method
Retourne la fonction qui implémente un message de classe.
class_find_instance_method_class
Retourne la classe qui implémente un message d'instance.
class_find_instance_method
Retourne la fonction qui implémente un message d'instance.
class_apply_method
Exécute une méthode de classe.
class_send_message
Exécute un message de classe.
class_super_send_message
Exécute un message de classe hérité d'une superclasse.
object_apply_method
Exécute une méthode d'instance.
object_send_message
Exécute un message d'instance.
object_super_send_message
Exécute un message d'instance hérité d'une superclasse.
VOIR AUSSI

Interface, Root

Commentaires

Votre commentaire :
[p] [b] [i] [u] [s] [quote] [pre] [br] [code] [url] [email] strip aide 2000

Entrez un maximum de 2000 caractères.
Améliorez la présentation de votre texte avec les balises de formatage suivantes :
[p]paragraphe[/p], [b]gras[/b], [i]italique[/i], [u]souligné[/u], [s]barré[/s], [quote]citation[/quote], [pre]tel quel[/pre], [br]à la ligne,
[url]http://www.izend.org[/url], [url=http://www.izend.org]site[/url], [email]izend@izend.org[/email], [email=izend@izend.org]izend[/email],
[code]commande[/code], [code=langage]code source en c, java, php, html, javascript, xml, css, sql, bash, dos, make, etc.[/code].