La mayor diferencia es el diseño de la interfaz de usuario. Una buena GUI puede hacer o deshacer una aplicación. Los fanáticos de Mac llamarían la atención sobre las GUI bellamente diseñadas de la aplicación Mac OS X promedio y tienen un punto, pero esto no es un problema de tecnología, es un problema de diseño / ethos / usabilidad.
El usuario puede hacer lo que quiera en cualquier orden en cualquier momento, a diferencia del programa de consola en el que está solicitando entradas o diciéndoles la salida. No puede suponer que seguirán el orden que espera, a menos que aplique el estilo de asistente de flujo de trabajo.
Como ya se mencionó, los eventos juegan un papel importante en esto, y puede hacer que sucedan varios eventos mientras está prestando servicio al último, por lo que realmente no puede construir su estado en función del 'evento actual'. Use cierres o un mecanismo similar para mantener el contexto en diferentes eventos. En una aplicación de consola, su FSM generalmente está autocontenido alrededor del bucle 'obtener entrada, procesar entrada, actualizar salida'. No hay el mismo tipo de estructura en la programación de la GUI: la 'principal' es una cosa re-entrante impulsada por eventos, a menudo una declaración switch () descomunal.
Debe considerar diferentes tamaños / resoluciones de pantalla y permitir que la GUI cambie de tamaño desde 800x600 hasta el máximo de monitor de los usuarios.
Debe considerar diferentes estrategias de entrada: mouse, teclado, tacto, etc. Algunas tecnologías son gratuitas (desplazamiento con la rueda del mouse), otras requieren un trabajo de integración (Ink).
Accesibilidad: una interfaz gráfica de usuario es mucho más adecuada para usuarios con menos capacidades que tienen una visión, audición, habilidades motoras o cognitivas restringidas. Un ruido 'ding' es agradable y obvio en comparación con un mensaje de error críptico en la consola.
Internacionalización: supongo que su aplicación de consola es solo para EE. UU. / ANSI, pero cuando ingresa a la GUI, puede tener paquetes de idiomas / recursos que pueden apuntar a otros idiomas y regiones sin cambios en la codificación, si se preparó para ello desde el comienzo. Por ejemplo, no hay cadenas de lenguaje codificadas en el código, todo como búsquedas de recursos.
Tiene muchas más opciones para la tecnología de implementación: basada en la web, varios kits de GUI, Flash / WPF, etc.
Uso de color y animación. Los programas de consola son generalmente monocromáticos y no animan mucho. Muchos marcos de GUI modernos proporcionan widgets temáticos y tienen efectos de animación de movimiento / tamaño / mostrar / ocultar, a menudo de forma gratuita.
Gráficos. Las aplicaciones de consola a veces usan arte ASCII para diagramas, pero una aplicación GUI le brinda una capacidad gráfica completa. El arte encantador también puede marcar una gran diferencia.