web-dev-qa-db-fra.com

Qu'est-ce qu'un framework logiciel?

Quelqu'un peut-il m'expliquer s'il vous plaît ce qu'est un framework logiciel? Pourquoi avons-nous besoin d'un cadre? Que fait un framework pour faciliter la programmation?

186
Anxious

Je suis très en retard pour y répondre. Mais j'aimerais partager un exemple auquel je n'ai pensé qu'aujourd'hui. Si je vous disais de couper un morceau de papier de 5 m sur 5 m, vous le ferez sûrement. Mais supposons que je vous demande de couper 1000 morceaux de papier de mêmes dimensions. Dans ce cas, vous ne ferez pas la mesure 1000 fois; de toute évidence, vous feriez un cadre de 5 m sur 5 m, puis avec l'aide de celui-ci, vous pourriez couper 1000 feuilles de papier en moins de temps. Vous avez donc créé un cadre permettant de réaliser un type de tâche spécifique. Au lieu d'exécuter le même type de tâche à plusieurs reprises pour le même type d'applications, vous créez un cadre regroupant toutes ces installations dans un même paquet Nice, fournissant ainsi l'abstraction pour votre application et, plus important encore, pour de nombreuses applications.

411
Neha Choudhary

Techniquement, vous n'avez pas besoin un framework. Si vous créez un site vraiment très simple (pensez au Web de 1992), vous pouvez le faire en HTML et en CSS.

Et si vous voulez créer une application Web moderne, vous n'avez pas non plus besoin ==.

Vous pouvez à la place choisir d'écrire toute la logique dont vous avez besoin, à chaque fois. Vous pouvez écrire votre propre couche stockage/persistance des données ou, si vous êtes trop occupé, écrire simplement du code SQL personnalisé pour chaque accès à une base de données. Vous pouvez écrire vos propres couches d'authentification et de traitement de session. Et votre propre logique de rendu des modèles. Et votre propre logique de gestion des exceptions. Et vos propres fonctions de sécurité. Et votre propre cadre de tests unitaires pour vous assurer que tout fonctionne correctement. Et votre propre ... [continue pendant assez longtemps]

Encore une fois, si vous do utilisez un framework, vous pourrez bénéficier du bon travail de des dizaines, voire des centaines d'autres développeurs, qui pourraient bien être meilleurs que vous. Vous pourrez créer ce que vous voulez rapidement, sans perdre de temps à vous préoccuper des éléments d'infrastructure énumérés ci-dessus.

Vous pouvez en faire plus en moins de temps et savoir que le code que vous utilisez ou que vous étendez est très susceptible d'être mieux fait que de le faire vous-même.

Et le coût de ceci? Investir un peu de temps pour apprendre le cadre. Mais, comme le confirmeront pratiquement tous les développeurs Web, le temps passé à apprendre à tirer des avantages énormes (vraiment, massifs) de l'utilisation du cadre de votre choix vaut vraiment la peine.

89
Steve Jalim

Le résumé sur Wikipedia (Software Framework) (le premier hit Google) explique très bien:

Un framework logiciel, en programmation informatique, est une abstraction dans laquelle un code commun fournissant une fonctionnalité générique peut être remplacé ou spécialisé de manière sélective par un code utilisateur fournissant une fonctionnalité spécifique. Les frameworks constituent un cas particulier de bibliothèques de logiciels en ce sens qu’ils sont des abstractions de code réutilisables encapsulées dans une interface de programmation d’application (API) bien définie, tout en contenant certaines caractéristiques clés qui les séparent des bibliothèques normales.

Les frameworks logiciels ont ces caractéristiques distinctives qui les séparent des bibliothèques ou des applications utilisateur normales:

  1. inversion du contrôle - Dans un cadre, contrairement aux bibliothèques et aux applications utilisateur normales, le flux de contrôle global du programme n'est pas dicté par l'appelant, mais par le cadre [1]
  2. comportement par défaut - Un framework a un comportement par défaut. Ce comportement par défaut doit en fait être un comportement utile et non une série de non-opérations.
  3. Extensibilité - Un framework peut être étendu par l'utilisateur généralement par substitution prioritaire ou spécialisé par code utilisateur fournissant des fonctionnalités spécifiques.
  4. code cadre non modifiable - Le code cadre, en général, ne peut pas être modifié. Les utilisateurs peuvent étendre le cadre, mais pas en modifier le code.

Vous pouvez "en avoir besoin", car il peut vous fournir un excellent raccourci lors du développement d'applications, car il contient de nombreuses fonctionnalités déjà écrites et testées. La raison est assez similaire à la raison pour laquelle nous utilisons des bibliothèques de logiciels.

52
aioobe

Beaucoup de bonnes réponses déjà, mais laissez-moi voir si je peux vous donner un autre point de vue.

Pour simplifier un peu les choses, vous pouvez voir un framework comme une application complète, à l’exception de la fonctionnalité réelle. Vous branchez la fonctionnalité et PRESTO! vous avez une application.

Considérons, par exemple, un cadre d'interface graphique. Le framework contient tout ce dont vous avez besoin pour faire une application. En effet, vous pouvez souvent créer trivialement une application minimale avec très peu de lignes de source qui ne font absolument rien - mais elle vous donne la gestion de fenêtre, la gestion de sous-fenêtre, les menus, les barres de boutons, etc. C'est le côté cadre des choses. En ajoutant la fonctionnalité de votre application et en le "branchant" aux bons endroits du cadre, vous transformez cette application vide qui ne fait rien de plus que la gestion de fenêtres, etc. en une véritable application à part entière.

Il existe des types de framework similaires pour les applications Web, pour les applications côté serveur, etc. Dans chaque cas, le framework fournit l'essentiel du code fastidieux et répétitif (si tout va bien) pendant que vous fournissez la fonctionnalité de domaine qui pose problème. (C’est l’idéal. En réalité, le succès du cadre est très variable.)

J'insiste à nouveau sur le fait qu'il s'agit d'une vue simplifiée de ce qu'est un cadre. Je n'utilise pas de termes effrayants tels que "Inversion of Control", etc., bien que la plupart des frameworks intègrent de tels concepts effrayants. Depuis que vous êtes débutant, je pensais que je vous épargnerais le jargon et choisirais une comparaison facile.

Je ne suis pas sûr qu'il y ait une définition claire du "cadre". Parfois, un grand ensemble de bibliothèques est appelé un framework, mais je pense que l'utilisation typique de Word est plus proche de la définition apportée par aioobe.

This very Nice article résume la différence entre juste un ensemble de bibliothèques et un framework:

Un framework peut être défini comme un ensemble de bibliothèques disant "Ne nous appelez pas, nous vous appellerons".

Comment un cadre vous aide-t-il? Parce qu'au lieu d'écrire quelque chose à partir de zéro, vous ne faites que développer une application donnée. Vous obtenez ainsi beaucoup de productivité - parfois, l'application résultante peut être beaucoup plus élaborée que vous n'auriez pu le faire par vous-même dans le même laps de temps - mais vous échangez généralement beaucoup de flexibilité.

12
Oak

Une explication simple est: Un framework est un échafaudage sur lequel vous pouvez construire des applications.

Un framework fournit généralement des fonctionnalités de base que vous pouvez utiliser et étendre pour créer des applications plus complexes. Il existe des frameworks pour toutes sortes de choses. Le framework MVC de Microsofts en est un bon exemple. Il fournit tout ce dont vous avez besoin pour démarrer votre site Web en utilisant le modèle MVC, il gère les requêtes Web, les itinéraires, etc. Tout ce que vous avez à faire est d'implémenter des "contrôleurs" et de fournir des "vues" qui sont deux constructions définies par le framework MVC. Le framework MVC gère ensuite l'appel de vos contrôleurs et le rendu de vos vues.

Peut-être pas la meilleure formulation mais j'espère que cela aidera

7
Sekhat

au niveau le plus bas, un cadre est un environnement dans lequel on vous donne un ensemble d’outils pour travailler avec

ces outils se présentent sous la forme de bibliothèques, de fichiers de configuration, etc.

cet "environnement" vous fournit la configuration de base (rapports d'erreurs, fichiers journaux, paramètres de langue, etc.) ... qui peut être modifiée, étendue et améliorée.

Les gens n’ont en fait pas besoin de cadres, c’est juste une question de vouloir gagner du temps, et d’autres simplement de préférences personnelles.

Les gens vont justifier cela avec un framework, vous n'avez pas à coder à partir de zéro. Mais ce ne sont que des gens qui confondent les bibliothèques avec les frameworks.

Je ne suis pas partial ici, j'utilise actuellement un cadre.

4
yretuta

En général, un cadre de travail est réel ou une structure conceptuelle est destiné à servir de support ou de guide pour la construction de quelque chose qui élargit la structure en quelque chose d'utile ...

3
uma

Un cadre nous aide à utiliser le "déjà créé", une métaphore peut être comme,

pense que le matériel de la terre est le langage de programmation,

et par exemple "une caméra" est le programme, et vous avez décidé de créer un cahier. Vous n'avez pas besoin de recréer la caméra à chaque fois, vous utilisez simplement le framework Earth (par exemple, dans un magasin de technologie), prenez la caméra et l'intégrez à votre ordinateur portable.

2
stckvrflw

Au-delà des définitions, qui ne sont parfois compréhensibles que si vous comprenez déjà, un exemple m'a aidé.

Je pense que j'ai une petite lueur de compréhension lorsque je ne cherche pas à trier une liste dans .Net; un exemple de framework fournissant une fonctionnalité adaptée par un code utilisateur fournissant une fonctionnalité spécifique. Prendre List.Sort (IComparer). L'algorithme de tri, qui réside dans le framework .Net dans la méthode de tri, doit effectuer une série de comparaisons. l'objet A vient-il avant ou après l'objet B? Mais Sort lui-même n'a aucune idée de comment faire la comparaison; seul le type en cours de tri le sait. Vous ne pouviez pas écrire un algorithme de tri de comparaison pouvant être réutilisé par de nombreux utilisateurs et anticiper tous les différents types que vous seriez appelé à trier. Vous devez laisser ce travail à l'utilisateur lui-même. Donc ici, sort, c'est-à-dire le framework, rappelle une méthode dans le code utilisateur, le type étant trié afin qu'il puisse faire la comparaison. (Ou un délégué peut être utilisé; même point.)

Ai-je bien compris?

2
BillB

Un cadre a certaines fonctions dont vous pourriez avoir besoin. vous avez peut-être besoin d'une sorte de matrice dotée de mécanismes de tri intégrés. Ou peut-être avez-vous besoin d'une fenêtre dans laquelle vous souhaitez placer des contrôles, tout ce que vous pouvez trouver dans un cadre. c'est une sorte de travail qui couvre un cadre autour de votre propre travail.

EDIT: OK, je suis sur le point de creuser ce que vous essayiez de me dire;) vous n’avez peut-être pas remarqué l’information entre les lignes "TRAVAIL qui couvre un cadre ..." avant que celle-ci ne tombe plus profondément. J'essaie de lui donner la parole en espérant que tu es gracieusement:
une bonne explication à la question "Différence entre une bibliothèque et un framework" que j'ai trouvé ici
http://ifacethoughts.net/2007/06/04/difference-between-a-library-and-a-framework/

2
OlimilOops

Un cadre fournit des fonctionnalités/solutions au problème particulier.
Définition de wiki :

Un framework logiciel, en programmation informatique, est une abstraction dans laquelle un code commun fournissant des fonctionnalités génériques peut être remplacé ou spécialisé de manière sélective par un code utilisateur fournissant des fonctionnalités spécifiques. Les frameworks constituent un cas particulier de bibliothèques de logiciels en ce sens qu’ils sont des abstractions de code réutilisables encapsulées dans une interface de programmation d’application (API) bien définie, tout en contenant certaines caractéristiques distinctives qui les séparent des bibliothèques normales.

2
Soe Moe