Termin „kontekst” w programowaniu? [Zamknięte]

161

Programuję już od kilku miesięcy i często używanym słowem na zajęciach jest „kontekst”. Podobnie jak ServletContext(Java), Activity(Android), Service(Java, Android), NSManagedContext(Objective-C, iOS).

Zaglądając do słowników, widzę, że słowo to oznacza: sytuację, środowisko, okoliczności itp. Jednak ponieważ nie jestem native speakerem języka angielskiego, nie rozumiem, na co mam je bezpośrednio przetłumaczyć. Na przykład, gdybym miał napisać klasę, która została nazwana SomeClassContextlub metodę, która miałaby parametr kontekstu, nie rozumiałbym, kiedy powinienem nazwać ją kontekstem, ponieważ jej nie rozumiem.

Szukałem kontekstu w Stack Overflow, ale żadne pytanie / odpowiedzi nie były w stanie mi pomóc.

Byłbym bardzo szczęśliwy, gdyby ktoś mógł mi wyjaśnić.

user772058
źródło
6
Kontekst mówi: obszar, w którym działa ten obiekt.
Blundell
7
Kontekst to stan obiektu lub systemu w danym momencie
Matt

Odpowiedzi:

190

Powiedzmy, że idziesz do dentysty, aby wyrwać ząb.

Kiedy recepcjonistka zapyta Cię o imię i nazwisko, są to informacje, których potrzebuje, aby rozpocząć wizytę. W tym przykładzie Twoje imię jest informacją kontekstową . Dlatego w kontekście wizyty u dentysty musisz podać swoje imię i nazwisko, aby wyrwać ząb.

Teraz powiedzmy, że idziesz do banku.

W banku prosisz o wypłatę 100 $. Kasjer musi ustalić Twoją tożsamość przed przekazaniem Ci pieniędzy, więc prawdopodobnie będziesz musiał pokazać mu prawo jazdy lub przeciągnąć kartę bankomatową i wprowadzić numer PIN. Tak czy inaczej, podajesz kontekst . Kasjer wykorzystuje te informacje, aby przesunąć transakcję do przodu. Mogą wtedy zapytać, z którego konta chcesz się wycofać. Kiedy odpowiadasz „Moje konto oszczędnościowe” , jest to jeszcze bardziej kontekst .

Im więcej podasz kontekstu, tym więcej wiedzy ma druga strona, aby pomóc w załatwieniu Twojej prośby. Czasami kontekst jest opcjonalny (np. Wpisywanie coraz większej liczby słów w wyszukiwarce Google, aby uzyskać lepsze wyniki), a czasami jest wymagany (np. Podanie numeru PIN w bankomacie). Tak czy inaczej, są to informacje, które zwykle pomagają załatwić sprawę.

Teraz powiedzmy, że bierzesz swoje 100 $ i kupujesz bilet lotniczy, aby polecieć w ciepłe miejsce, podczas gdy twoje usta goją się.

Docierasz do ładnego słonecznego miejsca, ale Twoja torba nie dotrze. Zgubił się gdzieś w systemie lotniskowym. Dlatego należy zabrać „bilet odbioru bagażu” (naklejkę z kodem kreskowym) do „biura zagubionego bagażu”. Pierwszą rzeczą, o którą poprosi osoba za biurkiem, jest bilet z numerem Twojego bagażu. To jest przykład wymaganego kontekstu .

Ale wtedy osoba zajmująca się bagażem prosi Cię o dodatkowe informacje na temat Twojego bagażu, np. W celu ułatwienia jej znalezienia. Pytają: „ Jaki to kolor? Jaki to rozmiar? Czy ma koła? Czy jest twardy czy miękki? Chociaż niekoniecznie potrzebują tych informacji, pomaga to zawęzić zakres, jeśli je podasz. Zmniejsza to problem. To znacznie przyspiesza wyszukiwanie. To opcjonalny kontekst .

Oto interesująca część: dla wielu programów i interfejsów API wymagany kontekst zwykle kończy się jako rzeczywiste parametry w sygnaturze metody, a kontekst opcjonalny idzie gdzie indziej, jak elastyczna mapa klucz-wartość, która może zawierać cokolwiek (i może być pusta ) lub do magazynu lokalnego wątku, gdzie można uzyskać do niego dostęp w razie potrzeby.

Powyższe przykłady pochodzą z prawdziwego życia, ale można je łatwo przypisać do obszarów informatyki. Na przykład nagłówki HTTP zawierają informacje kontekstowe. Każdy nagłówek dotyczy informacji o wysyłanym żądaniu. Lub gdy wysyłasz globalny identyfikator transakcji jako część procesu zatwierdzania dwufazowego , ten identyfikator transakcji jest kontekstem. Pomaga menedżerowi transakcji koordynować pracę, ponieważ zawiera informacje o ogólnym zadaniu.

Mam nadzieję, że to pomoże.

Brian Kelly
źródło
22
@Brian: Z twojego postu i innych udzielonych tutaj odpowiedzi myślę, że mogę zacząć to rozumieć. Obiekt, który przenosi informacje o stanie zdarzenia, czy jest obiektem „kontekstu”? Czy to byłoby poprawne? Więc obiekt RequestContext będzie zawierał informacje o konkretnym żądaniu, prawda? Gdy nadejdzie kolejne żądanie, informacje dołączone do obiektu RequestContext ulegną zmianie. Czy błędem jest twierdzenie, że obiekt kontekstu jest trochę podobny do DTO (obiekt transferu danych)? Jednak kontekst niesie informacje o różnych powiązanych „rzeczach”, podczas gdy DTO przenosi informacje o obiekcie, takim jak osoba? Dzięki
user772058
9
Udało ci się to, dokładnie tak. RequestContext rzeczywiście będzie zawierał informacje o żądaniu w toku (na przykład ustawienia regionalne klienta). Konteksty są podobne do DTO / VO, ale zwykle nie są tak silnie wpisane. Ale masz dobry koncept.
Brian Kelly
5
@Brian: Jeszcze jedno pytanie przyszło mi do głowy, kiedy mówiłem o menu kontekstowych, znaczenie kontekstu, jakiego nauczyłem się z tej odpowiedzi, nie ma sensu w mojej głowie. Jak rozumiem teraz, kontekst jest (krótki) do przenoszenia stanu o czymś. A więc co to znaczy, gdy w ten sposób używa się słowa „kontekst”?
user772058
9
Dobre pytanie. Znaczenie „kontekstu” w „menu kontekstowym” jest takie, że „zawartość menu zależy od tego, gdzie klikniesz, kiedy kliknąłeś i co jeszcze dzieje się w Twojej aplikacji”. Te informacje (gdzie / kiedy / co kliknąłeś) reprezentują kontekst i zostaną wysłane do kodu GUI, aby mógł zdecydować, jakie rzeczy zaoferować w menu.
Brian Kelly
2
Zatem parametry metody są kontekstem. Czy się mylę?
Can Aydoğan
14

Kontekst można postrzegać jako wiadro do przekazywania informacji. Zwykle jest używany do przekazywania rzeczy niekoniecznie związanych bezpośrednio z wywołaniem metody, ale nadal może mieć znaczenie. Sposób opisania tego przez laika może oznaczać „rzeczy, które mogą Cię zainteresować”.

Na przykład, gdybyś pisał usługę aktualizującą wartość w bazie danych, prawdopodobnie przekazałbyś identyfikator rekordu i nową wartość.

Jeśli potrzebujesz ogólnych interfejsów, możesz również zdefiniować kontekst do przekazania, tak aby usługa mogła wykonywać dowolną logikę biznesową. Możesz więc uwzględnić uwierzytelnianie użytkownika, stan sesji użytkownika itp. W kontekście, ponieważ usługa może wykonywać dodatkową logikę zależną od tych wartości.

Taylor
źródło
7
Innym przydatnym sposobem myślenia o tym jest „informacja o tym, co się dzieje”. Lub, bardziej naukowo, jest to „metainformacja”. To dość akademickie zdanie, ale jest trafne. W tym kontekście.
Brian Kelly
4
w zasadzie jest to stan w danym momencie, nie bardziej skomplikowany niż to
Matt
13

To jest rok 2015 - maj lata po rozpoczęciu tego wątku.

Niemniej jednak publikuję tę wiadomość, aby pomóc każdemu, kto ma trudności ze zrozumieniem „kontekstu”.

W żadnym wypadku nie twierdzę, że korzystałem z kontekstu w programach Java - więc to całkowicie zależy od ciebie, aby napisać kontekst w twardym kodowaniu.

„Kontekst koncepcyjny” to to samo, co „powiedz mi więcej”. Kiedy klient wysyła żądanie do serwera - aby wykonać żądanie, serwer mówi „daj mi więcej informacji, abym mógł ci pomóc”. Dlatego wraz z żądaniem klient dostarcza pakiet szczegółowych informacji. Serwer pobiera i wybiera z pakietu wszystkie informacje wymagane do obsługi żądania. Ten pakiet to tak zwany „kontekst”

Na przykład

Pacjent udaje się do lekarza i mówi treat_me („Boli mnie głowa”) Biuro lekarza daje pacjentowi formularz do wypełnienia. Pacjent wypełnia formularz. Formularz jest używany przez lekarza do realizacji wniosku „Treat_me”.

Oto jak teraz wygląda żądanie:

treat_me ( "i have a headache", filled_form_num_23321 ) 

Oto jak filled_form_num_23321 wygląda:

P: Co doprowadziło do tego stanu? A. 10 kołków schludnej szkockiej ostatniej nocy
Pytanie: Imię pacjenta? A. Joe Bigdrinker
Pytanie Wiek? 98

W tej transakcji filled_form_num_23321jest „kontekst”.

Mam nadzieję, że pomoże to w wyjaśnieniu pojęcia „kontekstu”.

Baran
źródło
7

Zawsze myślę o kontekście jako o szczególnym stanie związanym z obiektem lub konstrukcją, z którą pracuję.

Na przykład, gdy używasz drawRect w widoku (gdzie cały rysunek musi być wykonany dla widoku), zawsze musisz pobrać currentGraphicsContext, w którym będziesz wystawiać podstawowe instrukcje graficzne. Ten kontekst zawiera takie rzeczy, jak granice widoku, kolor obrysu, grubość obrysu przy rysowaniu linii, kolor wypełnienia przy wypełnianiu zamkniętej ścieżki itp. Ten kontekst (jak większość innych) jest po prostu aktualnym stanem w tym momencie. więc pomyśl o kontekście graficznym w tym przypadku jako o zestawie stanów, takich jak

grubość obrysu wynosi 1,5 piksela, kolor wypełnienia to czarne granice widoku to (155, 200), kolor obrysu to czerwony

Zasadniczo jest to stan w obecnym momencie ...

Matt
źródło
5

Aby dać praktyczny przykład. Załóżmy, że masz określoną stronę internetową do pobrania / renderowania pewnych informacji w oparciu o użytkownika (zalogowanego) i język przeglądarki. Logika pobierania informacji jest niezależna od użytkownika i języka. Twoja strona otrzyma użytkownika i język ... ze względu na logikę nie ma znaczenia, czy to ja, czy ty, czy angielski czy hiszpański.

Jakiś pseudokod:

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

        … do some logic based on the context
    }
}

Nie jest to trudne, ale zrozumienie koncepcji zajmuje trochę czasu

lukin
źródło
5

Kontekst odnosi się do kontekstu wykonania , czyli symboli osiągalnych z danego punktu w kodzie oraz wartości tych symboli w tym konkretnym wykonaniu.

Kontekst jest ważną koncepcją, ponieważ:

  1. Jednostki wykonywalne (funkcje, procedury, instrukcje) mogą dawać różne wyniki lub zachowywać się inaczej w różnych kontekstach.
  2. Im większy lub bardziej złożony kontekst, tym trudniej zrozumieć, co robi fragment kodu (dlatego unika się zmiennych globalnych).

Nie musisz pisać klas kontekstu ani przekazywać parametrów kontekstu . Każdy parametr przekazany do funkcji / metody staje się częścią kontekstu wykonania, gdy jest wywoływany.

Nawet jeśli nie mówisz po angielsku, radzę zapoznać się z egzemplarzem Code Complete w celu delikatnego, ale dokładnego wprowadzenia w pojęcia takie jak kontekst , modułowość , sprzężenie , spójność i tak dalej.

Apalala
źródło
Widzę, że jest druga edycja. Czy mogę przeczytać i znaleźć to tam?
user772058
Przeglądałem drugie wydanie w księgarni i postanowiłem pozostać przy oryginale. Nie pamiętam dlaczego.
Apalala
2

Kontekstem w Twoim przypadku jest środowisko, w którym działa aplikacja.

Dostarcza informacji / usług / możliwości, których Twoja aplikacja będzie potrzebować do prawidłowego działania.

HTH

user6656519
źródło
0

Zbyt często autor zakłada, że ​​czytelnik ma dokładne zrozumienie kontekstu, w jakim używane jest słowo „kontekst”.

Jak zdefiniować kontekst w następnym zdaniu „Środowisko uruchomieniowe tworzy kontekst, w którym mogą być przechowywane możliwe wartości do wstrzyknięcia. Kontekst ten można modyfikować, np. Aplikacja i framework mogą dodawać elementy do kontekstu.

Wydawać by się mogło, że autor używa kontekstu do oznaczenia pewnego rodzaju pojemnika, być może stosu, który zawiera kontekst czegoś. Stało się modnym słowem, które nabiera wielu znaczeń i wprowadza w błąd. Czy to elementy są kontekstem i są przechowywane w kontekście. Aby zmniejszyć zamieszanie związane z kontekstem, w którym używane jest słowo context, można powiedzieć, że „środowisko wykonawcze tworzy kontener do przechowywania kontekstu w postaci elementów”. Jeszcze lepiej, że „środowisko wykonawcze tworzy kontener do przechowywania stanu w postaci elementów, a ten kontener ze swoim stanem nazywa się KONTEKST”.

Jan
źródło
0

3 lata później, więc może trochę późno, ale może ten wątek ci pomoże. Pokazuje, że słowo „kontekst” ma znaczenie techniczne w programowaniu (nie jest to zwykłe angielskie znaczenie).

Jakie języki programowania są bezkontekstowe?

Nie jestem pewien, czy możesz użyć tego jako przykładu i wyciągnąć z niego jakieś informacje, czy nie. Ja również chciałbym usłyszeć niezależne od języka wyjaśnienie technicznego terminu „kontekst” programowania

Edycja: Albo przynajmniej pokazuje, że termin „kontekst” może być stosowany w technicznym kontekście programistycznym (bez zamiaru). Prawdopodobnie w więcej niż jednym konkretnym zastosowaniu tego terminu.

Jake
źródło