Programlamada “Bağlam” terimi? [kapalı]


161

Birkaç aydır programlama yapıyorum ve sıkça kullanılan bir kelime derslerde "bağlam" dır. SevmekServletContext (Java), Activity(Android) Service(Java, Android), NSManagedContext(Objective-C, iOS).

Sözlüklere bakarak kelimenin şu anlama geldiğini görüyorum: durum, çevre, koşullar vb. Ancak, anadili İngilizce olmadığım için doğrudan neye çevirmem gerektiğini anlamıyorum. Örneğin, ya adlandırılmış bir sınıf ya SomeClassContextda bir bağlam parametresi olan bir yöntem yazacak olsaydım, ne zaman bağlamı adlandırmam gerektiğini anlayamazdım çünkü anlamıyorum.

Stack Overflow ile ilgili içerik arıyordum, ancak hiçbir soru / cevap bana yardımcı olamadı.

Birisi bana açıklama yapabilirse çok mutlu olurum.


6
Bağlam diyor ki: bu nesnenin içinde hareket ettiği alan.
Blundell

7
Bağlam, bir nesnenin veya sistemin zaman içindeki bir noktasının durumudur
Mat

Yanıtlar:


190

Diyelim ki bir diş çekip çıkarmak için dişçiye git.

Resepsiyonist adınızı istediğinde, randevuya başlamak için ihtiyaç duydukları bilgiler budur. Bu örnekte, adınız içeriksel bilgilerdir . Yani bağlamda diş hekiminden, kendi diş çekip almak için adınızı vermeniz gerekir.

Şimdi diyelim ki bankaya doğru yürüyorsunuz.

Bankada 100 $ 'lık para çekme talebinde bulunuyorsunuz. Veznenin size para vermeden önce kimliğinizi oluşturması gerekir, bu yüzden muhtemelen onlara bir sürücü belgesi göstermeniz veya ATM kartınızı kaydırmanız ve PIN numaranızı girmeniz gerekir. Her iki durumda da, sunduğunuz içeriktir . Veznedar bu bilgiyi işlemi ileriye taşımak için kullanır. Daha sonra size hangi hesaptan para çekmek istediğinizi sorabilirler. "Tasarruf hesabım" cevabını verdiğinizde, bu daha da fazla bağlam .

Ne kadar fazla bağlam verirseniz, karşı tarafın talebinizle başa çıkmasına yardımcı olmak için o kadar fazla bilgi sahibi olması gerekir. Bazen içerik isteğe bağlıdır (daha iyi sonuçlar almak için Google aramanıza daha fazla kelime yazmak gibi) ve bazen de gereklidir (PIN numaranızı ATM'ye vermek gibi). Her iki durumda da, genellikle işlerin yapılmasına yardımcı olan bilgilerdir.

Şimdi diyelim ki 100 $ 'ınızı alıp ağzınız iyileşirken sıcak bir yere uçmak için uçak bileti alıyorsunuz.

Güneşli güzel bir varış noktasına varıyorsunuz, ancak çantanız bunu yapmıyor. Havaalanı sisteminde bir yerde kayboldu. Böylece, "bagaj talep biletinizi" (üzerinde barkod bulunan etiket) "Kayıp Bagaj ofisine" götürürsünüz. Masanın arkasındaki kişinin isteyeceği ilk şey, üzerinde bagaj numaranız olan bilet. Bu, gerekli bağlamın bir örneğidir .

Ancak daha sonra bagaj görevlisi sizden çantanız hakkında daha kolay bilgi bulmasını ister. " Hangi renk? Hangi boyutta? Tekerlekleri var mı? Sert mi yoksa yumuşak mı?" Bu bilgi parçalarına ihtiyaç duymasa da, bunları sağlarsanız daraltmanıza yardımcı olur. Sorunlu alan: Aramayı daha hızlı hale getirir.Bu isteğe bağlı bağlamdır .

İlginç kısım: birçok yazılım ve API için, gerekli bağlam genellikle bir yöntem imzasında gerçek parametreler olarak son bulur ve isteğe bağlı bağlam , herhangi bir şey içerebilen (ve boş olabilir) esnek bir anahtar / değer haritası gibi başka bir yere gider ) veya gerektiğinde erişilebilen yerel iş parçacığı depolama alanına.

Yukarıdaki örnekler gerçek hayattan, ancak bunları bilgisayar bilimi içindeki alanlarla kolayca eşleştirebilirsiniz. Örneğin, HTTP üstbilgileri bağlamsal bilgiler içerir. Her başlık , yapılan istek hakkında bilgi ile ilgilidir . Veya iki aşamalı bir taahhüt sürecinin bir parçası olarak bir global işlem kimliği gönderirken , bu işlem kimliği bağlamdır. İşlem yöneticisinin işi koordine etmesine yardımcı olur, çünkü eldeki genel görevle ilgili bilgilerdir .

Umarım yardımcı olur.


22
@Brian: Gönderinizden ve burada verilen diğer cevaplardan anlamaya başlayabileceğimi düşünüyorum. Bir olay hakkında durum bilgisi taşıyan bir nesne "Bağlam" nesnesidir? Bu doğru olur mu? Bir RequestContext nesnesi belirli bir istek hakkında bilgi taşıyacak, değil mi? Ve başka bir istek geldiğinde, RequestContext nesnesine eklenen bilgiler değişecektir. Bağlam nesnesinin biraz DTO (veri aktarım nesnesi) gibi olduğunu söylemek yanlış mı? Bununla birlikte, bir bağlam, farklı ilgili "şeyler" hakkında bilgi taşır,
DTO'lar

9
Çivilenmişsin, bu kesinlikle doğru. Bir RequestContext gerçekten de devam etmekte olan talep hakkında bilgi taşır (örneğin, istemcinin yerel ayarı). Bağlamlar DTO / VO'ya benzer, ancak genellikle o kadar güçlü yazılmaz. Ama kavram iyi.
Brian Kelly

5
@Brian: Bir başka soru akla getirildi, bağlam menüleri hakkında konuşurken, bu cevaptan öğrendiğim bağlamın anlamı kafamda mantıklı değil. Anladığım kadarıyla bağlam bir şey hakkında devleti taşımak için (kısa). Peki "bağlam" kelimesini bu şekilde kullanmak ne anlama geliyor?
user772058

9
İyi soru. "Bağlam menüsü" içindeki "bağlam" ın anlamı, "menüde göreceğiniz şeyler, tıkladığınız yere, tıkladığınızda ve uygulamanızda başka neler olduğuna bağlıdır" dır. Bu bilgi parçaları (nerede / ne zaman / ne tıklattığınız) bağlamı temsil eder ve menüde ne sunacağına karar verebilmesi için GUI koduna gönderilir.
Brian Kelly

2
Bu nedenle, yöntemin parametreleri bağlamdır. Yanlış mıyım?
Can Aydoğan

14

Bağlam, bilgiyi aktarmak için bir grup olarak görülebilir. Genellikle doğrudan bir yöntem çağrısına bağlı olmayan, ancak yine de uygun olabilecek şeyleri iletmek için kullanılır. Bunu tarif etmenin sıradan bir yolu "önem verebileceğiniz şeyler" olabilir.

Örneğin, bir db'deki bir değeri güncellemek için bir hizmet yazıyorsanız, büyük olasılıkla kayıt kimliğini ve yeni değeri iletirsiniz.

Genel arabirimler istiyorsanız, hizmetin rasgele iş mantığı gerçekleştirebilmesi için geçecek bir bağlam da tanımlayabilirsiniz. Böylece, hizmet bu değerlere bağlı olarak ek mantık gerçekleştirebileceğinden, içeriğe bir kullanıcı kimlik doğrulaması, kullanıcının oturum durumu vb. Dahil edebilirsiniz.


7
Bunu düşünmenin bir başka yararlı yolu da "Olanlar hakkında bilgi" dir. Ya da daha akademik olarak "meta bilgi" dir. Bu oldukça akademik bir cümle, ama doğru. Bu içerikte.
Brian Kelly

4
temelde bir noktada devlet, bundan daha karmaşık değil
Mat

13

Bu 2015 - bu konu başladıktan yıllar sonra olabilir.

Yine de, benim gibi "Bağlam" ı anlamak için uğraşan herkese yardım etmek için bu mesajı gönderiyorum

Hiçbir şekilde Java programlarında Bağlam kullandığınızı iddia etmiyorum - bu yüzden tamamen sabit kodlamada Bağlamı yazmak size kalmış Yani işte burada: -

"Kavramsal bağlam" aynı "bana daha fazla anlat" ile aynıdır Bir istemci sunucuya bir istek yaptığında - isteği yerine getirmek için sunucu "bana biraz daha fazla bilgi ver böylece size yardımcı olabilir" diyor. Böylece, istek üzerine, müşteri bir paket ayrıntı sağlar. Sunucu, isteği sunmak için gereken tüm bilgi parçalarını gruptan alır ve seçer. Bu paket "Bağlam" olarak adlandırılan şeydir

Örneğin

Hasta doktora gidiyor ve treat_me ("Başım ağrıyor") diyor Doktora ofisi hastaya doldurması için bir form veriyor. Hasta formu doldurur. Form doktor tarafından "treat_me" talebini yerine getirmek için kullanılır.

İstek şu şekilde görünüyor:

treat_me ( "i have a headache", filled_form_num_23321 ) 

İşte böyle filled_form_num_23321 görünüyor:

Q.Ne duruma yol açar? A. 10 adet temiz Scotch son nite
Q.Patient adı mandal ? A. Joe Bigdrinker
Q.Age? 98

Bu işlemde filled_form_num_23321"bağlam" dır.

Umarım bu "Bağlam" kavramının netleştirilmesine yardımcı olur.


7

bağlamı her zaman üzerinde çalıştığım nesne veya yapı ile ilgili belirli bir durum olarak düşünürüm.

Örneğin, bir görünümde drawRect'i kullanırken (bir görünüm için tüm çizimin yapılması gereken yer), temel grafik ifadelerinizi yayınlayacağınız currentGraphicsContext'i her zaman almanız gerekir. Bu bağlam, görünümün sınırları, kontur rengi, çizgi çizmek için kontur kalınlığı, kapalı bir Yolu doldurmak için dolgu rengi vb. Gibi şeyler içerir. Bu bağlam (çoğu diğerleri gibi) şu andaki mevcut durumdur. bu durumda grafik bağlamını sadece bir durum kümesi gibi düşünün.

kontur kalınlaşma 1,5 piksel dolgu rengi siyah görünüm sınırları (155, 200) kontur rengi Kırmızı

Temelde şimdiki zamandaki durum ...


5

Pratik bir örnek vermek. Diyelim ki kullanıcı (oturum açmış olan) ve tarayıcının diline göre bazı bilgileri almak / işlemek için belirli bir web sayfanız var. Bilgiyi alma mantığı, kullanıcıdan ve dilden bağımsızdır. Sayfanız bir kullanıcı ve bir dil alacaktır ... mantık için benim veya siz veya ingilizce veya ispanyolca olması önemli değildir.

Bazı sözde kod:

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

        … do some logic based on the context
    }
}

Bu o kadar zor değil, ama kavramı anlamak biraz zaman alıyor


5

Bağlam belirtir yürütme semboller kodu belli bir noktadan ulaşılabilir bağlamda, ve söz konusu yürütme Bu semboller değeri.

Bağlam önemli bir kavramdır çünkü:

  1. Yürütülebilir birimler (işlevler, yordamlar, yönergeler) farklı sonuçlar üretebilir veya farklı bağlamlarda farklı davranabilir.
  2. Bağlam ne kadar büyük veya karmaşık olursa, bir kod parçasının ne yaptığını anlamak daha zordur (bu yüzden global değişkenler dikkate alınır).

Bağlam sınıfları yazmak veya bağlam parametrelerini iletmek zorunda değilsiniz . Bir işleve / yönteme iletilen tüm parametreler çağrıldığında yürütme bağlamının bir parçası haline gelir.

İngilizce konuşuyorsanız değiliz rağmen, sana bir kopyasını geçmesi tavsiye Kod tamamlamak gibi kavramlara nazik ancak kapsamlı tanıtımı için bağlamında , modülerlik , birleştirilmesi , uyum vb, vb.


İkinci bir baskı olduğunu görüyorum. Onu orada da okuyabilir miyim?
user772058

Kitapçıda ikinci baskıya göz attım ve orijinaline sadık kalmaya karar verdim. Nedenini hatırlamıyorum.
Apalala

2

Sizin durumunuzdaki bağlam, uygulamanızın çalıştığı ortamdır.

Uygulamanızın düzgün çalışması için ihtiyaç duyacağı bilgileri / hizmetleri / yetenekleri sağlar.

HTH


0

Çoğu zaman yazar okuyucunun "bağlam" kelimesinin kullanıldığı bağlam hakkında ayrıntılı bir anlayışa sahip olduğunu varsayar.

Aşağıdaki cümlede bağlam nasıl tanımlanır "? Çalışma zamanı, enjeksiyon için olası değerlerin saklanabileceği bir bağlam oluşturur. Bu bağlam değiştirilebilir, örneğin uygulama ve çerçeve, bağlama bağlam öğeleri ekleyebilir.

Yazarın bağlamı, bir şeyin bağlamını tutan bir çeşit konteyner, belki de bir yığın anlamında kullanıyor gibi görünüyor. Birçok anlam ve kafa karıştırıcı şeyleri alan vızıltı kelimesi haline geldi. Bağlam olan ve bir bağlamda depolanan öğeler midir? Bağlam kelimesinin kullanıldığı bağlamın karışıklığını azaltmak için, "çalışma zamanının bağlamı elemanlar biçiminde saklamak için bir kap oluşturduğu" söylenebilir. Daha da iyisi "çalışma zamanı, durumu öğeler biçiminde depolamak için bir kap oluşturur ve bu kapsayıcıya bu kapsayıcıya CONTEXT denir."


0

3 yıl sonra belki biraz geç, ama, belki bu iplik size yardımcı olacaktır. "Bağlam" kelimesinin programlamada teknik bir anlamı olduğunu gösterir (sadece basit bir İngilizce anlamı değil).

Hangi programlama dilleri bağlam içermez?

Örnek olarak kullanıp kullanamayacağınızdan ve bazı bilgileri buradan alıp alamayacağınızdan emin değilsiniz. Ben de "bağlam" teknik programlama teriminin agnostik bir açıklamasını duymak isterim

Düzenleme: Ya da en azından "bağlam" terimi teknik, programlama bağlamında (punn amaçlanan) uygulanabilir olduğunu gösterir. Muhtemelen terimin birden fazla somut uygulamasında.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.