miércoles, 19 de febrero de 2014

Receta No. 1-16 en C#: Manipulación de la Apariencia de la Consola

Tabla de Contenido

0. Introducción
1. Problema
2. Solución
3. Discusión de la Solución
4. Práctica
5. Conclusiones
6. Glosario
7. Enlaces & Literatura

0. Introducción

En esta receta vamos a aprender a manipular la apariencia de las aplicaciones de la línea de comandos, es decir la consola de Windows. Esto nos puede ser útil en situaciones donde queramos cambiar la coloración de los textos del prompt, el tamaño de la ventana de la consola, la visibilidad del cursor, el título de la ventana, entre otras características. Aprendamos cómo logramos todo esto y más.

1. Problema

El equipo encargado del sistema de revisión de automotores está interesado en que la apariencia de la aplicación que en la actualidad usan para sus tareas rutinarias, reciba un retoque estético. Para esto el líder del proyecto de desarrollo y mantenimiento ha radicado el siguiente requisito no funcional: reprogramar la apariencia visual de la consola de Windows.

2. Solución

Los desarrolladores han optado por reescribir, o en particular, cambiar el aspecto de los textos, de la ventana de la consola a través del uso de la clase estática Console [3] del namespace System [4].

La clase mencionado posee los métodos y propiedades necesarios para cambiar la apariencia visual de textos, dimensiones de ventana, títulos de ventana, la visibilidad del cursor (también la posición), colores de fondo; también el comportamiento: remoción de contenido, ajuste del tamaño de la ventana, y el restablecimiento de colores.

3. Discusión de la Solución

Vamos a ver más a fondo las características de control de apariencia visual que provee la clase Console, pero antes vamos a ver algunos conceptos importantes de la consola (o terminal).

3.1 ¿Qué es una Consola de Sistema?

En [2] encontramos varios sinónimos para referirnos a la consola de un sistema de cómputo:
  • Consola de computador,
  • Consola de operador,
  • Consola de root [5],
En sistema hardware consiste en la conjugación de dos dispositivos principalmente:
  • Entrada estándar - teclado
  • Salida estándar - monitor (pantalla)
y permite el control de dispositivos o sistemas de forma local (directamente conectada o desde una locación in situ) o remota (a través de líneas de telecomunicación y el uso de protocolos (TCP/IP [6])). A través de una consola también es posible tener acceso para el control de la BIOS de un sistema de cómputo: de ahí podremos acceder a la lista de dispositivos de arranque, cambiar parámetros de los periféricos, desactivar o activar el comportamiento de dispositivos de almacenamiento.

Observamos que se trata de un recurso invaluable para un administrador de sistemas, inclusive para un programador que debe atacar problemas relacionados de esta rama.

No me voy a detener mucho en esta sección, por eso sugiero una lectura más detenida a este interesantísimo tema en [2].

3.2 Consola de Windows

En sistemas operativos Microsoft Windows [7] contamos con una aplicación conocida como Command prompt [8] (o en español, Símbolo de sistema [9]) que es la que nos permite dialogar con el sistema de operativo a través de comandos. Estos comandos son interpretados por un intérprete de línea de comandos. En versiones previas a Windows Vista [10], el símbolo de sistema era parte del sistema operativo (COMMAND.COM), y eso permitía mayor control para el manejo del arranque del sistema operativo; desde Windows Vista sólo es una aplicación más (cmd.exe); desde luego esto no remueve las capacidades administratrativas que posee.

3.3 La Clase Console

La clase estática Console representa los flujos estándar para la salida, la entrada, y de error para las aplicaciones basadas en consola. Antes de entrar en otros detalles técnicos de esta clase, veamos su sintaxis de declaración en C#:

public static class Console

Vemos inmediatamente que trae especificado el modificador static para significar que se trata de una clase estática, y que por consiguiente no podemos crear un subtipo a partir de esta clase. Es decir, que no soporta la herencia.

Sumando a lo anterior, desde [1] aprendemos que el Framework .NET da al programador un alto grado de control sobre la apariencia y comportamiento de la consola de Windows (sección anterior: 3.2).

Como complemento, en la Figura 1 [1] se describen algunos de los miembros de la clase Console para la manipulación de la apariencia de la misma.
Propiedades y métodos de la clase Console (System).
Figura 1. Propiedades y métodos de la clase Console (System) [1].
Asociada a esta clase, la enumeración ConsoleColor [11] contiene el conjunto de colores para cambiar el color de fondo (background) y el color de texto (foreground) de la consola. En el ejemplo que veremos en la sección 4 pondremos en uso todos estos recursos.

4. Práctica

En la primera práctica voy a presentar de manera literal el ejemplo presentando en [1] que demuestra el uso de varias de las propiedades (e.g.: Console.Title [12]Console.BackgroundColor [13]Console.ForegroundColor [14]) y métodos (e.g.: Console.Clear [15], Console.ResetColor [16]).

4.1 Ejemplo de Manpulación de Consola desde [1]

Archivo Recipe01_16.cs:

En este código de ejemplo encontramos los siguientes puntos sobresalientes:

  • En la línea 12 cambiamos el título de la ventana de la consola a través de la propiedad Console.Title.
  • En las líneas 18 y 19 cambiamos el color de fondo y de texto:

    Console.ForegroundColor = ConsoleColor.Red;
    Console.BackgroundColor = ConsoleColor.Green;

    , respectivamente.
  • Con Console.Clear() en la línea 27 removemos cualquier contenido en pantalla.
  • En la línea 33 a través de Console.ResetColor() restauramos los colores por defecto de la consola.

Algunas capturas de pantalla de la ejecución de Recipe01_06.exe:
Cambio texto en el título de la consola.
Figura 2. Cambio texto en el título de la consola.

Cambio color de fondo de color y texto de una línea de comando.
Figura 3. Cambio color de fondo de color y texto de una línea de comando.
Cambio en el fondo de color de la consola.
Figura 4. Cambio en el fondo de color de la consola.
Cambio tamaño ventana consola y posición de cursor.
Figura 5. Cambio tamaño ventana consola y posición de cursor.

4.2 Criba de Eratóstenes

En este ejemplo presento la Criba de Eratóstenes [17] que es capaz de calcular los números primos de 1 a 100. Agregaré una componente visual para distinguir cuando se ha generado un número primo y un número no primo.

Archivo CribaEratostenes.cs:



En este ejemplo se alterna entre fondos de color cuando un primo es encontrado. No se muestra la criba completa (tabla de los números de 1 a 100) sino que se genera secuencialmente.

Para compilar seguimos estas líneas desde el símbolo de sistema:

  1. csc /target:exe /out:CribaEratostenes.exe CribaEratostenes.cs

La ejecutamos desde el mismo símbolo de sistema:

  1. CribaEratostenes.exe

Y obtenemos (una de las salidas):
26 no es un número primo en la Criba de Eratóstenes.
Figura 6. 26 no es un número primo en la Criba de Eratóstenes.

Conclusiones

Esta receta ha sido muy enriquecedora pues hemos aprendido a manipular la apariencia de la consola. Con esto tenemos el poder de adaptar aquellos programas que por algún motivo deben ser construidos bajo una interfaz de sólo texto. Se presentaron dos ejemplos uno extraído desde [1] en donde se demuestra varias de las propiedades y métodos para alterar la apariencia de la consola, algo similar hicimos en el segundo ejemplo, en éste último creamos un algoritmo para determinar la primalidad de un número entero corto (short) y con base en el resultado establecimos un color de fondo para la consola.

Glosario

- Apariencia
- Command prompt
- Consola
- Intérprete de comandos
- Sistema operativo
- Terminal
- Windows

Enlaces & Literatura

[1]: Visual C# 2010 Recipes by Allen Jones and Adam Freeman. Copyright 2010 Allen Jones and Adam Freeman, 978-1-4302-2525-6.
[2]: System console, the free encyclopedia - https://en.wikipedia.org/wiki/System_console
[3]: Console Class (System) - http://msdn.microsoft.com/en-us/library/system.console%28v=vs.110%29.aspx
[4]: System Namespace () - http://msdn.microsoft.com/en-us/library/system%28v=vs.110%29.aspx
[5]: Superuser, the free encyclopedia - https://en.wikipedia.org/wiki/Root_user
[6]: Internet protocol suite, the free encyclopedia - https://en.wikipedia.org/wiki/Internet_protocol_suite
[7]: Microsoft Windows, the free encyclopedia - https://en.wikipedia.org/wiki/Microsoft_Windows
[8]: Command Prompt, the free encyclopedia - https://en.wikipedia.org/wiki/Command_Prompt
[9]: Símbolo del sistema - https://es.wikipedia.org/wiki/S%C3%ADmbolo_del_sistema
[10]: Windows Vista, the free enciclopedia - https://en.wikipedia.org/wiki/Windows_Vista
[11]: ConsoleColor Enumeration (System) - http://msdn.microsoft.com/en-us/library/system.consolecolor%28v=vs.110%29.aspx
[12]: Console.Title Property (System) - http://msdn.microsoft.com/en-us/library/system.console.title%28v=vs.110%29.aspx
[13]: Console.BackgroundColor Property (System) - http://msdn.microsoft.com/en-us/library/system.console.backgroundcolor%28v=vs.110%29.aspx
[14]: Console.ForegroundColor Property (System) - http://msdn.microsoft.com/en-us/library/system.console.foregroundcolor%28v=vs.110%29.aspx
[15]: Console.Clear Method (System) - http://msdn.microsoft.com/en-us/library/system.console.clear%28v=vs.110%29.aspx
[16]: Console.ResetColor Method (System) - http://msdn.microsoft.com/en-us/library/system.console.resetcolor%28v=vs.110%29.aspx
[17]: Criba de Eratóstenes - https://es.wikipedia.org/wiki/Criba_de_Erat%C3%B3stenes


M

1 comentario:

  1. Muy completa la información y muy bien explicada para que los públicos sin mucha idea de SEO puedan mejorar su página web, enhorabuena por el artículo

    ResponderEliminar

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.