Qu'est-ce qu'un framework logiciel? [fermé]

193

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

Anxieux
la source

Réponses:

422

Je suis très en retard pour y répondre. Mais, je voudrais 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 feriez sûrement. Mais supposons que je vous demande de couper 1000 feuilles 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 à l'aide de celui-ci, vous pourriez couper 1000 feuilles de papier en moins de temps. Donc, ce que vous avez fait était de créer un cadre qui ferait un type de tâche spécifique. Au lieu d'exécuter le même type de tâche encore et encore pour le même type d'applications, vous créez un cadre regroupant toutes ces fonctionnalités dans un joli paquet, fournissant ainsi l'abstraction de votre application et, plus important encore, de nombreuses applications.

Neha Choudhary
la source
27
Je voudrais connaître la raison du vote négatif sur la réponse. Cela m'aidera à l'améliorer.
Neha Choudhary
4
cool très facile à comprendre ........... merci beaucoup
Premkumar
25
@NehaChoudhary, pas moi, mais il -1 parce que ce dont vous parlez est une bibliothèque, pas un framework car il n'y a pas d'IoC.
Pacerier
11
J'ai lu votre message, mais ce que vous publiez ressemble à ce qu'une bibliothèque peut faire. Que diriez-vous d'expliquer la différence entre le framework et la bibliothèque?
Aaron Liu
2
Je ne comprends pas. D'après ce que vous avez expliqué, cela ressemblerait plus à une bibliothèque, n'est-ce pas?
routeur
92

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

Et si vous voulez créer une webapp moderne, vous n'avez pas besoin non plus d'utiliser un framework pour cela.

À la place, vous pouvez choisir d'écrire toute la logique dont vous avez besoin. Vous pouvez écrire votre propre couche de persistance / stockage des données, ou - si vous êtes trop occupé - écrire simplement du SQL personnalisé pour chaque accès à la base de données. Vous pouvez écrire vos propres couches d'authentification et de gestion de session. Et votre propre modèle de rendu logique. Et votre propre logique de gestion des exceptions. Et vos propres fonctions de sécurité. Et votre propre framework de test unitaire pour vous assurer que tout fonctionne bien. Et le vôtre ... [continue pendant assez longtemps]

Là encore, si vous faites utiliser un cadre , vous serez en mesure de profiter de la bonne, évaluées par les pairs et très bien testé généralement le travail de dizaines , voire des centaines d'autres développeurs, qui peuvent bien être mieux que vous. Vous pourrez construire ce que vous voulez rapidement, sans avoir à passer du temps à construire ou à vous soucier trop des éléments d'infrastructure répertoriés ci-dessus.

Vous pouvez en faire plus en moins de temps, et sachez que le code cadre que vous utilisez ou étendez est très probablement mieux fait que vous ne le faites vous-même.

Et le coût de cela? Investir un peu de temps pour apprendre le cadre. Mais - comme pratiquement tous les développeurs Web l'attesteront - cela vaut vraiment le temps passé à apprendre à tirer des avantages massifs (vraiment, massifs) de l'utilisation du cadre que vous choisissez.

Steve Jalim
la source
17
Pourquoi ne pas mettre cette énergie à contribuer à un cadre open-source, plutôt que de fouetter vos propres trucs? «Seul, nous pouvons déplacer des rochers; ensemble, nous pouvons déplacer des montagnes »et tout ça
Steve Jalim
7
@Jefffrey "Alors comment allez-vous apprendre? Comment allez-vous grandir en tant que programmeur?" Apprenez comme vous voulez, mais si vous avez l'intention de travailler pour un vrai client, vous devez fournir la meilleure solution possible dans les plus brefs délais. VOTRE code "probablement buggé" n'est pas acceptable pour cela.
Cmorales
6
@Cmorales, si vous voulez apprendre un langage de programmation ou tout problème spécifique à un domaine, vous n'aurez sûrement pas de "vrai" client (et vous aurez peut-être beaucoup de temps entre vos mains) et c'est pourquoi je suggère aux débutants ne pas partir des cadres.
Chaussure
3
@Jefffrey Vous n'avez rien dit sur les débutants dans votre commentaire, c'était général. Je suis d'accord que vous devez d'abord apprendre par vous-même, mais votre commentaire ne le précise pas et dans la vraie vie (professionnelle), vous ne pouvez pas vous permettre d'utiliser du code buggy juste pour apprendre. Je connais des gars qui n'utilisent pas de frameworks parce qu'ils pensent qu'ils connaissent mieux ... et passent deux fois plus de temps pour chaque projet.
Cmorales
1
@Cmorales Je connais aussi des gens qui utilisent des frameworks mais prennent également deux fois plus de temps pour chaque projet. La vitesse de programmation n'est pas toujours liée aux outils utilisés.
Cypher
53

Le résumé sur Wikipedia (Software Framework) (premier google hit btw) l'explique assez bien:

Un cadre logiciel, en programmation informatique, est une abstraction dans laquelle le code commun fournissant des fonctionnalités génériques peut être sélectivement remplacé ou spécialisé par le code utilisateur fournissant des fonctionnalités spécifiques. Les cadres sont un cas particulier des bibliothèques de logiciels en ce qu'ils sont des abstractions réutilisables de code enveloppées dans une interface de programmation d'application (API) bien définie, mais elles contiennent des caractéristiques distinctives 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 de contrôle - Dans un cadre, contrairement aux bibliothèques ou 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 cadre peut être étendu par l'utilisateur généralement par un remplacement sélectif ou spécialisé par un 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 framework, mais pas modifier son 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.

aioobe
la source
13
la partie blanche de votre réponse était bien meilleure que la partie grise, selon le type de question ...
OlimilOops
Je suis à peu près sûr que la personne qui a posé la question a également trouvé l'entrée Wikipedia ... Il / Elle a probablement cherché une réponse plus complète.
Stophface
31

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

En simplifiant un peu les choses, vous pouvez voir un cadre comme une application complète, à l'exception de la fonctionnalité réelle. Vous branchez la fonctionnalité et PRESTO! vous avez une application.

Prenons, par exemple, un cadre GUI. Le cadre contient tout ce dont vous avez besoin pour faire une demande. En effet, vous pouvez souvent faire une application minimale avec très peu de lignes de source qui ne fait absolument rien - mais cela vous donne la gestion des fenêtres, la gestion des sous-fenêtres, les menus, les barres de boutons, etc. C'est le côté cadre des choses. En ajoutant la fonctionnalité de votre application et en la «branchant» aux bons endroits dans le cadre, vous transformez cette application vide qui ne fait rien de plus que la gestion des fenêtres, etc. en une véritable application à part entière.

Il existe des types de cadres similaires pour les applications Web, pour les applications côté serveur, etc. Dans chaque cas, le cadre fournit la majeure partie du code répétitif fastidieux (espérons-le) pendant que vous fournissez la fonctionnalité de domaine à problème réel. (C'est l'idéal. En réalité, bien sûr, le succès du cadre est très variable.)

Je souligne à nouveau qu'il s'agit de la vision simplifiée de ce qu'est un cadre. Je n'utilise pas de termes effrayants comme "Inversion de contrôle" et autres, bien que la plupart des cadres aient de tels concepts effrayants intégrés. Puisque vous êtes débutant, j'ai pensé vous épargner le jargon et partir avec une comparaison facile.

JUSTE MON AVIS correct
la source
14

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

Ce très bel article résume la différence entre un ensemble de bibliothèques et un framework:

Un cadre peut être défini comme un ensemble de bibliothèques qui disent: «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 étendez simplement une application fonctionnelle donnée. Vous obtenez beaucoup de productivité de cette façon - parfois l'application résultante peut être beaucoup plus élaborée que vous n'auriez pu le faire vous-même dans le même laps de temps - mais vous échangez généralement beaucoup de flexibilité.

Chêne
la source
8

Une explication simple est la suivante: un framework est un échafaudage autour duquel vous pouvez créer des applications.

Un cadre 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 cadres pour toutes sortes de choses. Le framework MVC de Microsofts en est un bon exemple. Il fournit tout ce dont vous avez besoin pour sortir du site Web de construction au sol en utilisant le modèle MVC, il gère les demandes Web, les itinéraires et autres. 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 aide

Sekhat
la source
1
En fait, cela ressemble plus à la création d'applications dans l'échafaudage qu'autour .
Jörg W Mittag
4

au niveau le plus bas, un cadre est un environnement, où vous disposez d'un ensemble d'outils pour travailler avec

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

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

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

Les gens justifieront qu'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 biaisé ici, j'utilise actuellement un cadre.

yretuta
la source
4

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

uma
la source
2

Un cadre fournit des fonctionnalités / solution à la zone de problème particulière.
Définition du wiki :

Un cadre logiciel, en programmation informatique, est une abstraction dans laquelle le code commun fournissant des fonctionnalités génériques peut être sélectivement remplacé ou spécialisé par le code utilisateur fournissant des fonctionnalités spécifiques. Les cadres sont un cas particulier des bibliothèques de logiciels en ce qu'ils sont des abstractions réutilisables de code enveloppées dans une interface de programmation d'application (API) bien définie, mais elles contiennent des caractéristiques distinctives clés qui les séparent des bibliothèques normales.

Soe Moe
la source
Il y a un mot dans la première phrase "abstraction". Que veux-tu dire par là ? où utilisons-nous l'abstraction?
Kumaresan Perumal
2

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

pense que la matière terrestre est le langage de programmation,

et par exemple "un appareil photo" 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 pour un magasin de technologie), prenez la caméra et intégrez-la à votre ordinateur portable.

stckvrflw
la source
2

Un framework a quelques fonctions dont vous pourriez avoir besoin. vous avez peut-être besoin d'une sorte de tableaux dotés de mécanismes de tri intégrés. Ou peut-être avez-vous besoin d'une fenêtre où vous souhaitez placer des contrôles, tout ce que vous pouvez trouver dans un cadre. c'est une sorte de TRAVAIL qui s'étend sur un CADRE autour de votre propre travail.

EDIT: OK, je suis sur le point de creuser ce que vous essayez de me dire;) vous n'avez peut-être pas remarqué les informations entre les lignes "TRAVAIL qui s'étend sur un CADRE autour ..." avant que cela ne tombe plus profondément. J'essaie de lui donner la parole en espérant que vous êtes gracieux:
une bonne explication à la question "Différence entre une bibliothèque et un framework" J'ai trouvé ici
http://ifacethoughts.net/2007/06/04/difference-between- une-bibliothèque-et-un-framework /

OlimilOops
la source
ne comprends absolument pas les votes négatifs ... Je suis complètement abasourdi à ce sujet. la question est le genre de question de base pour débutant et ma réponse était plutôt bonne ...
OlimilOops
4
Pour être clair: je n'ai pas voté contre. Cependant, ce dont vous parlez est à un niveau beaucoup plus bas que ce qui concerne un cadre. Les algorithmes de collecte et de tri sont davantage des bibliothèques standard que des frameworks par exemple.
Bakkal
1
merci pour la réponse mais ... ce n'est pas la réponse à ma question. selon la question de l'OP, la distinction entre "bibliothèque standard" et "framework" n'est pas la bonne place ici. Par exemple, dans le .net-framework, vous pouvez trouver les collections d'espaces de noms dans une partie du framework Je n'ai jamais entendu personne dire que la collecion d'espace de noms ne fait pas partie du .netframework. donc votre réponse à ma question est fausse
OlimilOops
1
Ceci est la définition d'une bibliothèque . Il manque le trait distinctif d'un framework par opposition à une bibliothèque: Inversion of Control .
Jörg W Mittag
2

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 eu une petite lueur de compréhension lorsque j'ai commencé à trier une liste dans .Net; un exemple de cadre fournissant une fonctionnalité adaptée par un code utilisateur fournissant une fonctionnalité spécifique. Prenez List.Sort (IComparer). L'algorithme de tri, qui réside dans le framework .Net de la méthode Sort, doit effectuer une série de comparaisons; l'objet A vient-il avant ou après l'objet B? Mais Sort lui-même ne sait pas comment faire la comparaison; seul le type trié le sait. Vous ne pouviez pas écrire un algorithme de tri de comparaison qui puisse ê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, tri, alias le framework, rappelle une méthode dans le code utilisateur, le type étant trié pour qu'il puisse faire la comparaison. (Ou un délégué peut être utilisé;

Ai-je bien compris?

BillB
la source