Термин «Контекст» в программировании? [закрыто]


161

Я программирую уже несколько месяцев, и часто используемое слово «контекст» в классах. Как ServletContext(Java), Activity(Android), Service(Java, Android), NSManagedContext(Objective-C, iOS).

Просматривая словари, я вижу, что слово означает: ситуация, окружающая среда, обстоятельства и т. Д. Однако, поскольку я не являюсь носителем английского языка, я не понимаю, к чему мне следует переводить его напрямую. Например, если бы мне нужно было написать класс с именем SomeClassContextили методом с параметром контекста, я бы не понял, когда мне следует назвать его контекстом, потому что я его не понимаю.

Я искал контекст в переполнении стека, но ни один вопрос / ответ не смог мне помочь.

Я был бы очень рад, если бы кто-то мог дать мне объяснение.


6
Контекст говорит: область, в которой действует этот объект.
Бланделл

7
Контекст - это состояние объекта или системы, в определенный момент времени
Мэтт

Ответы:


190

Допустим, вы идете к стоматологу, чтобы вытащить зуб.

Когда администратор спрашивает у вас ваше имя, это информация, которая им нужна, чтобы начать встречу. В этом примере ваше имя является контекстной информацией . Таким образом , в контексте посещения стоматолога, вам необходимо указать свое имя , чтобы получить ваш зуб тянул.

Теперь допустим, что вы идете в банк.

В банке вы просите снять 100 долларов. Кассир должен подтвердить свою личность, прежде чем давать вам деньги, поэтому вам, вероятно, придется предъявить им водительские права или провести пальцем по своей карте банкомата и ввести свой PIN-код. В любом случае, вы предоставляете контекст . Кассир использует эту информацию для продвижения транзакции. Затем они могут спросить вас, с какого аккаунта вы хотите снять деньги. Когда вы отвечаете «Мой сберегательный счет» , это еще более контекстно .

Чем больше контекста вы дадите, тем больше знаний у другой стороны, чтобы помочь обработать ваш запрос. Иногда контекст является необязательным (например, вводит все больше и больше слов в поиске Google, чтобы получить лучшие результаты), а иногда это требуется (например, ввод PIN-кода в банкомате). В любом случае, это информация, которая обычно помогает сделать вещи.

Теперь предположим, что вы берете свои 100 долларов и покупаете билет на самолет, чтобы летать куда-нибудь теплым, пока заживает рот.

Вы прибываете в хороший солнечный пункт назначения, но ваша сумка не делает это. Это потеряно где-то в системе аэропорта. Таким образом, вы берете свой «билет для получения багажа» (тот стикер со штрих-кодом на нем) в «Бюро пропавших багажа». Первое, что попросит человек за стойкой регистрации, - это билет с номером вашего багажа. Это пример некоторого необходимого контекста .

Но затем багажщик запрашивает у вас дополнительную информацию о вашей сумке, например, чтобы им было легче ее найти. Они спрашивают: « Какого оно цвета? Какой у него размер? Есть ли у него колеса? Твердые или мягкие? Хотя им не обязательно нужны эти фрагменты информации, это помогает сузить круг вопросов, если вы их предоставите. проблемная область. Это делает поиск намного быстрее. Это необязательный контекст .

Вот интересная часть: для многих программ и API требуемый контекст обычно заканчивается как фактические параметры в сигнатуре метода, а необязательный контекст уходит куда-то еще, например, гибкая карта значения ключа, которая может содержать что угодно (и может быть пустой). ) или в локальное хранилище, где к нему можно получить доступ при необходимости.

Приведенные выше примеры взяты из реальной жизни, но вы можете легко сопоставить их с областями информатики. Например, заголовки HTTP содержат контекстную информацию. Каждый заголовок относится к информации о выполняемом запросе. Или когда вы отправляете глобальный идентификатор транзакции как часть процесса двухфазного принятия , этот идентификатор транзакции является контекстом. Это помогает менеджеру транзакций координировать работу, потому что это информация об общей задаче.

Надеюсь, это поможет.


22
@Brian: Из вашего поста и других ответов, приведенных здесь, я думаю, что я могу начать понимать это. Объект, который несет информацию о состоянии события, является объектом «контекста»? Это было бы правильно? Таким образом, объект RequestContext будет нести информацию о конкретном запросе, правильно? И когда придет другой запрос, информация, прикрепленная к RequestContext-объекту, изменится. Неправильно ли говорить, что объект контекста немного похож на DTO (объект передачи данных)? Однако контекст несет информацию о различных связанных «вещах», в то время как DTO несет информацию об объекте, таком как человек? Спасибо
user772058

9
Вы прибили это, это совершенно верно. RequestContext действительно будет содержать информацию о выполняемом запросе (например, локаль клиента). Контексты похожи на DTO / VO, но обычно не так сильно типизированы. Но у вас есть концепция в порядке.
Брайан Келли

5
@Brian: Еще один вопрос, который я вспомнил, когда говорил о контекстных меню, значение контекста, как я узнал из этого ответа, не имеет смысла в моей голове. Как я понимаю, сейчас контекст (короткий) означает состояние переноса о чем-либо. Итак, что это значит, когда слово «контекст» используется таким образом?
user772058

9
Хороший вопрос. Значение «context» в «context menu» означает, что «то, что вы видите в меню, зависит от того, где вы нажимаете, когда нажимаете и что еще происходит в вашем приложении». Эти фрагменты информации (где / когда / что вы щелкнули) представляют контекст и будут отправлены в код графического интерфейса, чтобы он мог решить, что предложить в меню.
Брайан Келли

2
Итак, параметры метода являются контекстными. Я ошибся?
Может Aydoğan

14

Контекст можно рассматривать как контейнер для передачи информации. Обычно он используется для передачи вещей, которые не обязательно связаны напрямую с вызовом метода, но могут быть уместны. Непрофессионал способ описать это может быть "вещи, которые вы можете заботиться".

Например, если вы пишете сервис для обновления значения в БД, вы, вероятно, передадите идентификатор записи и новое значение.

Если вам нужны универсальные интерфейсы, вы также можете определить передаваемый контекст, чтобы служба могла выполнять произвольную бизнес-логику. Таким образом, вы можете включить аутентификацию пользователя, состояние сеанса пользователя и т. Д. В контекст, так как сервис может выполнять дополнительную логику в зависимости от этих значений.


7
Другой полезный способ думать об этом - «информация о том, что происходит». Или, более академично, это «метаинформация». Это довольно академическая фраза, но она точная. В контексте.
Брайан Келли

4
это в основном состояние в определенный момент времени, не более сложное, чем это
Мэтт

13

Это 2015 год, а может и годы после начала этой темы.

Тем не менее, я отправляю это сообщение, чтобы помочь кому-то там, как я, который изо всех сил пытается понять "Контекст"

Я ни в коем случае не утверждаю, что использовал Context в программах на Java - так что вам остается только написать Context в жестком кодировании.

«Концептуально контекст» - это то же самое, что и «расскажи мне больше». Когда клиент делает запрос к серверу, - для выполнения запроса сервер говорит «дай мне больше информации, чтобы я мог помочь тебе». Таким образом, вместе с запросом клиент предоставляет пакет деталей. Сервер выбирает и выбирает из пакета все данные, необходимые для обработки запроса. Этот комплект называется «Контекст»

Например

Пациент идет к врачу и говорит Treat_me («У меня болит голова»). Офис доктора дает пациенту форму для заполнения. Пациент заполняет форму. Форма используется врачом для выполнения запроса "Treat_me".

Вот как выглядит запрос:

treat_me ( "i have a headache", filled_form_num_23321 ) 

Вот как filled_form_num_23321 выглядит:

В. Что приводит к состоянию? A. 10 колышков аккуратного шотландского последнего
ночного Q. Имя пациента? А. Джо Бигдринкер В.
Возраст? 98

В этой транзакции filled_form_num_23321есть «контекст».

Надеюсь, что это помогает прояснить понятие «Контекст».


7

я всегда думаю о контексте как о конкретном состоянии, относящемся к объекту или конструкции, с которыми я работаю.

Например, когда вы используете drawRect в виде (где все рисование должно быть сделано для вида), вы всегда должны получить currentGraphicsContext, в который вы будете выдавать свои основные графические операторы. Этот контекст содержит такие вещи, как границы вида, цвет обводки, толщина обводки для рисования линии, цвет заливки для заполнения замкнутого контура и т. Д. Этот контекст (как и большинство других) является просто текущим состоянием на данный момент времени. так что думайте о графическом контексте в этом случае как о наборе состояний, таких как

толщина обводки 1,5 пикселя; цвет заливки черный; границы обзора (155, 200) цвет обводки красный

Это в основном состояние на текущий момент времени ...


5

Чтобы привести практический пример. Допустим, у вас есть определенная веб-страница для извлечения / отображения некоторой информации в зависимости от пользователя (который вошел в систему) и языка браузера. Логика извлечения информации не зависит от пользователя и языка. Ваша страница получит пользователя и язык ... для логики не имеет значения, если это я или вы, английский или испанский.

Какой-то псевдокод:

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

        … do some logic based on the context
    }
}

Это не так сложно, но требуется некоторое время, чтобы понять концепцию


5

Контекст относится к контексту выполнения , который является символами, достижимыми из заданной точки в коде, и значению этих символов в этом конкретном выполнении.

Контекст является важной концепцией, потому что:

  1. Исполняемые блоки (функции, процедуры, инструкции) могут давать разные результаты или вести себя по-разному в разных контекстах.
  2. Чем больше или сложнее контекст, тем труднее понять, что делает фрагмент кода (именно поэтому глобальные переменные избегаются).

Вам не нужно писать классы контекста или передавать параметры контекста . Любой параметр, переданный функции / методу, становится частью контекста выполнения при его вызове.

Несмотря на то, что вы не говорите по-английски, я рекомендую вам ознакомиться с копией Code Complete, чтобы аккуратно и в то же время тщательно изучить такие понятия, как контекст , модульность , связь , сплоченность и т. Д.


Я вижу, что есть второе издание. Могу ли я прочитать найти там тоже?
user772058

Я просмотрел второе издание в книжном магазине и решил придерживаться оригинала. Я не помню почему.
Апалала

2

Контекст в вашем случае - это среда, в которой работает ваше приложение.

Он предоставляет информацию / услуги / возможности, которые понадобятся вашему приложению для правильной работы.

НТН


0

Слишком часто автор предполагает, что у читателя есть детальное понимание контекста, в котором используется слово «контекст».

Как определить контекст в следующем предложении «Среда выполнения? Создает контекст, в котором могут быть сохранены возможные значения для внедрения. Этот контекст может быть изменен, например, приложение и инфраструктура могут добавлять элементы в контекст.

Казалось бы, автор использует контекст для обозначения некоторого контейнера, возможно, кучи, которая содержит контекст чего-либо. Это стало модным словом, которое приобретает много смысла и запутывает вещи. Элементы, которые являются контекстом и хранятся в контексте. Чтобы уменьшить путаницу в контексте использования слова context, можно сказать, что «среда выполнения создает контейнер для хранения контекста в форме элементов». Более того, «среда выполнения создает контейнер для хранения состояния в форме элементов, и этот контейнер с его состоянием называется КОНТЕКСТ».


0

Спустя 3 года, может быть, немного поздно, но, возможно, эта ветка поможет вам. Это показывает, что слово «контекст» имеет техническое значение в программировании (а не просто английское значение).

Какие языки программирования не зависят от контекста?

Не уверен, что вы можете использовать его в качестве примера и извлечь из него некоторую информацию или нет. Я также хотел бы услышать независимое от языка объяснение термина технического контекста "контекст"

Редактировать: Или, по крайней мере, показывает, что термин «контекст» может применяться в техническом, программном контексте (без намерений). Возможно в более чем одном конкретном применении этого термина.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.