Thuật ngữ bối cảnh trực tiếp trong lập trình? [đóng cửa]


161

Tôi đã lập trình được vài tháng nay và một từ thường được sử dụng là "ngữ cảnh" trong các lớp học. Giống như ServletContext(Java), Activity(Android), Service(Java, Android), NSManagedContext(Objective-C, iOS).

Bằng cách nhìn vào từ điển tôi thấy rằng từ này có nghĩa là: tình huống, môi trường, hoàn cảnh, v.v. Tuy nhiên, vì tôi không phải là người nói tiếng Anh bản địa nên tôi không hiểu tôi nên dịch nó trực tiếp sang cái gì. Ví dụ, nếu tôi viết một lớp được đặt tên SomeClassContexthoặc phương thức có tham số ngữ cảnh, tôi sẽ không hiểu khi nào nên đặt tên bối cảnh vì tôi không hiểu nó.

Tôi đã tìm kiếm ngữ cảnh trên Stack Overflow, nhưng không có câu hỏi / câu trả lời nào có thể giúp tôi.

Tôi sẽ rất vui nếu ai đó có thể cung cấp cho tôi lời giải thích.


6
Bối cảnh đang nói: khu vực mà đối tượng này hoạt động.
Blundell

7
Bối cảnh là trạng thái của một đối tượng hoặc hệ thống, tại một thời điểm
Matt

Câu trả lời:


190

Giả sử bạn đến nha sĩ để nhổ răng.

Khi nhân viên tiếp tân hỏi bạn tên của bạn, đó là thông tin họ cần để bắt đầu cuộc hẹn. Trong ví dụ này, tên của bạn là thông tin theo ngữ cảnh . Vì vậy, trong bối cảnh đến thăm nha sĩ, bạn cần cung cấp tên của bạn để được nhổ răng.

Bây giờ hãy nói rằng bạn đi bộ đến ngân hàng.

Tại ngân hàng, bạn yêu cầu rút 100 đô la. Nhân viên giao dịch cần thiết lập danh tính của bạn trước khi đưa tiền cho bạn, vì vậy bạn có thể phải cho họ xem bằng lái xe hoặc quẹt thẻ ATM và nhập số PIN của bạn. Dù bằng cách nào, những gì bạn đang cung cấp là bối cảnh . Giao dịch viên sử dụng thông tin này để di chuyển giao dịch về phía trước. Sau đó, họ có thể hỏi bạn muốn rút tiền từ tài khoản nào. Khi bạn trả lời, "Tài khoản tiết kiệm của tôi" , đó thậm chí còn nhiều bối cảnh hơn .

Bạn cung cấp càng nhiều bối cảnh, bên kia càng có nhiều kiến ​​thức để giúp giải quyết yêu cầu của bạn. Đôi khi ngữ cảnh là tùy chọn (như nhập ngày càng nhiều từ vào tìm kiếm Google của bạn để có kết quả tốt hơn) và đôi khi, điều đó là bắt buộc (như cung cấp số PIN của bạn tại ATM). Dù bằng cách nào, đó là thông tin thường giúp hoàn thành công việc.

Bây giờ hãy giả sử bạn lấy 100 đô la của bạn và mua vé máy bay để bay đi đâu đó ấm áp trong khi miệng bạn lành lại.

Bạn đến một điểm đến nắng đẹp, nhưng túi của bạn không đi được. Nó bị mất ở đâu đó trong hệ thống sân bay. Vì vậy, bạn mang "vé yêu cầu hành lý" của mình (nhãn dán có mã vạch trên đó) đến "Văn phòng hành lý thất lạc". Điều đầu tiên người ngồi sau bàn sẽ yêu cầu là vé có số hành lý của bạn trên đó. Đó là một ví dụ về một số bối cảnh cần thiết .

Nhưng sau đó, người gửi hành lý hỏi bạn để biết thêm thông tin về túi của bạn như thế nào để họ có thể tìm thấy nó dễ dàng hơn. Họ hỏi: " Nó có màu gì? Kích thước của nó? Nó có bánh xe không? Nó cứng hay mềm? Trong khi chúng không nhất thiết cần những thông tin đó, nó giúp thu hẹp mọi thứ nếu bạn cung cấp. khu vực có vấn đề. Nó làm cho việc tìm kiếm nhanh hơn nhiều. Đó là bối cảnh tùy chọn .

Đây là phần thú vị: đối với nhiều phần mềm và API, ngữ cảnh bắt buộc thường kết thúc dưới dạng tham số thực trong chữ ký phương thức và ngữ cảnh tùy chọn đi đâu đó, như bản đồ giá trị khóa linh hoạt có thể chứa bất kỳ thứ gì (và có thể trống ) hoặc vào bộ lưu trữ cục bộ nơi mà nó có thể được truy cập nếu cần.

Các ví dụ trên là từ đời thực, nhưng bạn có thể dễ dàng ánh xạ chúng đến các khu vực trong khoa học máy tính. Ví dụ: tiêu đề HTTP chứa thông tin theo ngữ cảnh. Mỗi tiêu đề liên quan đến thông tin về yêu cầu được thực hiện. Hoặc khi bạn gửi ID giao dịch toàn cầu như một phần của quy trình cam kết hai pha , ID giao dịch đó là bối cảnh. Nó giúp người quản lý giao dịch điều phối công việc vì đó là thông tin về nhiệm vụ tổng thể trong tay.

Mong rằng sẽ giúp.


22
@Brian: Từ bài đăng của bạn và các câu trả lời khác được đưa ra ở đây tôi nghĩ rằng tôi có thể bắt đầu hiểu nó. Một đối tượng mang thông tin trạng thái về một sự kiện, là một đối tượng "Bối cảnh"? Điều đó có đúng không? Vì vậy, một đối tượng RequestContext sẽ mang thông tin về một yêu cầu cụ thể, đúng không? Và khi một yêu cầu khác xuất hiện, thông tin được đính kèm với đối tượng RequestContext sẽ thay đổi. Có sai không khi nói rằng một đối tượng bối cảnh hơi giống với DTO (đối tượng truyền dữ liệu)? Tuy nhiên, một bối cảnh mang thông tin về các "thứ" liên quan khác nhau trong khi DTO mang thông tin của một đối tượng như một người? Cảm ơn
user772058

9
Bạn đã đóng đinh nó, điều đó hoàn toàn chính xác. RequestContext thực sự sẽ mang thông tin về yêu cầu đang diễn ra (ví dụ: miền địa phương của máy khách). Các bối cảnh tương tự như DTO / VO nhưng thường không được gõ mạnh. Nhưng bạn đã có khái niệm ổn.
Brian Kelly

5
@Brian: Một câu hỏi nữa được đưa ra trong đầu, khi nói về thực đơn ngữ cảnh, ý nghĩa của bối cảnh khi tôi học được từ câu trả lời này không có ý nghĩa gì trong đầu tôi. Theo tôi hiểu bây giờ bối cảnh là (viết tắt) cho trạng thái mang theo về một cái gì đó. Vì vậy, nó có nghĩa gì khi sử dụng từ "bối cảnh" theo cách này?
user772058

9
Câu hỏi hay. Ý nghĩa của "bối cảnh" trong "menu ngữ cảnh" là "nội dung bạn sẽ thấy trên menu phụ thuộc vào nơi bạn nhấp, khi bạn nhấp và những gì khác đang xảy ra trong ứng dụng của bạn". Những mẩu thông tin đó (nơi / khi / những gì bạn đã nhấp) đại diện cho bối cảnh và sẽ được gửi đến mã GUI để nó có thể quyết định những gì sẽ cung cấp trên menu.
Brian Kelly

2
Vì vậy, các tham số của phương thức là bối cảnh. Liệu tôi có sai?
Có thể Aydoan

14

Bối cảnh có thể được xem như một cái xô để truyền thông tin xung quanh. Nó thường được sử dụng để chuyển những thứ không nhất thiết được gắn trực tiếp vào một cuộc gọi phương thức, nhưng vẫn có thể thích hợp. Một cách mô tả cư sĩ có thể là "những thứ bạn có thể quan tâm".

Ví dụ: nếu bạn đang viết một dịch vụ để cập nhật giá trị trong db, có thể bạn sẽ chuyển vào id bản ghi và giá trị mới.

Nếu bạn muốn giao diện chung, bạn cũng có thể xác định bối cảnh để vượt qua, sao cho dịch vụ có thể thực hiện logic nghiệp vụ tùy ý. Vì vậy, bạn có thể bao gồm xác thực người dùng, trạng thái phiên của người dùng, v.v ... trong ngữ cảnh, vì dịch vụ có thể thực hiện logic bổ sung phụ thuộc vào các giá trị này.


7
Một cách hữu ích khác để suy nghĩ về nó là "thông tin về những gì đang xảy ra". Hay học thuật hơn, đó là "thông tin meta". Đó là một cụm từ học thuật khá, nhưng nó chính xác. Trong ngữ cảnh này.
Brian Kelly

4
về cơ bản nó là trạng thái tại một thời điểm, không phức tạp hơn thế
Matt

13

Đây là năm 2015 - có thể nhiều năm sau khi chủ đề này bắt đầu.

Tuy nhiên, tôi đang đăng thông báo này để giúp bất cứ ai như tôi đang gặp khó khăn để hiểu "Bối cảnh"

Tôi không bao giờ tuyên bố đã sử dụng Ngữ cảnh trong các chương trình Java - do đó, hoàn toàn tùy thuộc vào bạn để viết Bối cảnh trong mã hóa cứng Vì vậy, đây là: -

"Ngữ cảnh về mặt khái niệm" cũng giống như "nói cho tôi biết thêm" Khi khách hàng đưa ra yêu cầu đến máy chủ - để thực hiện yêu cầu, máy chủ nói "hãy cho tôi thêm thông tin để tôi có thể giúp bạn". Do đó, cùng với yêu cầu, khách hàng cung cấp một bó chi tiết. Máy chủ chọn và chọn từ gói tất cả các thông tin cần thiết để phục vụ yêu cầu. Gói này là cái được gọi là "Bối cảnh"

Ví dụ

Bệnh nhân đến doc và nói Treat_me ("Tôi bị đau đầu") Văn phòng bác sĩ cung cấp cho bệnh nhân một mẫu đơn để điền vào. Hình thức điền vào bệnh nhân. Mẫu đơn được bác sĩ sử dụng để thực hiện yêu cầu "Treat_me".

Đây là cách yêu cầu bây giờ:

treat_me ( "i have a headache", filled_form_num_23321 ) 

Đây là cách filled_form_num_23321 nhìn:

Q. Điều gì dẫn đến tình trạng này? A. 10 chốt của Scotch gọn gàng cuối cùng
Tên Q.Patient? A. Joe Bigdrinker
Q.Age? 98

Trong giao dịch filled_form_num_23321này là "bối cảnh".

Hy vọng điều này sẽ giúp làm rõ khái niệm "Bối cảnh".


7

tôi luôn nghĩ về bối cảnh như một trạng thái cụ thể có liên quan đến đối tượng hoặc xây dựng mà tôi đang làm việc.

Ví dụ: khi bạn đang sử dụng drawRect trong một khung nhìn (trong đó tất cả các bản vẽ phải được thực hiện cho một khung nhìn), bạn phải luôn lấy currentGraphicsContext mà bạn sẽ đưa ra các câu lệnh đồ họa cốt lõi của mình. Bối cảnh này chứa những thứ như giới hạn của khung nhìn, màu đột quỵ, độ dày nét vẽ để vẽ một đường thẳng, màu tô để điền vào một Đường dẫn khép kín, v.v. bối cảnh này (giống như hầu hết các khung cảnh khác) chỉ là trạng thái hiện tại vào thời điểm này. Vì vậy, hãy nghĩ về bối cảnh đồ họa trong trường hợp này chỉ là một tập hợp các trạng thái như

Stroke dày là 1,5 pixel màu tô là giới hạn màu đen là (155, 200) màu Stroke là Red

Về cơ bản, nó là trạng thái tại thời điểm hiện tại ...


5

Để đưa ra một ví dụ thực tế. Hãy nói rằng bạn có một trang web nhất định để tìm nạp / hiển thị một số thông tin dựa trên người dùng (đã đăng nhập) và ngôn ngữ của trình duyệt. Logic của việc tìm nạp thông tin là độc lập với người dùng và ngôn ngữ. Trang của bạn sẽ nhận được một người dùng và một ngôn ngữ ... đối với logic, nó không thành vấn đề nếu đó là tôi hoặc bạn hoặc tiếng Anh hoặc tiếng Tây Ban Nha.

Một số mã giả:

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

        … do some logic based on the context
    }
}

Nó không khó lắm, nhưng phải mất một thời gian để hiểu khái niệm


5

Bối cảnh đề cập đến bối cảnh thực thi , là các ký hiệu có thể truy cập từ một điểm nhất định trong mã và giá trị của các ký hiệu đó trong thực thi cụ thể đó.

Bối cảnh là một khái niệm quan trọng bởi vì:

  1. Các đơn vị thực thi (chức năng, quy trình, hướng dẫn) có thể tạo ra kết quả khác nhau hoặc hành xử khác nhau trong các bối cảnh khác nhau.
  2. Bối cảnh càng lớn hoặc phức tạp, càng khó hiểu một đoạn mã làm gì (đó là lý do tại sao các biến toàn cục bị xa lánh).

Bạn không phải viết các lớp ngữ cảnh hoặc truyền tham số ngữ cảnh . Bất kỳ tham số nào được truyền cho hàm / phương thức đều trở thành một phần của bối cảnh thực thi khi nó được gọi.

Mặc dù bạn không phải là người nói tiếng Anh, tôi khuyên bạn nên xem qua bản sao của Code Complete để có phần giới thiệu nhẹ nhàng nhưng kỹ lưỡng về các khái niệm như bối cảnh , mô đun , khớp nối , gắn kết , v.v.


Tôi thấy có một phiên bản thứ hai. Tôi có thể đọc tìm thấy nó ở đó quá không?
user772058

Tôi duyệt phiên bản thứ hai tại cửa hàng sách và quyết định gắn bó với bản gốc. Tôi không nhớ tại sao.
Apalala

2

Bối cảnh trong trường hợp của bạn là môi trường nơi ứng dụng của bạn đang chạy.

Nó cung cấp thông tin / dịch vụ / khả năng mà ứng dụng của bạn sẽ cần để chạy đúng.

HTH


0

Tất cả quá thường xuyên, tác giả cho rằng người đọc có một sự hiểu biết chi tiết về bối cảnh mà từ "bối cảnh" đang được sử dụng.

Làm thế nào để xác định bối cảnh trong câu sau "Thời gian chạy tạo ra một bối cảnh trong đó các giá trị có thể được tiêm có thể được lưu trữ. Ngữ cảnh này có thể được sửa đổi, ví dụ ứng dụng và khung có thể thêm các phần tử vào ngữ cảnh.

Có vẻ như tác giả đang sử dụng bối cảnh để chỉ một loại container nào đó, có lẽ là một đống, chứa bối cảnh của một cái gì đó. Nó đã trở thành từ buzz đang mang nhiều ý nghĩa và những điều khó hiểu. Có phải đó là các yếu tố là bối cảnh và đang được lưu trữ trong một bối cảnh. Để giảm sự nhầm lẫn của bối cảnh mà bối cảnh từ đang được sử dụng, có thể nói rằng "bộ thực thi tạo ra một thùng chứa để lưu trữ ngữ cảnh dưới dạng các phần tử." Tốt hơn nữa là "bộ thực thi tạo một bộ chứa để lưu trữ trạng thái dưới dạng các phần tử và bộ chứa này với trạng thái của nó được gọi là TIẾP THEO."


0

3 năm sau nên có thể hơi muộn, nhưng, có lẽ chủ đề này sẽ giúp bạn. Nó minh họa rằng từ "bối cảnh" có ý nghĩa kỹ thuật trong lập trình (không chỉ có nghĩa tiếng Anh đơn thuần).

Ngôn ngữ lập trình nào không có ngữ cảnh?

Không chắc chắn nếu bạn có thể sử dụng nó như một ví dụ và rút một số thông tin ra khỏi nó hay không. Tôi cũng rất thích nghe một lời giải thích bất khả tri ngôn ngữ của thuật ngữ lập trình kỹ thuật "bối cảnh"

Chỉnh sửa: Hoặc ít nhất cho thấy thuật ngữ "bối cảnh" có thể được áp dụng trong bối cảnh kỹ thuật, lập trình (không có ý định chơi chữ). Có thể trong nhiều ứng dụng cụ thể của thuật ngữ này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.