Der Begriff "Kontext" in der Programmierung? [geschlossen]

161

Ich programmiere seit einigen Monaten und ein häufig verwendetes Wort ist "Kontext" im Unterricht. Wie ServletContext(Java), Activity(Android), Service(Java, Android), NSManagedContext(Objective-C, iOS).

Wenn ich in Wörterbüchern nachschaue, sehe ich, dass das Wort bedeutet: Situation, Umgebung, Umstände usw. Da ich jedoch kein englischer Muttersprachler bin, verstehe ich nicht, in was ich es direkt übersetzen soll. Wenn ich zum Beispiel eine Klasse schreiben würde, die entweder benannt wurde SomeClassContext, oder eine Methode, die einen Kontextparameter hat, würde ich nicht verstehen, wann ich sie als Kontext benennen sollte, weil ich sie nicht verstehe.

Ich habe nach Kontext für Stack Overflow gesucht, aber keine Frage / Antwort konnte mir helfen.

Ich würde mich sehr freuen, wenn mir jemand die Erklärung geben könnte.

user772058
quelle
6
Der Kontext sagt: Der Bereich, in dem dieses Objekt agiert.
Blundell
7
Kontext ist der Zustand eines Objekts oder Systems zu einem bestimmten Zeitpunkt
Matt

Antworten:

190

Angenommen, Sie gehen zum Zahnarzt, um sich einen Zahn herausziehen zu lassen.

Wenn die Rezeptionistin Sie nach Ihrem Namen fragt, sind dies Informationen, die sie benötigen, um den Termin zu beginnen. In diesem Beispiel handelt es sich bei Ihrem Namen um Kontextinformationen . Im Zusammenhang mit einem Zahnarztbesuch müssen Sie also Ihren Namen angeben, damit Ihr Zahn gezogen wird.

Nehmen wir jetzt an, Sie gehen zur Bank.

Bei der Bank bitten Sie um Abhebung von 100 US-Dollar. Der Kassierer muss Ihre Identität feststellen, bevor er Ihnen Geld gibt. Daher müssen Sie ihm wahrscheinlich einen Führerschein vorzeigen oder Ihre Geldautomatenkarte durchziehen und Ihre PIN-Nummer eingeben. In jedem Fall ist das, was Sie bereitstellen, der Kontext . Der Kassierer verwendet diese Informationen, um die Transaktion voranzutreiben. Sie werden dann möglicherweise gefragt, von welchem ​​Konto Sie abheben möchten. Wenn Sie mit "Mein Sparkonto" antworten, ist das noch mehr Kontext .

Je mehr Kontext Sie angeben, desto mehr Wissen muss die andere Partei zur Bearbeitung Ihrer Anfrage bereitstellen. Manchmal ist der Kontext optional (wie das Eingeben von immer mehr Wörtern in Ihre Google-Suche, um bessere Ergebnisse zu erzielen) und manchmal ist er erforderlich (wie das Angeben Ihrer PIN-Nummer am Geldautomaten). In jedem Fall sind es Informationen, die normalerweise dazu beitragen, Dinge zu erledigen.

Nehmen wir jetzt an, Sie nehmen Ihre 100 Dollar und kaufen ein Flugticket, um an einen warmen Ort zu fliegen, während Ihr Mund heilt.

Sie kommen an einem schönen sonnigen Ort an, aber Ihre Tasche schafft es nicht. Es ist irgendwo im Flughafensystem verloren. Also bringen Sie Ihr "Gepäckausgabeticket" (diesen Aufkleber mit dem Barcode) zum "Büro für verlorenes Gepäck". Das erste, was die Person hinter dem Schreibtisch verlangt, ist das Ticket mit Ihrer Gepäcknummer. Das ist ein Beispiel für einen erforderlichen Kontext .

Aber dann bittet Sie die Gepäckperson um weitere Informationen über Ihre Tasche, damit sie diese leichter finden kann. Sie fragen: " Welche Farbe hat es? Welche Größe hat es? Hat es Räder? Ist es hart oder weich? Obwohl sie diese Informationen nicht unbedingt benötigen, hilft es, die Dinge einzugrenzen, wenn Sie sie bereitstellen. Es reduziert die Problembereich. Dies beschleunigt die Suche erheblich. Dies ist ein optionaler Kontext .

Hier ist der interessante Teil: Bei vielen Software- und APIs wird der erforderliche Kontext normalerweise als tatsächlicher Parameter in einer Methodensignatur angezeigt, und der optionale Kontext wird an eine andere Stelle verschoben, z. B. eine flexible Schlüsselwertzuordnung, die alles enthalten kann (und möglicherweise leer ist) ) oder in einen threadlokalen Speicher, auf den bei Bedarf zugegriffen werden kann.

Die obigen Beispiele stammen aus dem wirklichen Leben, aber Sie können sie leicht auf Bereiche innerhalb der Informatik abbilden. Beispielsweise enthalten HTTP-Header Kontextinformationen. Jeder Header bezieht sich auf Informationen über die Anfrage. Wenn Sie im Rahmen eines zweiphasigen Festschreibungsprozesses eine globale Transaktions-ID senden , ist diese Transaktions-ID der Kontext. Es hilft dem Transaktionsmanager, die Arbeit zu koordinieren, da es Informationen über die jeweilige Gesamtaufgabe enthält.

Hoffentlich hilft das.

Brian Kelly
quelle
22
@Brian: Aus deinem Beitrag und den anderen hier gegebenen Antworten denke ich, dass ich anfangen kann, es zu verstehen. Ist ein Objekt, das Statusinformationen zu einem Ereignis enthält, ein "Kontext" -Objekt? Wäre das richtig? Ein RequestContext-Objekt enthält also Informationen zu einer bestimmten Anforderung, richtig? Und wenn eine andere Anfrage kommt, ändern sich die an das RequestContext-Objekt angehängten Informationen. Ist es falsch zu sagen, dass ein Kontextobjekt ein bisschen wie ein DTO (Datenübertragungsobjekt) ist? Ein Kontext enthält jedoch Informationen über verschiedene verwandte "Dinge", während DTOs Informationen über ein Objekt wie eine Person enthalten? Danke
user772058
9
Du hast es geschafft, das ist genau richtig. Ein RequestContext enthält tatsächlich Informationen über die laufende Anforderung (z. B. das Gebietsschema des Clients). Kontexte ähneln DTO / VO, sind jedoch normalerweise nicht so stark typisiert. Aber du hast das Konzept in Ordnung.
Brian Kelly
5
@Brian: Eine weitere Frage wurde in den Sinn gebracht, als ich über Kontextmenüs sprach. Die Bedeutung des Kontexts, wie ich aus dieser Antwort gelernt habe, macht in meinem Kopf keinen Sinn. Wie ich jetzt verstehe, ist der Kontext (kurz) für den Übertragszustand über etwas. Was bedeutet es also, wenn das Wort "Kontext" auf diese Weise verwendet wird?
user772058
9
Gute Frage. Die Bedeutung von "Kontext" innerhalb des "Kontextmenüs" lautet: "Das, was Sie im Menü sehen, hängt davon ab, wo Sie klicken, wann Sie geklickt haben und was sonst noch in Ihrer Anwendung passiert." Diese Informationen (wo / wann / was Sie angeklickt haben) stellen den Kontext dar und werden an den GUI-Code gesendet, damit dieser entscheiden kann, welche Dinge im Menü angeboten werden sollen.
Brian Kelly
2
Parameter der Methode sind also Kontext. Liege ich falsch?
Kann Aydoğan
14

Der Kontext kann als ein Bereich angesehen werden, in dem Informationen weitergegeben werden. Es wird normalerweise verwendet, um Dinge zu übergeben, die nicht unbedingt direkt an einen Methodenaufruf gebunden sind, aber dennoch relevant sein können. Eine Art und Weise, wie Laien es beschreiben, könnte "Dinge sein, die Sie interessieren könnten".

Wenn Sie beispielsweise einen Dienst zum Aktualisieren eines Werts in einer Datenbank schreiben, übergeben Sie wahrscheinlich die Datensatz-ID und den neuen Wert.

Wenn Sie generische Schnittstellen wünschen, können Sie auch einen zu übergebenden Kontext definieren, sodass der Service eine beliebige Geschäftslogik ausführen kann. Sie können also eine Benutzerauthentifizierung, den Sitzungsstatus des Benutzers usw. in den Kontext aufnehmen, da der Dienst abhängig von diesen Werten möglicherweise zusätzliche Logik ausführt.

Taylor
quelle
7
Eine weitere nützliche Möglichkeit, darüber nachzudenken, sind "Informationen darüber, was passiert". Oder akademischer ist es "Meta Information". Das ist eine ziemlich akademische Phrase, aber sie ist korrekt. In diesem Kontext.
Brian Kelly
4
Es ist im Grunde der Zustand zu einem Zeitpunkt, nicht komplexer als das
Matt
13

Dies ist 2015 - Mai Jahre nach Beginn dieses Threads.

Trotzdem poste ich diese Nachricht, um jemandem da draußen wie mir zu helfen, der Schwierigkeiten hat, "Kontext" zu verstehen.

Ich behaupte keineswegs, Context in Java-Programmen verwendet zu haben - es liegt also ganz bei Ihnen, Context in Hardcodierung zu schreiben.

"Konzeptioneller Kontext" ist dasselbe wie "Erzählen Sie mir mehr". Wenn ein Client eine Anfrage an den Server stellt - um die Anfrage auszuführen, sagt der Server "Geben Sie mir weitere Informationen, damit ich Ihnen helfen kann". Somit stellt der Client zusammen mit der Anforderung ein Bündel von Details bereit. Der Server wählt aus dem Paket alle Informationen aus, die für die Bearbeitung der Anforderung erforderlich sind. Dieses Bundle wird als "Kontext" bezeichnet.

Z.B

Der Patient geht zum Arzt und sagt "Treat_me" ("Ich habe Kopfschmerzen"). Das Arztbüro gibt dem Patienten ein Formular zum Ausfüllen. Der Patient füllt das Formular aus. Das Formular wird vom Arzt verwendet, um die Anfrage "Treat_me" auszuführen.

So sieht die Anfrage jetzt aus:

treat_me ( "i have a headache", filled_form_num_23321 ) 

So filled_form_num_23321 sieht es aus:

Frage: Was hat zu dem Zustand geführt? A. 10 Stifte ordentlich Scotch Last Nite
Q.Patient Name? A. Joe Bigdrinker
Q.Age? 98

In dieser Transaktion filled_form_num_23321ist der "Kontext".

Ich hoffe, dies hilft bei der Klärung des Konzepts "Kontext".

RAM
quelle
7

Ich stelle mir den Kontext immer als einen bestimmten Zustand vor, der für das Objekt oder Konstrukt relevant ist, mit dem ich arbeite.

Wenn Sie beispielsweise drawRect in einer Ansicht verwenden (wobei alle Zeichnungen für eine Ansicht ausgeführt werden müssen), müssen Sie immer den aktuellen GraphicsContext abrufen, in den Sie Ihre grafischen Kernanweisungen ausgeben. Dieser Kontext enthält Dinge wie Grenzen der Ansicht, die Strichfarbe, die Strichstärke zum Zeichnen einer Linie, die Füllfarbe zum Füllen eines geschlossenen Pfades usw. Dieser Kontext ist (wie die meisten anderen) nur der aktuelle Status zu diesem Zeitpunkt. Stellen Sie sich den Grafikkontext in diesem Fall also nur als eine Reihe von Zuständen vor, wie z

Strichverdickung ist 1,5 Pixel Füllfarbe ist schwarz Sichtgrenzen sind (155, 200) Strichfarbe ist Rot

Es ist im Grunde der Zustand zum aktuellen Zeitpunkt ...

Matt
quelle
5

Um ein praktisches Beispiel zu geben. Nehmen wir an, Sie haben eine bestimmte Webseite, auf der Sie Informationen abrufen / rendern können, die auf dem Benutzer (der angemeldet ist) und der Sprache des Browsers basiert. Die Logik zum Abrufen der Informationen ist unabhängig vom Benutzer und der Sprache. Ihre Seite erhält einen Benutzer und eine Sprache ... für die Logik spielt es keine Rolle, ob ich oder Sie oder Englisch oder Spanisch sind.

Ein Pseudocode:

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

        … do some logic based on the context
    }
}

Es ist nicht so schwierig, aber es dauert einige Zeit, um das Konzept zu verstehen

lukin
quelle
5

Kontext bezieht sich auf den Ausführungskontext , dh die Symbole, die von einem bestimmten Punkt im Code aus erreichbar sind, und auf den Wert dieser Symbole in dieser bestimmten Ausführung.

Der Kontext ist ein wichtiges Konzept, weil:

  1. Ausführbare Einheiten (Funktionen, Prozeduren, Anweisungen) können unterschiedliche Ergebnisse liefern oder sich in unterschiedlichen Kontexten unterschiedlich verhalten.
  2. Je größer oder komplexer der Kontext ist, desto schwieriger ist es zu verstehen, was ein Code tut (deshalb werden globale Variablen gemieden).

Sie müssen nicht schreiben Kontextklassen oder passieren Kontext Parameter. Jeder an eine Funktion / Methode übergebene Parameter wird beim Aufrufen Teil des Ausführungskontexts.

Auch wenn Sie kein Englisch sprechen, empfehle ich Ihnen, eine Kopie von Code Complete durchzugehen, um eine sanfte und dennoch gründliche Einführung in Konzepte wie Kontext , Modularität , Kopplung , Zusammenhalt usw. zu erhalten.

Apalala
quelle
Ich sehe, es gibt eine zweite Ausgabe. Kann ich es dort auch lesen?
user772058
Ich habe die zweite Ausgabe im Buchladen durchgesehen und mich entschlossen, beim Original zu bleiben. Ich erinnere mich nicht warum.
Apalala
2

Der Kontext in Ihrem Fall ist die Umgebung, in der Ihre Anwendung ausgeführt wird.

Es bietet Informationen / Dienste / Fähigkeiten, die Ihre Anwendung benötigt, um ordnungsgemäß ausgeführt zu werden.

HTH

user6656519
quelle
0

Allzu oft geht der Autor davon aus, dass der Leser ein detailliertes Verständnis des Kontexts hat, in dem das Wort "Kontext" verwendet wird.

Wie definiere ich den Kontext im folgenden Satz? "Die? Laufzeit erstellt einen Kontext, in dem die möglichen Werte für die Injektion gespeichert werden können. Dieser Kontext kann geändert werden, z. B. können die Anwendung und das Framework dem Kontext Elemente hinzufügen.

Es scheint, dass der Autor Kontext verwendet, um eine Art Container zu bezeichnen, vielleicht einen Haufen, der den Kontext von etwas enthält. Es ist zu einem Modewort geworden, das viele Bedeutungen und verwirrende Dinge annimmt. Sind es die Elemente, die den Kontext bilden und in einem Kontext gespeichert werden? Um die Verwirrung des Kontexts zu verringern, dass das Wort Kontext verwendet wird, könnte man sagen, dass "die Laufzeit einen Container erstellt, um den Kontext in Form von Elementen zu speichern". Besser noch "Die Laufzeit erstellt einen Container, um den Status in Form von Elementen zu speichern, und dieser Container mit seinem Status wird als KONTEXT bezeichnet."

John
quelle
0

3 Jahre später also vielleicht etwas spät, aber vielleicht würde dir dieser Thread helfen. Es zeigt, dass das Wort "Kontext" eine technische Bedeutung in der Programmierung hat (nicht nur eine einfache englische Bedeutung).

Welche Programmiersprachen sind kontextfrei?

Ich bin mir nicht sicher, ob Sie es als Beispiel verwenden und einige Informationen daraus ziehen können oder nicht. Auch ich würde gerne eine sprachunabhängige Erklärung des technischen Programmierbegriffs "Kontext" hören.

Bearbeiten: Oder es zeigt zumindest, dass der Begriff "Kontext" in einem technischen Programmierkontext angewendet werden kann (kein Wortspiel beabsichtigt). Möglicherweise in mehr als einer konkreten Anwendung des Begriffs.

Jake
quelle