• Aucun résultat trouvé

Programmation orientée aspect

1.1 Définitions

1.3.3 Programmation orientée aspect

Proposée par G. Kiczales et al [KLM+97], la programmation orientée aspect est un paradigme de programmation qui a été développé pour améliorer la programmation orientée objet sur cer- tains points. La principale idée de ce paradigme est d’améliorer la séparation de préoccupations (separation of concerns) lors du processus de développement du logiciel.

Ces préoccupations forment les différents aspects techniques du logiciel, habituellement for- tement dépendants entre eux. La programmation orientée aspect propose des mécanismes de séparation de ces aspects, afin de modulariser le code, le décomplexifier, et le rendre plus simple à modifier.

La programmation orientée aspect n’est pas particulièrement liée à un langage de program- mation mais peut être mise en œuvre aussi bien avec un langage orienté objet comme le langage JAVA qu’avec un langage procédural comme le langage C.

Comme mentionné précédemment, la programmation orientée objet offre une structure mo- dulaire aux systèmes logiciels dans le but de rendre ceux-ci configurable et réutilisable. Par contre, les modules formés suite au processus de modularisation contiennent des portions de code dont la représentation en objet est impossible. Communément appelées dans la littérature américaine cross-cutting concerns, ces portions de code implémentent les aspects non fonction- nels ou fonctionnalités transverses des systèmes logiciels comme le logging, le monitoring, la

gestion des exceptions, le débogage. Il existe par conséquent plusieurs inconvénients liés à ces

aspects dont la dispersion de code qui est due à la propagation des fonctionnalités transverses un peu partout dans les modules et à la confusion du code qui est due à la présence au sein d’un même module implémentant une fonctionnalité du système logiciel de diverses fonctionnalités transverses.

Ces aspects impactent négativement les systèmes logiciels parmi lesquels nous notons : — Un code difficilement réutilisable : un module comportant plusieurs fonctionnalités trans-

verses est difficilement réutilisable tel quel dans un autre système nécessitant ce module. — Une diminution de la qualité du code : l’apparition dispersée des fonctionnalités trans-

verses dégrade la qualité du code.

— Une baisse de la productivité du code : la redondance de fonctionnalités transverses au sein d’un module empêche le développeur de se concentrer sur la fonctionnalité principale de ce module.

— Une diminution de l’évolution du code : pour faire évoluer un système, il faut modifier de nombreux modules. Modifier chaque sous systèmes pour atteindre les modifications souhaitées peut entrainer des incohérences.

La figure 1.4 montre l’exemple d’un système formé de 4 modules dans lesquels apparaissent des fonctionnalités transverses ou cross-cutting concerns lors de la modularisation par la program- mation orientée objet. Un autre inconvénient observé sur la figure concerne la possibilité de dupliquer certaines fonctionnalités transverses dans des modules où elles ne sont pas réellement nécessaires.

La programmation orientée aspect offre une solution à ce problème de modularisattion en permettant d’isoler les fonctionnalités transverses dans des aspects. Selon Georges Kiczales [KLM+97], lors de l’implémentation d’un système logiciel, les fonctionnalités qui peuvent être clairement encapsulées en utilisant la programmation orientée objet sont des composants tandis

30 Configuration des systèmes d’exploitation

Module 4 Module 3

Module 2 Module 1

Débogage Logging Gestion

d'exception

Figure 1.4 – Modularisation selon la programmation orientée objet

que celles qui ne peuvent être représentées par des objets (fonctionnalités transverses) sont des

aspects.

La figure 1.5 montre le principe de développement de systèmes logiciels par le biais de la programmation orientée aspect. Trois étapes majeures sont ainsi identifiées à savoir :

— La décomposition des éléments du système : les fonctionnalités facilement identifiables par des objets constituent des composants et celles qui sont difficilement identifiables constituent des aspects.

— L’implémentation des sous systèmes : chaque sous système est implémenté soit dans des modules en utilisant un langage procédural ou un langage orienté objet, soit dans des aspects en utilisant des langages spécifiques à la programmation orientée aspect.

— l’intégration du système : les composants et les aspects sont composés à partir d’un métier à tisser ou weaver dans le but de former le système complet.

Composants Module 4 Module 3 Module 2 Module 1 Aspects Weaver

Figure 1.5 – Modularisation selon la programmation orientée aspect

La programmation orientée aspect offre alors une modularisation claire et concise tout en améliorant la qualité du code [Lad03] et la réutilisation des systèmes logiciels.

Dans le domaine des systèmes d’exploitation, de nombreux travaux ont proposé des approches de développement de systèmes d’exploitation configurables liées à la programmation orientée

Paradigme de développement 31

aspect [LHSP+09, LHSPS11, LGS04, CKFS01, CKF00, SL04, MSGSP02].

[LGS04] présente une approche de développement de systèmes d’exploitation adaptables. Selon les auteurs, pour les petits systèmes embarqués (téléphones mobiles, montres connectées), les applications sont la plupart du temps dynamiques c’est-à-dire que leur besoin en termes de services peut varier à l’exécution. Par conséquent, le système d’exploitation doit être conçu de manière à s’adapter dynamiquement aux exigences des applications. Pour cela, la notion d’aspect dynamique est introduite. Ces aspects encapsulent les propriétés non fonctionnelles des systèmes d’exploitation et peuvent être chargés ou supprimés dynamiquement selon l’application grâce à un tisseur dynamique ou dynamic weaver. Par contre, l’adaptation n’est possible qu’après la sus- pension du système d’exploitation qui au redémarrage contiendra les fonctionnalités souhaitées. Aussi, aucun mécanisme permettant de vérifier la bonne intégration de nouvelles fonctionnalités durant l’exécution du système d’exploitation n’est présenté.

Dans [LHSP+09] le système d’exploitation CiAO implémenté en AspectC++ [SL07] qui est une extension du langage C++ par les concepts de la programmation orientée aspect est pré- senté. L’intérêt est porté aux systèmes embarqués à ressources limitées car en général, pour ce type de système, la configuration des systèmes d’exploitation est réalisée par la compilation conditionnelle via des directives de préprocesseur. Il en résulte ainsi un nombre important de déclarations #ifdef, #if #endif au sein du code source qui impactent la qualité du code du système d’exploitation. La solution proposée par les auteurs consiste à concevoir entièrement un système d’exploitation basée sur les principes de la programmation orientée aspect. Le système d’exploitation développé ne contient alors pas de déclaration #ifdef, #if, #endif, est haute- ment configurable, présente un code dont la qualité est améliorée et une structure modulaire.

Documents relatifs