Hola. Este es nuestro último tema del módulo y espero que quede muy claro porque la división entre la lógica del programa y la interfaz de usuario, junto con los módulos de Python de los que ya hablamos son lo que usaremos para estructurar todos los proyectos del curso. Antes de que abordemos directamente el tema, quisiera darles un contexto un poco más amplio. Típicamente, la preocupación más importante cuando se construye un programa es que sea correcto, es decir, que sus cálculos y la forma en la que se manipula la información sea correcta. Por ejemplo, probablemente todos tenemos una cuenta en el banco, así que les puedo asegurar que a todos nos interesa que el programa que suma los saldos y, en general, maneja las transacciones sea correcto. ¿No es cierto? Otras preocupaciones, más del lado de quien usa el programa, son la seguridad, el desempeño, es decir, qué tan rápido es la usabilidad, es decir, qué tan fáciles de usar. Y este último está, por supuesto, relacionado con la interfaz de usuario. Otras preocupaciones, esta vez más del lado del programador, son la escalabilidad o cómo se comporta con muchos usuarios, la tolerancia a fallas o cómo se comporta cuando hay un problema, pero lo más importante es qué tan fácil es hacer un cambio o la mantenibilidad. La estructura de un programa de la que vamos a hablar está relacionada con mantener toda la interfaz con el usuario, separada de la lógica del programa para que el programa sea más fácil de entender. Primero, hablemos un poco de qué es la interfaz de usuario. Esta le permite al usuario interactuar con el programa, ya sea ingresando información o viendo las salidas que produce el programa. Existen diferentes tipos de interfaces de usuario, pero en este curso nos centraremos en las interfaces basadas en consola. Estas interfaces basadas en consola permiten a los usuarios dar instrucciones o ejecutar acciones sobre un programa, por medio de una línea de texto simple y su aspecto es el de una consola de comandos. No son las más utilizadas, pero para empezar a programar son, sin duda, una buena alternativa. Vamos a dejar este tema un momento en pausa para hablar de la separación, justamente, entre la interfaz y la lógica del problema, pero en seguida lo retomaremos. Como ya lo mencionamos, la principal razón para hacer esta división es que un programa sea más fácil de entender, de mantener y de extender. Y para esto lo que queremos es que la interfaz se encargue, únicamente, de la comunicación con el usuario. Es decir, la entrada y salida de datos; y para esto la implementaremos en un archivo separado que incluirá el programa principal y que la lógica se encuentre implementada en funciones agrupadas en módulos, las cuales se invocarán desde la interfaz al importar dichos módulos. Un beneficio adicional de esta división es que nos ayudará a probar nuestros programas más fácilmente. Recordemos el ejemplo del programa que nos permite hacer conversión entre dólares y pesos y viceversa, pero esta vez, concentrémonos en el módulo de la interfaz, es decir, "interfaz_convertidor_monedas.py". ¿Recuerdan que hablamos sobre la posibilidad de tener funciones sin parámetros o funciones sin retorno? ¿Recuerdan que dijimos que este tipo de funciones las íbamos a utilizar típicamente para interactuar con el usuario? Ya que estamos hablando de la interfaz, este es el momento preciso para retomar este tema. En el caso nuestro ejemplo, noten que este módulo tiene una función "iniciar aplicación" y las demás funciones se llaman "ejecutar". Entonces, una función cuyo resultado no dependiera de ningún valor externo parece no tener mucho sentido, pero en la interfaz sí lo tiene. Veamos la función "iniciar aplicación". Esta función no tiene parámetros y tampoco retorna porque se encarga de pedir la información básica para empezar la ejecución del programa. En este caso, pedimos la "trm" y, posteriormente, invocamos a las funciones que se encargarán de continuar con la interacción con el usuario y de mostrar los resultados asociados. En este caso, las funciones "ejecutar_convertir_a_dólares" y "ejecutar_convertir_a_pesos"; pero no se preocupen, que este mismo programa lo veremos paso a paso para así apropiar la importancia de mantener esta estructura para todas nuestras consolas. Me refiero a la función "iniciar aplicación" y a tantas funciones "ejecutar" como sean necesarias. Muy bien, los invito nuevamente a cerrar este tema con una pregunta.