Framework

ensemble cohérent de composants logiciels structurels

En programmation informatique, un framework (appelé aussi infrastructure logicielle[1], infrastructure de développement[2], environnement de développement[3], socle d'applications[4], cadre d'applications[4] ou cadriciel[4]) est un ensemble cohérent de composants logiciels structurels qui sert à créer les fondations ainsi que les grandes lignes de tout ou partie d'un logiciel, c'est-à-dire une architecture.

Un framework se distingue d'une simple bibliothèque logicielle principalement, d'une part 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é dans un langage particulier, une plateforme spécifique, un domaine particulier : communication de données, data mappingetc.. D'autre part, il impose un cadre de travail, dû à sa construction même, guidant l'architecture logicielle voire conduisant le développeur à respecter certains patrons de conception ; 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 informaticiens, 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.

Description

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, un canevas. Il est souvent fourni sous la forme d'une bibliothèque logicielle et accompagné du plan de l'architecture cible du framework[5].

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[5].

On trouve différents types de frameworks :

  • framework d'infrastructure système : pour développer des systèmes d'exploitation, des interfaces graphiques, des outils de communication (exemple : Framework .Net, Struts) ;
  • 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 ;
  • frameworks d'entreprise : pour développer des applications spécifiques au secteur d'activité de l'entreprise ;
  • frameworks de gestion de contenu : sont les fondations d'un système de gestion de contenu[6] — 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.

Objets

En programmation orientée objet, un framework 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 l'utilise[7]. Avec un framework orienté objets, le programmeur qui l'utilise 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, ajoutées à 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[8].

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[9].

Traduction française

En programmation informatique, le terme « framework » se traduit par « structure logicielle », bien que le terme anglais reste majoritairement utilisé. D'autres tentatives de francisation du terme ont été faites ; on trouve ainsi parfois les termes environnement de développement, recommandé par la Commission d’enrichissement de la langue française[3], et cadre d'applications, socle d’applications ou cadriciel recommandés par l'Office québécois de la langue française[4].

Un framework est distinct d'une plateforme, dans la mesure où il n'intègre pas d'environnement d'exécution système ou applicatif.

Exemples

Quelques exemples
NomUsageArchitecture cibleLangageAuteurLicence
ActionScript Foundryapplication webAdobe FlexActionScript et JavaServeBox
Apache Cocoonapplication web - servlet?Java, XMLApache SoftwareLogiciel libre
Springapplication webMultiplateformeJavaSpring SourceLogiciel libre
Apache Strutsapplication webModèle-Vue-ContrôleurJavaApache SoftwareLogiciel libre
Twitter Bootstrapapplication webModèle-Vue-ContrôleurHTML/CSS/JavascriptTwitterLicence MIT
Catalystlogiciel applicatifModèle-Vue-ContrôleurPerlLogiciel libre
Cocoalogiciel applicatifCocoaObjective CApple
CubicWebPlateforme de développement web sémantiqueMultiplateformePythonLogilabLGPL
Djangoapplication webModèle-Vue-ContrôleurPythonDjango Software FoundationLogiciel libre
DojoappletAJAXJavaScriptFondation Dojo
Eclipse Modeling Framework (*)modélisation des donnéesMultiplateforme(ouvert)Fondation EclipseLogiciel libre
Eclipse RCPRich Client PlatformIDE Eclipse Platform, Multiplateforme(ouvert)Fondation EclipseLogiciel libre
eZ Publishapplication websystème de gestion de contenuPHPeZ Systems ASLogiciel libre
JavaServer Facesapplication webComposantJavaLogiciel libre
FxEngine Frameworktraitement numérique du signal, pluginFiltres et tubesC++SMProcess
Grailsapplication webModèle-Vue-ContrôleurGroovyGraeme Rocher, Guillaume Laforge, Marc Palmer, Dierk Koenig et Steven Devijver
Google Guiceapplication webMultiplateformeJavaBob Lee, Kevin B, Jesse Wilson, Christian GruberLogiciel libre
Hibernatepersistance & mappingJava Persistance APIJavaJBossLogiciel libre
Java SE (**)framework générique pour Rich Client PlatformMultiplateformeJava
Scala
JScheme, implémentation de Scheme
Clojure (dialecte de Lisp)
JRuby
Jython
Rhino (moteur JavaScript)
Sun Microsystems puis Oracle CorporationLogiciel libre
Java EE (**)framework professionnel avec support du distribué
Java ME (**)framework pour application mobile
JavaFX (**)framework pour Rich Internet Application
Kivyframework pour application mobileMultiplateformePython
Cython
Kivy organizationLogiciel libre
Laravelapplications webMultiplateforme,
Modèle-Vue-Contrôleur
PHPÉquipe de développement LaravelLicence MIT
MARFtraitement du signal et des languespipelineJavaSerguei Mokhov, Stephen Sinclair
Microsoft Foundation Classlogiciel applicatifModèle-Vue-ContrôleurC++MicrosoftPropriétaire
.Net (**)logiciel applicatif, application web, composant logicielASP.NETC#, Visual Basic .NETMicrosoftPropriétaire
Ruby on Railsapplication webModèle-Vue-ContrôleurRubyDavid Heinemeier Hansson etLogiciel libre
Symfonyapplication webModèle-Vue-ContrôleurPHPSensio LabsLogiciel libre
SoJo FrameWorkapplication webModèle-Vue-ContrôleurHTML/CSSInGamesStudioLogiciel libre
TopLinkpersistance & mappingJava Persistance APIJavaOracle Corporation
W3.CSSapplication webGoogle Material DesignCSSW3SchoolsLogiciel libre
Zend Frameworkapplication webModèle-Vue-ContrôleurPHPZend TechnologiesLogiciel libre
Zopegestion de contenuZopePythonZope CorporationLogiciel libre

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

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

Notes et références

Voir aussi

Sur les autres projets Wikimedia :

Articles connexes

Liens externes

🔥 Top keywords: