Cintrocomp
Cintrocomp
Cintrocomp
Notes de cours
Christophe Dony
1 Contenu du cours
• Suite sur les schémas des réutilisation objet et sur l’architecture des lignes de produits (frameworks).
• Limites de l’approche objet. Présentation de l’idée de composant.
• Diverses interprétations possibles de l’idée de “développement par composants”.
• Le concept d’aspect, orthogonal à celui d’objet ou de composant. (optionnel)
• Composants assemblales. L’exemple des Java-Beans. Etude des schémas de connexion par évènements
associés ( Observer, Adapter, application au MVC). Etude des différents types de propriétés typiques
(propriétés liées).
• Composants distribués. L’exemple des composants EJB dans la technologie JEE :
◦ session bean pour traiter les requètes metier des clients,
◦ message-driven bean pour gérer l’asynchronisme des communications,
◦ Abstraction de la persistance et des transactions
◦ Architecture globale d’une application JEE de base avec JSP et Servlet.
• Composants applications WEB :
◦ composants et réutilisation avec le framework OSGI/Spring.
• La gestion des dépendances (dont l’injection) avec les composants SPRING et OSGI (Open Service Ga-
teway Initiative),
• ...
1
2 Rappel sur les schémas de réutilisation
1 public interface I {
2 int m1(); }
Listing (1) –
2
2 protected int TVA;
4 int prixTTC() {
5 return this.prixHT() ∗ (1 + this.getTVA())}
6 abstract int prixHT();
7 int getTVA() {return TVA;}}
1 class Compiler{
2 Parser p;
3 CodeGenerator c:
4 Compiler (Parser p, CodeGenerator c){
5 this.p = p;
6 this.c = c;}
2.3 Applications
• API, Bibliothèques de classes
Ensemble de classes spécifiques d’un domaine.
Ex l’API java.lang.io ou les bibliothèque de Collection.
• Hiérarchie de classe
Une hiérarchie de classe est une bibliothèque thématique et extensible.
Article historique : R.E.Johnson, B.Foote : Designing reusable classes. Journal of Object-oriented Programming,
Vol 1, No 2, pp 22-35, July 1988.
• Frameworks - Lignes de Produits
Application pré-packagée spécialisable et Adaptable selon divers schémas (spécialisation, composition, fonctions
d’ordre supérieur, descripteurs) pour en faire des applications spécifiques.
Invention du pattern Inversion of Control ou Hollywood Principle.
• Plugin
Entité destiné à paramétrer un framework.
Exemple courant : l’environnement de développement ECLIPSE est extensible en divers points bien définis de son
code par des plugins permettant d’étendre ou d’adapter ses fonctionnalités.
3
3 Limites de l’approche objet
... software reuse in the large has never been achieved by object-oriented development ... W. Emmerich
Distributed Component Technologies and their Software Engineering Implications - ICSE’2002.
3.1 Le couplage
Le couplage est la mesure du degré d’interdépendance entre différents modules logiciels, de la possibilité d’utiliser l’un
sans l’autre ou d’avoir une alternative.
Un bon logiciel doit avoir un couplage faible.
1 class A{
2 B b = new B();
3 public ma(){ b.mb(); }
5 class B{
6 public mb(){ ... }}
Problèmes :
Injection de dépendance : Passage à A, au moment de la configuration de son utilisation, des références vers les éléments
qui lui sont utiles
Trois solutions (complémentaires) pour l’injection de dépendances :
• Injection par les constructeurs
• Injection par accesseurs en écriture
• Injection par interface
Exemple : injection de dépendance en paramétrage par composition.
1 class A{
2 IB b;
3 public void setB(IB b){this.b = b;}
4 public int ma(){ return (1 + b.mb()); }
4
8 class B implements IB {public int mb(){ return(2); }}
10 class Application{
11 public main () {
12 A a = new A();
13 Ib b = new B();
14 a.setB(b);
15 a.ma();
L’injection de dépendance préfigure la connexion externe des langages à composants dont elle constituera une des solutions.
Le schéma factory donne un nom à une solution pour l’injection de dépendance en paramétrage par spécialisation utilisée
depuis l’invention du schéma MVC (1977).
Factory methods are common in toolkits and frameworks where framework code needs to create objects of
types which may be subclassed by applications using the framework. Erich Gamma, Richard Helm, Ralph
Johnson, John Vlissides : Design Patterns : Elements of Reusable Object-Oriented Software Addison Wesley,
1994.
Subclasses of View in Smalltalk-80 specify defaultControllerClass as the factory method that subclasses
should override and which returns a class used by the View class, defaultController, to create instances.
1 Class View {
2 ...
3 Constructeur(){
4 myController := self defaultControllerClass new
5 ...}
6 }
3.3 Cohésion
La cohésion est la mesure du degré de proximité entre les éléments logiciels nécessaires à la réalisation d’une tâche donnée.
Comment regrouper de façon appropriée des objets qui réalisent une fonctionnalité globale.
5
3.5 Synthèse
voir “cohésion et découplage”.
1 class Line {
2 Point p1, p2;
3 public Point getP1() { return p1; }
4 public Point getP2() { return p2; }
5 public void setP1(Point p1) { p1 = p1; MoveTracking.setFlag(); }
6 public void setP2(Point p2) { p2 = p2; MoveTracking.setFlag(); } }
La découverte du requis nécessite une fouille code. Plus simple en typage statique que dynamique.
• La programmation par aspects. Chaque fonctionnalité accessoire peut également s’adapter à diverses fonctionnalités
essentielles.
Exemple : aspect Synchronized d’une méthode Java.
6
1 class CompteBanque
3 float solde = 0;
11 ...
4 Composant
• Une définition :
entité logicielle, prête à l’emploi, qui peut
- être paramétrée de diverses façon pour fonctionner de façon spécifique dans différents contextes,
- être assemblé de diverses manières avec d’autres composants compatibles.
• Une autre définition :
“Entité logicielle pré-fabriquée, définie par une ou plusieurs interfaces, qui peut être “composée” de
diverses façons à d’autres, dans différents contextes, pour réaliser de nouveaux composites” Clemens
Szyperski. Component Software. Acm Press 2002
7
Figure (2) – Développement pour et par la réutilisation
2. encapsulation de services, décrit via des interfaces (fourni, requis) (d’utilisation, de configuration)
Figure (3) – Expression du fourni et du requis, composition structurelle, exemple avec composant
SOFA
8
Figure (4) – Autre exemple avec un composant Fractal (http ://wordpress.pragmaconsult.lu/wp-
content/uploads/2008/07/fractal-component.jpg). Voir aussi http ://fractal.ow2.org/.
Figure (6) – Exemple (basique) d’architecture (ici avec UML components) [from http ://www.uml-
diagrams.org/]
9
(a) description de haut niveau (modélisation) de l’organisation d’un logiciel comme une collection de composants
connectés.
(b) génération de tout ou partie (squelettes) du programme exécutable écrit dans un langage de programmation
standard.
2. L’approche Framework
Différents frameworks proposent un cadre pour les applications distribuées vues comme la collaboration d’un en-
semble de composants.
Le framework propose une gestion automatisée d’un ensemble de services non fonctionnels tels que l’interfaçage
graphique, la distribution, la persistance ou les transactions.
Les parties fonctionnelles des applications sont encodées dans les composants et les parties non fonctionnelles sont
fournies par les conteneurs dans lesquels les composants peuvent être placés.
Exemples : COM+, CORBA, EJB, DCUP SOFA, etc.
Les services WEB entrent conceptuellement dans cette catégorie.
Un ADL peut être associé au framework, exemple SOFA ou CCM (Corba Component Model).
Figure (7) – L’approche Framework : Conteneurs et Composants EJB (Framework JEE) ©Sun
10
Figure (8) – Concepts clés - Luc Fabresse - thèse de doctorat Université Montpellier-II 2008
Figure (9) – L’approche COL : Description d’architecture et Code des Composants en SCL
11