Термін "контекст" в програмуванні? [зачинено]


161

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

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

Я шукав контекст у Stack Overflow, але жодне питання / відповіді не змогло мені допомогти.

Я був би дуже радий, якби хтось міг надати мені пояснення.


6
Контекст говорить: область, в якій діє цей об’єкт.
Blundell

7
Контекст - це стан об'єкта чи системи, у певний момент часу
Метт

Відповіді:


190

Скажімо, ви йдете до стоматолога, щоб витягнути зуб.

Коли портьє запитує у вас своє ім’я, це інформація, яка їм потрібна для початку зустрічі. У цьому прикладі ваше ім’я - це контекстна інформація . Тож у контексті відвідування стоматолога вам потрібно вказати своє ім’я, щоб витягнути зуб.

Тепер скажімо, що ви заходите до банку.

У банку ви просите зняти 100 доларів. Постачальник повинен встановити вашу особу, перш ніж віддавати гроші, тому вам, мабуть, доведеться показати їм посвідчення водія або проведіть пальцевою карткою банкомата та ввести свій PIN-код. У будь-якому випадку, що ви надаєте, це контекст . Подавець використовує цю інформацію для переміщення транзакції вперед. Потім вони можуть запитати вас, з якого облікового запису ви хочете зняти. Коли ви відповідаєте "Мій ощадний рахунок" , це ще більше контексту .

Чим більше контексту ви надаєте, тим більше знань має інша сторона, щоб допомогти вирішити ваш запит. Іноді контекст є необов’язковим (наприклад, набираючи все більше слів у пошуковій системі Google, щоб отримати кращі результати), а іноді це потрібно (наприклад, надання вашого PIN-коду в банкоматі). Так чи інакше, це інформація, яка зазвичай допомагає зробити речі.

Тепер скажімо, що ви берете свої 100 доларів і купуєте квиток на літак, щоб летіти кудись тепло, поки рот заживає.

Ви приїжджаєте в приємне сонячне місце призначення, але ваша сумка не встигає. Він загублений десь в системі аеропорту. Отже, ви берете свій "квиток на претензію на багаж" (цей наклейку з штрих-кодом на ньому) в "Офіс втраченого багажу". Перше, що запитає людина за столом - це квиток з номером вашого багажу. Це приклад якогось необхідного контексту .

Але тоді людина, яка займається багажем, просить у вас більше інформації про ваш мішок, як, щоб вони могли його легше знайти. Вони запитують: " Якого кольору? Якого розміру? Чи мають колеса? Він твердий чи м'який? Хоча їм не обов'язково потрібні ці відомості, це допомагає звузити речі, якщо ви надаєте їх. Це зменшує Проблемна область. Це робить пошук набагато швидшим. Це необов'язковий контекст .

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

Наведені вище приклади - із реального життя, але їх можна легко віднести до областей інформатики. Наприклад, заголовки HTTP містять контекстну інформацію. Кожен заголовок стосується інформації про зроблений запит. Або коли ви надсилаєте глобальний ідентифікатор транзакції як частина двофазного процесу фіксації , цей ідентифікатор транзакції є контекстом. Це допомагає менеджеру транзакцій координувати роботу, оскільки це інформація про загальну задачу.

Сподіваюся, що це допомагає.


22
@Brian: З вашої публікації та інших відповідей, що даються тут, я думаю, я можу почати це розуміти. Об'єкт, який несе інформацію про стан події, є об'єктом "Контексту"? Це було б правильно? Отже, об’єкт RequestContext буде нести інформацію про конкретний запит, правильно? І коли надійде інший запит, інформація, приєднана до об'єкта RequestContext, зміниться. Неправильно сказати, що контекст-об’єкт трохи схожий на DTO (об'єкт передачі даних)? Однак контекст несе в собі інформацію про різні пов'язаних з «речами» , а несе інформацію DTO в об'єкті , такі як людина? Спасибі
user772058

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

5
@Brian: Ще одне питання було поставлене на думку, коли говорити про контекстні меню, то значення контексту, як я дізнався з цієї відповіді, не має сенсу в моїй голові. Як я розумію, зараз контекст (короткий) для перенесення стану про щось. Отже, що це означає при використанні слова «контекст» таким чином?
користувач772058

9
Гарне питання. Значення "контексту" в "контекстному меню" полягає в тому, "речі, які ви побачите в меню, залежать від того, де ви натискаєте, коли ви натискали і що ще відбувається у вашій програмі". Ці фрагменти інформації (де / коли / те, що ви натиснули) представляють контекст і будуть надіслані до коду графічного інтерфейсу, щоб він міг вирішити, що пропонувати в меню.
Брайан Келлі

2
Отже, параметри методу - контекстні. Я помиляюся?
Може Айдоган

14

Контекст можна розглядати як відро для передачі інформації навколо. Зазвичай він використовується для передачі речей, не обов'язково пов'язаних безпосередньо з викликом методу, але все ще може бути доречним. Лайферний спосіб його опису може бути "речі, які можуть вас хвилювати".

Наприклад, якщо ви писали службу для оновлення значення в db, ви, ймовірно, передасте ідентифікатор запису та нове значення.

Якщо ви хочете загальні інтерфейси, ви можете також визначити контекст, який потрібно пройти, щоб служба могла виконувати довільну бізнес-логіку. Таким чином, ви можете включити автентифікацію користувача, стан сеансу користувача тощо ... в контексті, оскільки служба може виконувати додаткову логіку, залежну від цих значень.


7
Ще один корисний спосіб думати про це - "інформація про те, що відбувається". Або, більш академічно, це "метаінформація". Це досить академічна фраза, але вона точна. У цьому контексті.
Брайан Келлі

4
в основному стан у певний момент часу, не складніший за це
Метт

13

Це 2015 рік - може через роки після початку цієї нитки.

Тим не менш, я надсилаю це повідомлення, щоб допомогти будь-кому там, як я, який важко зрозуміти "Контекст"

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

"Концептуально-контекстний" - це те саме, що "скажіть мені більше". Коли клієнт робить запит на сервер - для того, щоб виконати запит, сервер каже "дайте мені ще трохи інформації, щоб я міг вам допомогти". Таким чином, разом із запитом, клієнт надає пакет реквізитів. Сервер вибирає і вибирає з пакета всі фрагменти інформації, необхідні для обслуговування запиту. Цей пакет є тим, що називається "Контекст"

Напр

Пацієнт йде до лікаря і каже, що лікує_ме ("у мене болить голова") Кабінет лікаря дає пацієнту форму для заповнення. Пацієнт заповнює форму. Форма використовується лікарем для виконання запиту "лікувати_ме".

Ось як зараз виглядає запит:

treat_me ( "i have a headache", filled_form_num_23321 ) 

Ось як filled_form_num_23321 виглядає:

В. Що призведе до стану? A. 10
кілочок акуратного шотландського останнього запитання. А. Джо Бігдрікер
Бігдрікер. 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 для легкого, але всебічного ознайомлення з такими поняттями, як контекст , модульність , зв’язок , згуртованість тощо.


Я бачу, є друге видання. Чи можу я прочитати його і там?
користувач772058

Я переглянув друге видання у книгарні і вирішив дотримуватися оригіналу. Я не пам'ятаю, чому.
Апалала

2

Контекст у вашому випадку - це середовище, де працює ваша програма.

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

HTH


0

Занадто часто автор припускає, що читач має детальне розуміння контексту, у якому використовується слово "контекст".

Як визначити контекст у наступному реченні "Час виконання створює контекст, в якому можна зберігати можливі значення для ін'єкцій. Цей контекст може бути змінено, наприклад, додаток та рамки можуть додавати елементи до контексту.

Здавалося б, автор використовує контекст, щоб означати якийсь контейнер, можливо, купу, що містить щось у контексті. Це стало кайфовим словом, яке набуває багатьох значень і плутає речі. Це елементи, які є контекстом і зберігаються в контексті. Для зменшення плутанини контексту, що використовується слово контекст, можна сказати, що "час виконання створює контейнер для зберігання контексту у вигляді елементів". Ще краще, "час виконання створює контейнер для зберігання стану у вигляді елементів, і цей контейнер з його станом називається КОНТЕКСТ."


0

3 роки пізніше, можливо, трохи пізно, але, можливо, ця нитка допоможе тобі. Це ілюструє, що слово "контекст" має технічне значення в програмуванні (а не просто звичайне англійське значення).

Які мови програмування без контексту?

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

Редагувати: Або, принаймні, це показує, що термін "контекст" можна застосовувати в технічному, програмному контексті (не призначений для кару). Можливо, в більш ніж одному конкретному застосуванні цього терміна.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.