Definição de "estado"

15

Qual é uma boa maneira de definir "estado", como na variável de estado ou na máquina de estado, para um novo (anteriormente não) programador? Quais são algumas boas maneiras de explicar por que esse conceito é útil para escrever software? O conceito de estado é explicitamente ensinado no início de cursos ou livros de programação?

hotpaw2
fonte

Respostas:

5

"estado" é necessário quando você precisa se lembrar de algo. Idealmente, as funções (não os "métodos" ou o que for) dependem apenas de suas entradas. Se você fizer uma pergunta em que a resposta possa mudar com o tempo, mesmo que as entradas sejam as mesmas, você precisará de algo para lembrar a diferença na resposta, correto? Caso contrário, você não poderá fornecer uma resposta diferente porque nenhum outro fator foi alterado (vamos supor que a resposta não dependa diretamente do tempo).

Essa "coisa / informação" que você precisa lembrar é chamada de "estado".

(não é necessário que esse "estado" mude ao longo do tempo, é basicamente apenas uma maneira de dizer "lembrando / sabendo de algo")

phant0m
fonte
1
Penso que esta é a melhor resposta, se reformulada para ser inteligível para um não programador. Diga: todas as atividades lidam com coisas e / ou informações. Isso acontece de três maneiras: 1) qualquer atividade pode tomar ou de uso ou ler algo: a sua entrada ; 2) pode produzir ou escrever algo: sua saída ; 3) enquanto estiver em andamento, ele pode armazenar , guardar , memorizar , armazenar algo: seu estado. Para a maioria dos programas de computador, todas as entradas, saídas e estados consistem em informações, enquanto que para outros tipos de atividades (por exemplo, cozinhar) objetos físicos também costumam estar envolvidos.
Reinierpost
8

Da Wikipedia :

Estado geralmente se refere à condição atual de um sistema ou entidade ...

Isso é basicamente o que significa em um contexto de computação: os dados que definem a condição de algum objeto ou sistema.

O significado de 'estado' não é específico para programação. Existem exemplos de 'estado' literalmente em todos os lugares que você olha. A televisão está desligada. O café está quente. Os tênis são a) azuis; b) fedorento; c) não deixar de lado; d) bastante desgastado. 'state' em um sentido de programação é exatamente o mesmo que 'state' em um sentido de não programação, exceto que o aplicamos aos objetos com os quais lidamos: variáveis, objetos, threads, bancos de dados, sistemas de arquivos etc. Se você tiver para explicá-lo, explique-o em termos familiares - não é necessário transformá-lo em um conceito técnico estrangeiro.

Um relógio é um bom exemplo de um sistema simples que possui algum estado: um relógio pode estar funcionando ou não, e indica um horário que pode ou não corresponder à hora real do dia. É muito fácil ver como essas coisas são variáveis ​​e como a alteração do estado do relógio pode afetar outras coisas.

Compare isso com algo apátrida, como uma declaração: "A porta está vermelha". A declaração em si não tem estado. Pode ou não ser verdade que a porta está vermelha, mas a declaração em si não contém nenhum estado. Pintar a porta pode mudar a verdade da afirmação, mas a afirmação em si nunca muda. Da mesma forma, um número como 42 não possui nenhum estado: 42 é 42 e não há nada que você possa mudar.

Variáveis têm estado, valores não.

Caleb
fonte
1
@ hotpaw2 O significado de 'estado' não é específico para programação. Existem exemplos de 'estado' literalmente em todos os lugares que você olha. A televisão está desligada. O café está quente. Os tênis são a) azuis; b) fedorento; c) não deixar de lado; d) bastante desgastado. 'estado' no sentido de programação é exatamente o mesmo que 'estado' no sentido de não programação, exceto que o aplicamos aos objetos com os quais lidamos: variáveis, objetos, threads, bancos de dados, sistemas de arquivos etc.
Caleb
1
Então, você explicaria isso a um aluno de programação usando exemplos concretos? Parece uma boa ideia. Transferirá efetivamente para eles o entendimento do estado em seus programas?
hotpaw2
2
@ hotpaw2 Movi meu comentário para a resposta e expandi um pouco. Quanto à compreensão, acho melhor não focar demais em 'estado' no abstrato com um iniciante. A maioria das pessoas precisa de exemplos concretos de algo antes de poder realmente reconhecer um padrão mais geral.
Caleb
1
Não está claro por que "o café está quente" é estável, mas "a porta está vermelha" é apátrida? Por outro lado, isso significaria que "o café é preto" é sem estado e "a porta está quente" é com estado?
Adam Hughes
1
@AdamHughes Veja onde eu usei aspas - especificamente, não as usei para falar sobre o café porque estava me referindo ao café real, não a declarações sobre o café. O objetivo é explicar a diferença entre variáveis ​​e valores. A porta real da minha casa tem estado: pode estar aberta ou fechada, vermelha ou azul ou verde, quente ou fria, etc. Uma declaração sobre a porta pode indicar esse estado, mas a declaração em si é uma coisa imutável.
Caleb
1

Estado é a informação que seu programa manipula para realizar alguma tarefa. São dados ou informações que são alterados ou manipulados durante o tempo de execução de um programa. O "estado" de um programa em um determinado momento refere-se a um instantâneo de todos os dados que o programa está vendo ou analisando no momento para chegar à próxima etapa de sua execução.

Minha universidade começou com o Scheme, então começamos a programar com um modelo sem estado. Em seguida, mudamos para C e fomos muito explícitos sobre o que é um estado, por que é útil e por que torna as coisas potencialmente muito complicadas. Então, algumas universidades certamente falam sobre estado, mas não necessariamente todas elas

Oleksi
fonte
1

Você pode usar a analogia de um semáforo que pode estar em um dos três estados: [VERDE], [AMARELO] ou [VERMELHO]. Ele deve estar apenas em um estado de cada vez. O semáforo é a máquina de estado real que está sendo modelada. Ele normalmente fará a transição do estado de [VERDE para AMARELO], depois [AMARELO para VERMELHO] e depois [VERMELHO para VERDE].

insira a descrição da imagem aqui

Uma transição de estado alternativa (que está em vigor em alguns países como o Reino Unido, tem duas transições de [VERMELHO para AMARELO, depois AMARELO para VERDE] no lugar da transição [VERMELHO para VERDE].

dodgy_coder
fonte