ArchJava

Un article de Wikipédia, l'encyclopédie libre.

ArchJava est un langage de programmation par composant reposant sur une couche Java. Il est conçu avec l'idée de regrouper le formalisme d'un ADL (en)(c'est-à-dire la description d'une architecture logicielle de manière formelle) et l'implémentation réel du programme.

Spécificités[modifier | modifier le code]

Contrairement aux autres langages ADL (en), ArchJava est basé sur le même langage de programmation que l'implémentation : Java. Ce fort couplage permet de régler le problème principal qui survient dans les autres langages ADL (en), à savoir l'incapacité à assurer complètement l'obéissance des contraintes architecturales et plus particulièrement les communications entre les composants décrits dans l'architecture. Ceci est dû au fait qu'il ne sont pas décrits dans le même langage, et donc ne peuvent exprimer correctement certaines subtilités d'un langage particulier. Ils s'en remettent alors à la bonne volonté des développeurs de suivre des lignes directrices afin de respecter les communications entre les composants de l'architecture[1].

Exemple d'utilisation[1][modifier | modifier le code]

Ici nous avons un exemple de code en ArchJava d'un composant pour parser. Le composant Parser utilise deux ports (in et out) pour communiquer avec d'autres composants.

public component class Parser {
    public port in {
        provides void setInfo(Token symbol, SymTabEntry e);
        requires Token nextToken() throws ScanException;
    }
    public port out {
        provides SymTabEntry getInfo(Token t);
        requires void compile(AST ast);
    }

    void parse(String file) {
        Token tok = in.nextToken();
        AST ast = parseFile(tok);
        out.compile(ast);
    }

    AST parseFile(Token lookahead) { ... }
    void setInfo(Token t, SymTabEntry e) { ... }
    SymTabEntry getInfo(Token t) { ... }
    ...
}
Schéma d'exemple d'architecture avec ArchJava

Le composant Compiler ci-dessous contient trois sous-composants (Scanner, Parser et CodeGen). Ces composants sont connectés en séquence linéaire avec le port out connecté au port in de l'autre.

public component class Compiler {
    private final Scanner scanner = ...;
    private final Parser parser = ...;
    private final CodeGen codegen = ...;

    connect scanner.out, parser.in;
    connect parser.out, codegen.in;

    public static void main(String args[]) {
        new Compiler().compile(args);
    }

    public void compile(String args[]) {
        // Pour chaque fichier dans args faire :
        ...parser.parse(file);...
    }
}

Références[modifier | modifier le code]

  1. a et b Aldrich 2002

Bibliographie[modifier | modifier le code]

  • (en) Jonathan Aldrich, Craig Chambers et David Notkin, « ArchJava: connecting software architecture to implementation », Proceedings of the 24th International Conference on Software Engineering,‎ , p. 187–197 (ISBN 1-58113-472-X, DOI 10.1145/581339.581365)