Le terme «Contexte» dans la programmation? [fermé]


161

Je programme depuis quelques mois maintenant et un mot fréquemment utilisé est «contexte» dans les classes. Comme ServletContext(Java), Activity(Android), Service(Java, Android), NSManagedContext(Objective-C, iOS).

En regardant dans les dictionnaires, je vois que le mot signifie: situation, environnement, circonstances, etc. Cependant, comme je ne suis pas anglophone, je ne comprends pas dans quoi je dois le traduire directement. Par exemple, si je devais écrire une classe qui a été nommée SomeClassContext, ou une méthode qui avait un paramètre de contexte, je ne comprendrais pas quand je devrais la nommer context parce que je ne le comprends pas.

J'ai recherché du contexte sur Stack Overflow, mais aucune question / réponse n'a pu m'aider.

Je serais très heureux si quelqu'un pouvait me fournir l'explication.


6
Le contexte dit: la zone dans laquelle cet objet agit.
Blundell

7
Le contexte est l'état d'un objet ou d'un système, à un moment donné
Matt

Réponses:


190

Disons que vous allez chez le dentiste pour vous faire arracher une dent.

Lorsque la réceptionniste vous demande votre nom, ce sont les informations dont elle a besoin pour commencer le rendez-vous. Dans cet exemple, votre nom est une information contextuelle . Ainsi, dans le cadre d'une visite chez le dentiste, vous devez fournir votre nom pour vous faire arracher la dent.

Maintenant, disons que vous vous dirigez vers la banque.

À la banque, vous demandez de retirer 100 $. Le caissier doit établir votre identité avant de vous donner de l'argent, vous devrez donc probablement lui montrer un permis de conduire ou glisser votre carte de guichet automatique et entrer votre code PIN. Quoi qu'il en soit, ce que vous fournissez est le contexte . Le caissier utilise ces informations pour faire avancer la transaction. Ils peuvent ensuite vous demander sur quel compte vous souhaitez effectuer un retrait. Lorsque vous répondez «Mon compte d'épargne» , c'est encore plus de contexte .

Plus vous donnez de contexte, plus l'autre partie a de connaissances pour vous aider à traiter votre demande. Parfois, le contexte est facultatif (comme saisir de plus en plus de mots dans votre recherche Google pour obtenir de meilleurs résultats) et parfois il est nécessaire (comme fournir votre code PIN au guichet automatique). Quoi qu'il en soit, ce sont les informations qui aident généralement à faire avancer les choses.

Maintenant, disons que vous prenez vos 100 $ et achetez un billet d'avion pour voler dans un endroit chaud pendant que votre bouche guérit.

Vous arrivez dans une belle destination ensoleillée, mais votre sac n'y arrive pas. Il est perdu quelque part dans le système aéroportuaire. Ainsi, vous apportez votre «ticket de retrait des bagages» (cet autocollant avec le code-barres dessus) au «bureau des bagages perdus». La première chose que la personne derrière le comptoir demandera est ce billet avec votre numéro de bagage dessus. C'est un exemple de contexte requis .

Mais ensuite, le bagagiste vous demande plus d'informations sur votre sac afin de pouvoir le retrouver plus facilement. Ils demandent: " De quelle couleur est-ce? De quelle taille s'agit-il? Y a-t-il des roues? Est-ce que c'est dur ou mou? Bien qu'ils n'aient pas nécessairement besoin de ces informations, cela permet de réduire les choses si vous les fournissez. zone problématique. Cela rend la recherche beaucoup plus rapide. C'est un contexte facultatif .

Voici la partie intéressante: pour de nombreux logiciels et API, le contexte requis finit généralement comme des paramètres réels dans une signature de méthode, et le contexte facultatif va ailleurs, comme une carte clé-valeur flexible qui peut contenir n'importe quoi (et peut être vide ) ou dans le stockage local du thread où il peut être consulté si nécessaire.

Les exemples ci-dessus sont tirés de la vie réelle, mais vous pouvez facilement les mapper à des domaines de l'informatique. Par exemple, les en-têtes HTTP contiennent des informations contextuelles. Chaque en-tête concerne des informations sur la demande en cours. Ou lorsque vous envoyez un ID de transaction global dans le cadre d'un processus de validation en deux phases , cet ID de transaction est le contexte. Cela aide le gestionnaire de transactions à coordonner le travail car il s'agit d'informations sur la tâche globale à accomplir.

J'espère que cela pourra aider.


22
@Brian: D'après votre message et les autres réponses données ici, je pense que je vais peut-être commencer à le comprendre. Un objet qui transporte des informations d'état sur un événement, est un objet "Contexte"? Serait-ce exact? Donc, un objet RequestContext portera des informations sur une demande spécifique, n'est-ce pas? Et quand une autre demande arrive, les informations attachées à l'objet RequestContext changeront. Est-il faux de dire qu'un objet de contexte est un peu comme un DTO (objet de transfert de données)? Cependant, un contexte contient des informations sur différentes «choses» liées tandis que les DTO portent des informations sur un objet tel qu'une personne? Merci
user772058

9
Vous avez réussi, c'est exactement ça. Un RequestContext portera en effet des informations sur la requête en cours (par exemple, la locale du client). Les contextes sont similaires à DTO / VO mais ne sont généralement pas aussi fortement typés. Mais vous avez bien compris le concept.
Brian Kelly

5
@Brian: Une autre question a été posée à l'esprit, quand on parle de menus contextuels, le sens du contexte tel que j'ai appris de cette réponse n'a pas de sens dans ma tête. Comme je le comprends maintenant, le contexte est (court) pour l'état de report de quelque chose. Alors, qu'est-ce que cela signifie lorsque vous utilisez le mot «contexte» de cette manière?
user772058

9
Bonne question. La signification de «contexte» dans «menu contextuel» est que «les éléments que vous verrez dans le menu dépendent de l'endroit où vous cliquez, du moment où vous avez cliqué et de ce qui se passe dans votre application». Ces informations (où / quand / sur quoi vous avez cliqué) représentent le contexte et seraient envoyées au code de l'interface graphique afin qu'il puisse décider des éléments à proposer dans le menu.
Brian Kelly

2
Ainsi, les paramètres de la méthode sont le contexte. Ai-je tort?
Can Aydoğan

14

Le contexte peut être vu comme un seau pour transmettre des informations. Il est généralement utilisé pour transmettre des éléments qui ne sont pas nécessairement liés directement à un appel de méthode, mais qui peuvent toujours être pertinents. Une manière profane de le décrire pourrait être «des choses qui vous intéressent».

Par exemple, si vous écriviez un service pour mettre à jour une valeur dans une base de données, vous passeriez probablement l'ID d'enregistrement et la nouvelle valeur.

Si vous souhaitez des interfaces génériques, vous pouvez également définir un contexte à transmettre, de sorte que le service puisse exécuter une logique métier arbitraire. Vous pouvez donc inclure une authentification de l'utilisateur, l'état de session de l'utilisateur, etc. dans le contexte, car le service peut exécuter une logique supplémentaire en fonction de ces valeurs.


7
Une autre façon utile d'y penser est «l'information sur ce qui se passe». Ou plus académiquement, ce sont des "méta-informations". C'est une phrase assez académique, mais elle est exacte. Dans ce contexte.
Brian Kelly

4
c'est essentiellement l'état à un moment donné, pas plus complexe que cela
Matt

13

Nous sommes en 2015 - des années après le début de ce fil.

Néanmoins, je publie ce message pour aider toute personne comme moi qui a du mal à comprendre le «contexte»

Je ne prétends en aucun cas avoir utilisé le contexte dans les programmes Java - c'est donc à vous d'écrire le contexte dans un codage en dur Alors voici: -

"Conceptuellement le contexte" est le même "que me dire plus" Lorsqu'un client fait une demande au serveur - afin d'exécuter la demande, le serveur dit "donnez-moi plus d'informations pour que je puisse vous aider". Ainsi, avec la demande, le client fournit un ensemble de détails. Le serveur sélectionne et choisit dans l'ensemble toutes les informations nécessaires pour répondre à la demande. Ce bundle est ce qu'on appelle "Contexte"

Par exemple

Le patient va voir le doc et dit traiter_me ("j'ai mal à la tête") Le bureau du docteur donne au patient un formulaire à remplir. Le patient remplit le formulaire. Le formulaire est utilisé par le médecin pour effectuer la requête "traiter_me".

Voici à quoi ressemble maintenant la demande:

treat_me ( "i have a headache", filled_form_num_23321 ) 

Voici à quoi filled_form_num_23321 ressemble:

Q. Qu'est-ce qui a conduit à la condition? A. 10 piquets de scotch pur la dernière nuit
Q. Nom du patient? A. Joe Bigdrinker
Q.Age? 98

Dans cette transaction filled_form_num_23321est le «contexte».

J'espère que cela aidera à clarifier le concept de «contexte».


7

Je considère toujours le contexte comme un état particulier pertinent pour l'objet ou la construction avec lequel je travaille.

Par exemple, lorsque vous utilisez drawRect dans une vue (où tout le dessin doit être fait pour une vue), vous devez toujours obtenir le currentGraphicsContext dans lequel vous émettez vos instructions graphiques de base. Ce contexte contient des éléments tels que les limites de la vue, la couleur du trait, l'épaisseur du trait pour dessiner une ligne, la couleur de remplissage pour remplir un chemin fermé, etc. ce contexte (comme la plupart des autres) n'est que l'état actuel à ce moment. alors considérez le contexte graphique dans ce cas comme un simple ensemble d'états tels que

le trait s'épaissit est de 1,5 pixels la couleur de remplissage est le noir les limites de la vue sont (155, 200) la couleur du trait est le rouge

C'est fondamentalement l'état au moment actuel ...


5

Pour donner un exemple pratique. Disons que vous avez une certaine page Web pour récupérer / rendre certaines informations en fonction de l'utilisateur (qui est connecté) et de la langue du navigateur. La logique de récupération des informations est indépendante de l'utilisateur et de la langue. Votre page recevra un utilisateur et une langue ... pour la logique, peu importe que ce soit moi ou vous ou l'anglais ou l'espagnol.

Un pseudo code:

class FooPage
{
    void handleRequest(RequestContext context)
    {
        User user = context.getUser();
        Locale locale = context.getLocale();

        … do some logic based on the context
    }
}

Ce n'est pas si difficile, mais cela prend du temps pour comprendre le concept


5

Le contexte fait référence au contexte d' exécution , qui correspond aux symboles accessibles à partir d'un point donné du code, et à la valeur de ces symboles dans cette exécution particulière.

Le contexte est un concept important car:

  1. Les unités exécutables (fonctions, procédures, instructions) peuvent produire des résultats différents ou se comporter différemment dans différents contextes.
  2. Plus le contexte est grand ou complexe, plus il est difficile de comprendre ce que fait un morceau de code (c'est pourquoi les variables globales sont évitées).

Vous n'avez pas besoin d'écrire des classes de contexte ou de transmettre des paramètres de contexte . Tout paramètre passé à une fonction / méthode devient une partie du contexte d'exécution lorsqu'il est appelé.

Même si vous n'êtes pas anglophone, je vous recommande de consulter une copie de Code Complete pour une introduction douce mais approfondie à des concepts tels que le contexte , la modularité , le couplage , la cohésion , etc.


Je vois qu'il y a une deuxième édition. Puis-je lire le trouver là aussi?
user772058

J'ai parcouru la deuxième édition à la librairie et j'ai décidé de m'en tenir à l'original. Je ne me souviens pas pourquoi.
Apalala

2

Le contexte dans votre cas est l'environnement dans lequel votre application s'exécute.

Il fournit des informations / services / capacités dont votre application aura besoin pour fonctionner correctement.

HTH


0

Trop souvent, l'auteur suppose que le lecteur a une compréhension détaillée du contexte dans lequel le mot «contexte» est utilisé.

Comment définir le contexte dans la phrase suivante "Le runtime? Crée un contexte dans lequel les valeurs possibles pour l'injection peuvent être stockées. Ce contexte peut être modifié, par exemple l'application et le framework peuvent ajouter des éléments au contexte.

Il semblerait que l'auteur utilise le contexte pour désigner une sorte de conteneur, peut-être un tas, qui contient le contexte de quelque chose. C'est devenu un mot à la mode qui prend beaucoup de sens et qui prête à confusion. Ce sont les éléments qui sont le contexte et qui sont stockés dans un contexte. Pour réduire la confusion du contexte que le mot contexte est utilisé, on pourrait dire que "le runtime crée un conteneur pour stocker le contexte sous la forme d'éléments." Mieux encore "le runtime crée un conteneur pour stocker l'état sous forme d'éléments et ce conteneur avec son état s'appelle le CONTEXTE".


0

3 ans plus tard, donc peut-être un peu tard, mais peut-être que ce fil vous aiderait. Cela montre que le mot «contexte» a un sens technique en programmation (pas seulement un sens anglais simple).

Quels langages de programmation sont sans contexte?

Je ne sais pas si vous pouvez l'utiliser comme exemple et en tirer des informations ou non. J'aimerais aussi entendre une explication indépendante du langage du terme de programmation technique «contexte»

Edit: Ou cela montre au moins que le terme «contexte» peut être appliqué dans un contexte technique, de programmation (sans jeu de mots). Peut-être dans plus d'une application concrète du terme.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.