3
Site
60

So-o

Implémentation d'un modèle orienté objet dans un langage de programmation structurée.

So-o définit une couche fonctionnelle qui ajoute un modèle de programmation orientée objet à un langage de programmation structurée. Inspiré par Smalltalk, So-o est complet, simple et léger, facile à comprendre.

So-o a 3 fonctions : defclass qui définit une nouvelle classe, sendmsg qui sert systématiquement à envoyer un message à une classe ou à une instance, et supersend qui exécute une méthode héritée d'une superclasse. Simply object-oriented!

So-o propose une implémentation type en plusieurs langages. Le code en PHP a moins de 1000 lignes. Le code en C tient en quelque 1500 lignes. Le code en JavaScript fait à peine 700 lignes.


Exemple
namespace Hello;

require_once 'So-o.php';

defclass('Hello', null, 1, null, null, null, array('hello'));

function i_hello($self) {
    echo 'Hello from So-o!', PHP_EOL;

    return $self;
}

Définit la classe Hello qui hérite de la classe par défaut Object. Son numéro de révision est 1. Elle n'ajoute pas de propriétés de classe ou d'instance. Elle n'ajoute pas de méthodes de classe. Elle ajoute une méthode d'instance appelée hello.

La fonction i_hello définie dans l'espace de nommage Hello implémente la méthode d'instance appelée hello. $self est l'instance qui a reçu le message hello.

$ php -a
php > require_once 'Hello.php';
php > $hello=sendmsg($Hello, 'new');
php > sendmsg($hello, 'hello');
Hello from So-o!

Charge le code de la classe Hello. Envoie le message new à la classe Hello. La méthode new est implémentée par la classe Object. Elle retourne une nouvelle instance de la classe. Envoie le message hello à l'instance $hello.


Exemple
#include "So-o.h"

class Hello;

static instance i_hello(instance self) {
    printf( "Hello from So-o!\n" );

    return self;
}

void defclassHello() {
    selector _i_messages[] = {
        "hello",    METHOD(i_hello),
        0, 0
    };

    Hello = defclass("Hello", 0, 1, 0, 0, 0, _i_messages);
}

Un simple main pour illustrer l'utilisation de la classe Hello :

#include "So-o.h"

#include <stdlib.h>

extern class Hello;

extern void defclassHello();

int main( int argc, char *argv[] ) {
    instance hello;

    defclassHello();

    hello = (instance)sendmsg(Hello, "new").p;

    sendmsg(hello, "hello");

    sendmsg(hello, "free");

    exit( 0 );
}

Compilation du code avec la librairie libso-o.a et exécution :

$ gcc -O -c test-Hello.c
$ gcc -O -c Hello.c
$ gcc test-Hello.o Hello.o libso-o.a -o test-Hello
$ test-Hello
Hello from So-o!


Exemple
import { defclass } from 'So-o';

defclass('Hello', null, 1,
    null,
    null,
    null,
    {   'hello':    (self) => {
                        console.log('Hello from So-o!');
                       
                        return self;
                    }
    }
);

Quelques lignes de code pour illustrer l'utilisation de la classe Hello :

import { sendmsg } from 'So-o';

import 'Hello';

var hello = sendmsg(Hello, 'new');

sendmsg(hello, 'hello');

Exécution avec Node.js :

$ ln Hello.js node_modules/Hello.mjs
$ ln testHello.js testHello.mjs
$ nodejs --experimental-modules testHello
Hello from So-o!

Visitez so-o.org.

Commentaires

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

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].

Entrez un maximum de 2000 caractères.

Par