ArchJava

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

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]

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

  1. a et b Aldrich 2002

Bibliographie

  • (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)
  • icône décorative Portail de la programmation informatique