Framework

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour l’article homonyme, voir Framework (logiciel)

En programmation informatique, un framework est un ensemble cohérent de composants logiciels structurels, qui sert à créer les fondations ainsi que les grandes lignes de tout ou d’une partie d'un logiciel (architecture). Un framework se distingue d'une simple bibliothèque logicielle principalement par :

  • son caractère générique, faiblement spécialisé, contrairement à certaines bibliothèques ; un framework peut à ce titre être constitué de plusieurs bibliothèques chacune spécialisée dans un domaine. Un framework peut néanmoins être spécialisé, sur un langage particulier, une plateforme spécifique, un domaine particulier : Reporting, mappingetc.
  • le cadre de travail (traduction littérale de l'anglais : framework) qu'il impose de par sa construction même, guidant l'architecture logicielle voire conduisant le développeur à respecter certains patterns ; les bibliothèques le constituant sont alors organisées selon le même paradigme.

Les frameworks sont donc conçus et utilisés pour modeler l'architecture des logiciels applicatifs, des applications web, des middlewares et des composants logiciels. Les frameworks sont acquis par les ingénieurs, puis incorporés dans des logiciels applicatifs mis sur le marché, ils sont par conséquent rarement achetés et installés séparément par un utilisateur final.

Des tentatives de francisation du terme ont été faites. On trouve ainsi parfois les termes cadre d'applications, proposé par l'Office québécois de la langue française[1], canevas ou cadriciel – terme en usage depuis au moins 1997[réf. nécessaire], aussi socle d'applications.

Description[modifier | modifier le code]

Un framework est un ensemble d'outils et de composants logiciels organisés conformément à un plan d'architecture et des patterns, l'ensemble formant ou promouvant un « squelette » de programme. Il est souvent fourni sous la forme d'une bibliothèque logicielle, et accompagné du plan de l'architecture cible du framework[2].

Un framework est conçu en vue d'aider les programmeurs dans leur travail. L'organisation du framework vise la productivité maximale du programmeur qui va l'utiliser — gage de baisse des coûts de construction et maintenance du programme. Le contenu exact du framework est dicté par le type de programme et l'architecture cible pour lequel il est conçu[2].

On trouve différents types de frameworks :

  1. framework d'infrastructure système : pour développer des systèmes d'exploitation, des interfaces graphiques, des outils de communication (exemple : Framework .Net, Struts) ;
  2. framework d'intégration intergicielle (middleware) : pour fédérer des applications hétérogènes. Pour mettre à disposition différentes technologies sous la forme d'une interface unique ;
  3. frameworks d'entreprise : pour développer des applications spécifiques au secteur d'activité de l'entreprise ;
  4. frameworks de gestion de contenu : sont les fondations d'un système de gestion de contenu[3] — pour la création, la collecte, le classement, le stockage et la publication de « biens numérisés ».

Les principaux avantages de ces frameworks sont la réutilisation de leur code, la standardisation du cycle de vie du logiciel (spécification, développement, maintenance, évolution), ils permettent de formaliser une architecture adaptée au besoin de l'entreprise. Ils tirent parti de l'expérience des développements antérieurs.

Framework objets[modifier | modifier le code]

En programmation orientée objet, un framework (comme une bibliothèque) est typiquement composé de classes mères qui seront dérivées et étendues par héritage en fonction des besoins spécifiques à chaque logiciel qui utilise le framework[4]. Avec un framework orienté objets, le programmeur qui utilise le framework pourra personnaliser les éléments principaux du programme par extension, en utilisant le mécanisme d'héritage : créer des nouvelles classes qui contiennent toutes les fonctionnalités que met en place le framework, et en plus ses fonctionnalités propres, créées par le programmeur en fonction des besoins spécifiques à son programme. Le mécanisme d'héritage permet également de transformer des fonctionnalités existant dans les classes du framework[5].

Inversion de contrôle[modifier | modifier le code]

Article détaillé : Inversion de contrôle.

Alors que les bibliothèques de classes sont typiquement passives : les opérations des classes sont exécutées sur demande du programme qui les utilise, les frameworks sont typiquement actifs : le déroulement des opérations dans un programme est dirigé par le framework qu'il utilise, par des mécanismes tels que les fonctions de rappel et les événements, selon le principe « ne m'appelez pas, je vous appellerai. »

L'inversion de contrôle fait partie de l'architecture typique d'un framework[6].

Exemples[modifier | modifier le code]

Quelques exemples
Nom Usage Architecture cible Langage Auteur Licence
ActionScript Foundry application web Adobe Flex ActionScript et Java ServeBox
Apache Cocoon application web - servlet ? Java, XML Apache Software Logiciel libre
Spring application web Multiplate-forme Java Spring Source Logiciel libre
Apache Struts application web Modèle-Vue-Contrôleur Java Apache Software Logiciel libre
Catalyst logiciel applicatif Modèle-Vue-Contrôleur Perl Logiciel libre
Cocoa logiciel applicatif Cocoa Objective C Apple
CubicWeb Plate-forme de développement web sémantique Multiplate-forme Python Logilab LGPL
Django application web Modèle-Vue-Contrôleur Python ? Logiciel libre
Dojo applet AJAX JavaScript Fondation Dojo
Eclipse Modeling Framework (*) modélisation des données Multiplate-forme (ouvert) Fondation Eclipse Logiciel libre
Eclipse RCP Rich Client Platform IDE Eclipse Platform, Multiplate-forme (ouvert) Fondation Eclipse Logiciel libre
eZ Publish application web système de gestion de contenu PHP eZ Systems AS Logiciel libre
JavaServer Faces application web Composant Java Logiciel libre
FxEngine Framework traitement numérique du signal, plugin Filtres et tubes C++ SMProcess
Grails application web Modèle-Vue-Contrôleur Groovy Graeme Rocher, Guillaume Laforge, Marc Palmer, Dierk Koenig et Steven Devijver
Google Guice application web Multiplate-forme Java Bob Lee, Kevin B, Jesse Wilson, Christian Gruber Logiciel libre
Hibernate persistance & mapping Java Persistance API Java JBoss Logiciel libre
Java SE (**) framework générique pour Rich Client Platform Multiplate-forme Java
Scala
JScheme, implémentation de Scheme
Clojure (dialecte de Lisp)
JRuby
Jython
Rhino (moteur JavaScript)
Sun Microsystems puis Oracle Corporation Logiciel libre
Java EE (**) framework professionnel avec support du distribué
Java ME (**) framework pour application mobile
JavaFX (**) framework pour Rich Internet Application
MARF traitement du signal et des langues pipeline Java Serguei Mokhov, Stephen Sinclair
Microsoft Foundation Class logiciel applicatif Modèle-Vue-Contrôleur C++ Microsoft Propriétaire
.Net (**) logiciel applicatif, application web, composant logiciel ASP.NET C#, Visual Basic .NET Microsoft Propriétaire
Riena SOA (multi-tiers client/server) Eclipse RCP + Equinox Fondation Eclipse Logiciel libre
Ruby on Rails application web Modèle-Vue-Contrôleur Ruby David Heinemeier Hansson et Logiciel libre
SCOOTER application web Ruby on Rails - MVC Java Amazing force Logiciel libre
Symfony application web Modèle-Vue-Contrôleur PHP Sensio Labs Logiciel libre
TopLink persistance & mapping Java Persistance API Java Oracle Corporation
WebOS/400 Convert DSPF to HTML source file (CVTDSPF) Apache 2.0 on IBM i RPG/ILE CyberTekno Inc. Propriétaire
Zend Framework application web Modèle-Vue-Contrôleur PHP Zend Technologies Logiciel libre
Zope gestion de contenu Zope Python Zope Corporation Logiciel libre

(*) Certains frameworks comme Eclipse ou Apache constituent davantage des méta-frameworks, ou frameworks de frameworks, dans la mesure où ils permettent, selon les modules qui leur sont installés, de se réorienter vers différentes activités informatiques.

(**) Microsoft .NET et les Java Platform peuvent être vus indifféremment comme des frameworks, ou comme des plate-formes logicielles selon que l'on considère leurs seules librairies de développement, ou leur environnement d'exécution.

D’autres exemples de frameworks peuvent être trouvés dans la page relative à l'inversion de contrôle.

Notes et références[modifier | modifier le code]

  1. Fiche terminologique de l'Office québécois de la langue française
  2. a et b (en) Ken Chazotte, Build Your Own Framework with Visual FoxPro, Hentzenwerke - 2004, (ISBN 9781930919532)
  3. (en) R. J. Townsend, Foundation Drupal 7: Learn how to Use the Drupal Framework to Quickly Build Feature-rich Web Sites, Apress - 2010, (ISBN 9781430228080)
  4. (en) Nicolas Guelfi, Egidio Astesiano et Gianna Reggio, Scientific engineering for distributed Java applications, Springer - 2003, (ISBN 9783540006794)
  5. (en) Douglas C. Schmidt et Stephen D. Huston, C++ Network Programming: Systematic reuse with ACE and frameworks, Addison-Wesley - 2003, (ISBN 9780201795257)
  6. (en) Stephen D. Huston, James C. E. Johnson, Umar Syyid, The ACE programmer's guide: practical design patterns for network and systems programming, Addison-Wesley - 2004, (ISBN 9780201699715)

Voir aussi[modifier | modifier le code]

Sur les autres projets Wikimedia :

Articles connexes[modifier | modifier le code]

Lien externe[modifier | modifier le code]