¿Qué es un diagrama de estado en programación?