Definición de "estado"

15

¿Cuál es una buena manera de definir "estado", como en una variable de estado o máquina de estado, para un programador nuevo (previamente no)? ¿Cuáles son algunas buenas maneras de explicar por qué este concepto es útil para escribir software? ¿El concepto de estado se enseña explícitamente al comienzo de los cursos o libros de programación?

hotpaw2
fuente

Respuestas:

5

Se necesita "estado" cuando se necesita recordar algo. Las funciones (no "métodos" o lo que sea) idealmente solo dependen de sus entradas. Si hace una pregunta en la que la respuesta puede cambiar con el tiempo, incluso si las entradas son las mismas, necesita algo para recordar esa diferencia en la respuesta, ¿correcto? De lo contrario, no puede dar una respuesta diferente porque ningún otro factor ha cambiado (supongamos que la respuesta no depende directamente del tiempo).

Esa "cosa / información" que necesita recordar se llama "estado".

(no se requiere que este "estado" cambie con el tiempo, es básicamente una forma de decir "recordar / saber algo")

phant0m
fuente
1
Creo que esta es la mejor respuesta, si se reformula para que sea inteligible para un no programador. Diga: todas las actividades manejan cosas y / o información. Esto ocurre de tres maneras: 1) cualquier actividad puede tomar o uso o leer algo: su entrada ; 2) puede producir o escribir algo: su salida ; 3) mientras está en progreso puede contener , guardar , memorizar , almacenar algo: su estado. Para la mayoría de los programas de computadora, todas las entradas, salidas y estados consisten en información, mientras que para otros tipos de actividades (por ejemplo, cocinar), los objetos físicos generalmente también están involucrados.
reinierpost
8

De Wikipedia :

El estado comúnmente se refiere a la condición actual de un sistema o entidad ...

Eso es más o menos lo que significa en un contexto informático: los datos que definen la condición de algún objeto o sistema.

El significado de 'estado' no es específico de la programación. Hay ejemplos de "estado" literalmente en todas partes. La televisión está apagada. El cafe 'esta caliente. Las zapatillas son a) azules; b) maloliente; c) no guardado; d) bastante desgastado. 'estado' en un sentido de programación es exactamente lo mismo que 'estado' en un sentido que no es de programación, excepto que lo aplicamos a los objetos con los que tratamos: variables, objetos, hilos, bases de datos, sistemas de archivos, etc. Si tiene para explicarlo, explíquelo en términos que le sean familiares: no hay necesidad de convertirlo en un concepto técnico extraño.

Un reloj es un buen ejemplo de un sistema simple que tiene algún estado: un reloj puede estar funcionando o no, e indica una hora que puede corresponder o no a la hora real del día. Es bastante fácil ver cómo esas cosas son como variables y cómo cambiar el estado del reloj podría afectar otras cosas.

Compare eso con algo sin estado, como una declaración: "La puerta es roja". La declaración en sí no tiene estado. Puede o no ser cierto que la puerta es roja, pero la declaración en sí no contiene ningún estado. Pintar la puerta puede cambiar la verdad de la declaración, pero la declaración en sí misma nunca cambia. Del mismo modo, un número como 42 no tiene ningún estado: 42 es 42 y no hay nada que pueda cambiar al respecto.

Las variables tienen estado, los valores no.

Caleb
fuente
1
@ hotpaw2 El significado de 'estado' no es específico de la programación. Hay ejemplos de "estado" literalmente en todas partes. La televisión está apagada. El cafe 'esta caliente. Las zapatillas son a) azules; b) maloliente; c) no guardado; d) bastante desgastado. 'estado' en un sentido de programación es exactamente lo mismo que 'estado' en un sentido que no es de programación, excepto que lo aplicamos a los objetos con los que tratamos: variables, objetos, hilos, bases de datos, sistemas de archivos, etc.
Caleb
1
Entonces, ¿se lo explicaría a un estudiante de programación utilizando ejemplos concretos? Parece una buena idea. ¿Se transferirá efectivamente a ellos la comprensión del estado en sus programas?
hotpaw2
2
@ hotpaw2 Movió mi comentario a la respuesta y se expandió un poco. En cuanto a la comprensión, creo que es mejor no centrarse demasiado en el "estado" en abstracto con un principiante. La mayoría de las personas necesitan ejemplos concretos de algo antes de que realmente puedan reconocer un patrón más general.
Caleb
1
¿No está claro por qué "el café está caliente" tiene estado, pero "la puerta está roja" no tiene estado? Por el contrario, ¿eso significaría que "el café es negro" no tiene estado y que "la puerta está caliente" tiene estado?
Adam Hughes
1
@AdamHughes Mira dónde usé las citas, específicamente, no las usé para hablar sobre el café porque me refería al café real, no a las declaraciones sobre el café. El punto es explicar la diferencia entre variables y valores. La puerta real de mi casa tiene un estado: puede ser abierta o cerrada, roja o azul o verde, caliente o fría, etc. Una declaración sobre la puerta puede indicar ese estado, pero la declaración en sí misma es inmutable.
Caleb
1

El estado es información que su programa manipula para realizar alguna tarea. Son datos o información que se modifican o manipulan durante el tiempo de ejecución de un programa. El "estado" de un programa en un momento dado se refiere a una instantánea de todos los datos que el programa está mirando o analizando actualmente para llegar al siguiente paso en su ejecución.

Mi universidad comenzó con Scheme, así que comenzamos a programar con un modelo sin estado. Luego cambiamos a C y fuimos muy explícitos sobre qué estado es, por qué es útil y por qué hace las cosas potencialmente muy complicadas. Entonces, algunas universidades ciertamente hablan sobre el estado, pero no necesariamente todas

Oleksi
fuente
1

Puede usar la analogía de un semáforo que puede estar en uno de tres estados: [VERDE], [AMARILLO] o [ROJO]. Solo debe estar en un estado a la vez. El semáforo es la máquina de estado real que se está modelando. Normalmente cambiará su estado de [VERDE a AMARILLO], luego [AMARILLO a ROJO], luego [ROJO a VERDE].

ingrese la descripción de la imagen aquí

Una transición de estado alternativa (que está vigente en algunos países como el Reino Unido, tiene dos transiciones de [ROJO a AMARILLO, luego AMARILLO a VERDE] en lugar de la transición [ROJO a VERDE].

dodgy_coder
fuente