O termo "Contexto" em programação? [fechadas]

161

Estou programando há alguns meses e uma palavra usada com frequência é "contexto" nas aulas. Como ServletContext(Java), Activity(Android), Service(Java, Android), NSManagedContext(Objective-C, iOS).

Ao procurar nos dicionários, vejo que a palavra significa: situação, ambiente, circunstâncias etc. No entanto, como não sou um falante nativo de inglês, não entendo para o que devo traduzi-la diretamente. Por exemplo, se eu escrevesse uma classe que fosse nomeada SomeClassContextou um método que tivesse um parâmetro de contexto, eu não entenderia quando deveria nomeá-la de contexto porque não a entendia.

Eu tenho procurado por contexto no Stack Overflow, mas nenhuma pergunta / resposta foi capaz de me ajudar.

Eu ficaria muito feliz se alguém pudesse me fornecer a explicação.

user772058
fonte
6
O contexto está dizendo: a área dentro da qual esse objeto atua.
Blundell 26/05
7
Contexto é o estado de um objeto ou sistema, em um ponto no tempo
Matt

Respostas:

190

Digamos que você vá ao dentista para retirar um dente.

Quando a recepcionista pede seu nome, essas são as informações necessárias para iniciar o compromisso. Neste exemplo, seu nome é informações contextuais . Portanto, no contexto de uma visita ao dentista, é necessário fornecer seu nome para que o dente seja puxado.

Agora, digamos que você vá até o banco.

No banco, você pede para retirar US $ 100. O caixa precisa estabelecer sua identidade antes de lhe dar dinheiro; portanto, você provavelmente precisará mostrar uma carteira de motorista ou passar o cartão ATM e inserir o seu número PIN. De qualquer maneira, o que você está fornecendo é contexto . O caixa usa essas informações para avançar a transação. Eles podem perguntar de que conta você deseja se retirar. Quando você responde "Minha conta poupança" , isso é ainda mais contextual .

Quanto mais contexto você fornecer, mais conhecimento a outra parte terá para ajudar a lidar com sua solicitação. Às vezes, o contexto é opcional (como digitar mais e mais palavras na pesquisa do Google para obter melhores resultados) e, às vezes, é necessário (como fornecer seu número PIN no caixa eletrônico). De qualquer forma, são as informações que geralmente ajudam a fazer as coisas.

Agora, digamos que você pegue seus US $ 100 e compre uma passagem de avião para voar para algum lugar quente enquanto sua boca se cura.

Você chega a um bom destino ensolarado, mas sua mala não chega. Está perdido em algum lugar do sistema do aeroporto. Então, você leva seu "tíquete de retirada de bagagem" (aquele adesivo com o código de barras) para o "escritório de Bagagem Perdida". A primeira coisa que a pessoa atrás da mesa solicita é esse bilhete com o seu número de bagagem. Esse é um exemplo de algum contexto necessário .

Mas a pessoa que solicita a bagagem solicita mais informações sobre a sua mala, para que possam encontrá-la mais facilmente. Eles perguntam: " Qual é a cor? Qual é o tamanho? Tem rodas? É duro ou macio? Embora não precisem necessariamente dessas informações, ajuda a restringir as coisas se você as fornecer. problema, torna a pesquisa muito mais rápida. Esse é um contexto opcional .

Aqui está a parte interessante: para muitos softwares e APIs, o contexto necessário geralmente termina como parâmetros reais em uma assinatura de método, e o contexto opcional vai para outro lugar, como um mapa de valor-chave flexível que pode conter qualquer coisa (e pode estar vazio ) ou no armazenamento local do encadeamento, onde ele pode ser acessado, se necessário.

Os exemplos acima são da vida real, mas você pode mapeá-los facilmente para áreas da ciência da computação. Por exemplo, os cabeçalhos HTTP contêm informações contextuais. Cada cabeçalho refere-se a informações sobre a solicitação que está sendo feita. Ou quando você está enviando um ID de transação global como parte de um processo de confirmação em duas fases , esse ID de transação é contexto. Ajuda o gerente de transações a coordenar o trabalho, porque são informações sobre a tarefa geral em questão.

Espero que ajude.

Brian Kelly
fonte
22
@ Brian: Do seu post e das outras respostas dadas aqui, acho que posso começar a entendê-lo. Um objeto que carrega informações de estado sobre um evento, é um objeto "Contexto"? Isso seria correto? Portanto, um objeto RequestContext carrega informações sobre uma solicitação específica, correto? E quando outra solicitação vier, as informações anexadas ao objeto RequestContext serão alteradas. É errado dizer que um objeto de contexto é um pouco como um DTO (objeto de transferência de dados)? No entanto, um contexto carrega informações sobre diferentes "coisas" relacionadas, enquanto os DTO carregam informações de um objeto como uma pessoa? Obrigado
user772058
9
Você acertou em cheio, isso é exatamente correto. Um RequestContext realmente transportará informações sobre a solicitação em andamento (por exemplo, a localidade do cliente). Os contextos são semelhantes ao DTO / VO, mas geralmente não são tão fortemente tipados. Mas você entendeu bem o conceito.
Brian Kelly
5
@ Brian: Mais uma pergunta foi trazida à mente, quando se fala em menus de contexto, o significado do contexto que aprendi com essa resposta não faz sentido na minha cabeça. Pelo que entendi agora, o contexto é (abreviado) para carry state sobre algo. Então, o que significa usar a palavra "contexto" dessa maneira?
User772058 27/03
9
Boa pergunta. O significado de "contexto" em "menu de contexto" é "as coisas que você verá no menu dependem de onde você clica, quando clica e o que mais está acontecendo no seu aplicativo". Essas informações (onde / quando / em que você clicou) representam o contexto e seriam enviadas ao código da GUI para que ele possa decidir o que oferecer no menu.
Brian Kelly
2
Portanto, os parâmetros do método são contextuais. Estou errado?
Can Aydoğan
14

O contexto pode ser visto como um balde para transmitir informações. Geralmente é usado para transmitir coisas que não estão necessariamente vinculadas diretamente a uma chamada de método, mas ainda podem ser pertinentes. Uma maneira leiga de descrevê-lo pode ser "coisas com as quais você pode se interessar".

Por exemplo, se você estivesse escrevendo um serviço para atualizar um valor em um banco de dados, provavelmente passaria o ID do registro e o novo valor.

Se você deseja interfaces genéricas, também pode definir um contexto a ser transmitido, para que o serviço possa executar lógica de negócios arbitrária. Portanto, você pode incluir uma autenticação de usuário, o estado da sessão do usuário, etc ... no contexto, pois o serviço pode executar lógica adicional dependente desses valores.

Taylor
fonte
7
Outra maneira útil de pensar sobre isso é "informações sobre o que está acontecendo". Ou, mais academicamente, é "meta-informação". Essa é uma frase bastante acadêmica, mas é precisa. Neste contexto.
Brian Kelly
4
é basicamente o estado em um ponto no tempo, não mais complexo do que isso #
26211 Matt
13

Estamos em 2015 - maio de anos após o início desta discussão.

No entanto, estou postando esta mensagem para ajudar alguém como eu, que está com dificuldades para entender "Contexto"

De maneira alguma eu afirmo ter usado o Contexto em programas Java - portanto, é inteiramente sua a responsabilidade de escrever o Contexto em código rígido Então aqui vai: -

"Contexto conceitual" é o mesmo "que me diga mais" Quando um cliente faz uma solicitação ao servidor - para executar a solicitação, o servidor diz "me dê mais algumas informações para que eu possa ajudá-lo". Assim, junto com a solicitação, o cliente fornece um pacote de detalhes. O servidor seleciona e escolhe do pacote todas as informações necessárias para atender à solicitação. Esse pacote é chamado de "contexto"

Por exemplo

O paciente vai ao médico e diz Treat_me ("Estou com dor de cabeça"). O consultório médico fornece ao paciente um formulário para preenchimento. O paciente preenche o formulário. O formulário é usado pelo médico para realizar a solicitação "Treat_me".

Aqui está como a solicitação agora parece:

treat_me ( "i have a headache", filled_form_num_23321 ) 

Aqui está a filled_form_num_23321 aparência:

Q.What conduz à condição? A. 10 pinos do último escocês puro
Q.Nome do paciente? A. Joe Bigdrinker
P. Idade? 98

Nesta transação filled_form_num_23321é o "contexto".

Espero que isso ajude a esclarecer o conceito de "Contexto".

RAM
fonte
7

eu sempre penso no contexto como um estado particular relevante para o objeto ou construto com o qual estou trabalhando.

Por exemplo, quando você estiver usando o drawRect em uma vista (onde todo o desenho deve ser feito para uma vista), você sempre deve obter o currentGraphicsContext no qual você emitirá suas instruções gráficas principais. Esse contexto contém itens como limites da vista, a cor do traçado, a espessura do traçado para desenhar uma linha, a cor do preenchimento para preencher um caminho fechado etc. Este contexto (como a maioria dos outros) é apenas o estado atual neste momento. então pense no contexto gráfico neste caso apenas como um conjunto de estados como

a espessura do traçado é de 1,5 pixels, a cor do preenchimento é preta, os limites de visão são (155, 200) e a cor do traçado é vermelha

É basicamente o estado no momento atual ...

Matt
fonte
5

Para dar um exemplo prático. Digamos que você tenha uma determinada página da Web para buscar / renderizar algumas informações com base no usuário (conectado) e no idioma do navegador. A lógica de buscar as informações é independente do usuário e do idioma. Sua página receberá um usuário e um idioma ... para a lógica, não importa se sou eu, você, inglês ou espanhol.

Algum pseudo-código:

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

        … do some logic based on the context
    }
}

Não é tão difícil, mas leva algum tempo para entender o conceito

lukin
fonte
5

Contexto refere-se ao contexto de execução , que é os símbolos alcançáveis ​​a partir de um determinado ponto no código e o valor desses símbolos nessa execução específica.

O contexto é um conceito importante porque:

  1. As unidades executáveis ​​(funções, procedimentos, instruções) podem produzir resultados diferentes ou se comportar de maneira diferente em contextos diferentes.
  2. Quanto maior ou mais complexo o contexto, mais difícil é entender o que um código faz (é por isso que as variáveis ​​globais são ignoradas).

Você não precisa escrever classes de contexto ou passar parâmetros de contexto . Qualquer parâmetro passado para uma função / método se torna parte do contexto de execução quando é chamado.

Mesmo que você não seja um falante de inglês, recomendo que você faça uma cópia do Code Complete para obter uma introdução suave, porém completa, a conceitos como contexto , modularidade , acoplamento , coesão etc.

Apalala
fonte
Eu vejo que há uma segunda edição. Posso ler encontrá-lo também?
User772058
Eu procurei a segunda edição na livraria e decidi ficar com o original. Não me lembro o porquê.
Apalala 15/06
2

O contexto no seu caso é o ambiente em que seu aplicativo está sendo executado.

Ele fornece informações / serviços / habilidades que seu aplicativo precisará para funcionar corretamente.

HTH

user6656519
fonte
0

Com demasiada frequência, o autor assume que o leitor tem uma compreensão detalhada do contexto em que a palavra "contexto" está sendo usada.

Como definir o contexto na sentença a seguir "O tempo de execução cria um contexto no qual os possíveis valores para injeção podem ser armazenados. Esse contexto pode ser modificado, por exemplo, o aplicativo e a estrutura podem adicionar elementos ao contexto.

Parece que o autor está usando o contexto para significar algum tipo de contêiner, talvez um monte, que contém o contexto de algo. Tornou-se palavra da moda que está assumindo muitos significados e coisas confusas. São os elementos que são o contexto e estão sendo armazenados em um contexto. Para reduzir a confusão do contexto em que a palavra contexto está sendo usada, pode-se dizer que "o tempo de execução cria um contêiner para armazenar o contexto na forma de elementos". Melhor ainda: "o tempo de execução cria um contêiner para armazenar o estado na forma de elementos e esse contêiner com seu estado é chamado CONTEXTO".

John
fonte
0

3 anos depois, talvez um pouco tarde, mas talvez esse tópico o ajude. Ilustra que a palavra "contexto" tem um significado técnico em programação (não apenas um simples significado em inglês).

Quais linguagens de programação são livres de contexto?

Não tenho certeza se você pode usá-lo como exemplo e extrair algumas informações dele ou não. Eu também adoraria ouvir uma explicação independente da linguagem do termo de programação técnica "contexto"

Editar: ou pelo menos mostra que o termo "contexto" pode ser aplicado em um contexto técnico de programação (sem punição). Possivelmente em mais de uma aplicação concreta do termo.

Jake
fonte