Architecture des logiciels

Transcription

Architecture des logiciels
Architecture des logiciels
Bernard Lang – 2 mars 2006
Ceci est un bref mémo, très simplificateur, sur les pratiques de programmation et sur
l'architecture des logiciels. La création de logiciels est principalement de nature compositionnelle. À partir de
fonctionnalités élémentaires présentes dans les langages de programmation et dans les
systèmes d'exploitation des ordinateurs (opérations arithmétiques, structures de
contrôle d'exécution, utilisation de la mémoire, lecture et rangement sur disque ou sur
réseau, etc.), on crée des fonctionnalités plus élaborées (algorithmes variés, bases de
données, résolution d'équations, ...). Chacune de ces créations peut à son tour servir à
des créations plus complexes. Créer pour permettre la réutilisation dans des contextes
nouveaux est une règle fondamentale, tant pour l'efficacité productive que pour la
fiabilité et la maintenabilité des logiciels produits.
Pour cela, il est essentiel que les créations répondent à une stricte logique
fonctionnelle, la plus simple et la plus propre possible. Et l'expérience montre que nul
ne peut préjuger de l'usage qui sera fait des logiciels produits ... exactement ­ et ce
n'est pas par hasard ­ comme nul ne peut préjuger des usages qui seront faits d'un
résultat mathématique. C'est en ce sens que la technique doit rester neutre : on ne peut
présumer de son usage, et interférer avec elle pour des raison extra­techniques ne peut
qu'avoir des effets négatifs sur son utilité, dans des contextes souvent inattendus.
Même l'Internet a été construit sur ce principe, selon ce que l'on a appelé le principe
de bout en bout ("end­to­end principle"). L'idée est essentiellement de ne présumer en
rien des usages qui seront faits du réseau, en créant une fonctionnalité de pure
communication et en rejetant vers les logiciels situés aux extrémités la responsabilité
de spécialiser les usages. C'est grâce à cette décision que l'Internet a pu avoir la
flexibilité que nous lui connaissons et a permis cette explosion d'usages originaux,
cette créativité qui en fait un moteur de la croissance, et surtout d'une croissance plus
durable que celle de bien d'autres industries.
Ces briques logicielles sont utilisées en gros sous trois formes :
1. Comme des fonctions (de bibliothèque) destinées à être mises en oeuvre par des
programmes plus vastes auxquelles elles sont intégrées. Ces programmes sont
réalisés dans des langages de programmation classiques généralement compilés,
c'est­à­dire traduits en code exécutable non lisible par un programmeur.
2. Comme des commandes ajoutées au système d'exploitation et pouvant être
invoquées isolément en tapant des instructions sous forme textuelle
immédiatement exécutables dans ce que l'on appelle la ligne de commande, qui
n'est généralement utilisée que par des professionnels. En fait, ces commandes
jouent aussi le même rôle de création compositionnelle que les fonctions de
bibliothèque, mais principalement pour des langages de programmation dits
langages de script, qui le plus souvent ne sont pas compilés mais exécutés
directement (mais moins efficacement) depuis la forme source lisible par le
programmeur. Elles peuvent être aussi invoquées comme les fonctions de
bibliothèque du (1) dans des programmes écrits avec la plupart des langages de
programmation classiques (c'est­à­dire compilés).
Cette forme est essentielle pour le travail des ingénieurs système et réseau car c'est
elle qui permet le prototypage rapide d'application, ou la création rapide de petits
programmes pour résoudre des problèmes spécifiques, pour effectuer des tests,
pour automatiser une tâche répétitive occasionnelle, etc.
3. Comme des applications fermées, encapsulées dans des interfaces homme­machine
sur des écrans graphiques, d'utilisation plus conviviale pour l'utilisateur
appartenant au grand­public, mais se prêtant mal à la création compositionnelle
d'applications dérivées plus complexes.
Ces versions facilement utilisables sont créées en rajoutant devant les logiciels
décrits en (1) ou en (2) une couche de programme (l'interface graphique) destinée à
faciliter l'interaction en guidant l'utilisateur, en favorisant son intuition et sa
compréhension par l'image et l'animation, en lui indiquant les informations
nécessaires dans des formulaires, en lui signalant ses erreurs, en lui fournissant
divers mécanismes d'assistance, d'automatisation, d'explication et de
documentation simple.
Typiquement, au lieu de taper la commande
"cp mon-document ~/travail/mon-repertoire/"
comme il le ferait en (2) pour une copie de fichier d'un répertoire dans un autre,
l'utilisateur va avoir des images des répertoires et des fichiers et va bouger l'image
d'un fichier d'un point à un autre de l'écran avec l'aide de la souris.
L'interface graphique peut être vue comme un petit programme qui d'un côté
communique avec l'utilisateur, et de l'autre communique avec la fonction à mettre
en oeuvre qui est disponible sous la forme (1) ou la forme (2).
Les interfaces graphiques utilisées en (3) sont un emplacement naturel pour toute
information et notification que l'on peut vouloir fournir à l'usager sur ce qu'il est en
train de faire.
Par contre, cela perturberait la fonction naturelle des logiciels dans les cas (1) et (2),
car ce ne sont là que des briques destinées à être intégrées dans des constructions
plus vastes pour des usages qui restent à définir.
Architecture compositionnelle des logiciels
Acteur
Médium
Composants logiciels
Langages de programmation compilés
Composants logiciels – bibliothèques de fonctions
Programmeur
Langage de
programmation
pile IP
protocole
HTTP
Ingénieur
systèmes
et réseaux
Langage
de script
Ligne de
commande
Protocole
SMTP
afficheur
pdf
afficheur
HTML
gestion du
courrier
script de
typage
Environnement
graphique
Professionnel
. . .
Non programmable – pas de composition
Interfaces graphiques de mise en œuvre
Utilisateur
grand­public
composition
Compétences
requises
Langages de scripts
Commandes en ligne
Filtre à courrier
Domaine
programmable
Lecteur de
courrier
Domaine non
programmable
Facilité
d'utilisation
navigateur
Grand­public
Décomposition fonction - interface
un
composant
fonctionnel
Interface
graphique
un autre
composant
fonctionnel
Dans le premier diagramme les flèches indiquent les chemins d'activation des
composants (petits rectangles jaune pâle), qui pour les utilisateurs grand­public
passent par des interfaces graphiques (ovales violet pâle).
Dans le deuxième diagramme, les flèches indiquent les chemins de circulation de
l'information pour un utilisateur grand­public.
L'interface voit passer requêtes et réponses et « sait » ce que font les composants
fonctionnels. Il peut donc agir (par exemple au moyen d'un composant
supplémentaire) sur le traitement effectué ou sur ses résultats.

Documents pareils