Curso de introducción a la programación con Python

Autor: Luis Fernando Apáez Álvarez

Proyecto 2 (parte II): Control de flujo


En la parte final de la primer parte de este proyecto probamos nuestro código creando el objeto prueba, donde ejecutamos el código

# Instanciamos la clase
prueba = graficar()

# Invocamos el método str
print(prueba.mensaje_inicial())

# Información dle usuario (proviene de la clase menu)
prueba.info_usuario()

# Método str (proviene de la clase graficar)
print(prueba)

# Graficamos (proviene de la clase graficar)
prueba.Graficador()

ejecutando dicho código en ese orden. Para este punto podemos notar que requerimos de cierto control de flujo en nuestras clases pues, como vemos en el código anterior, debemos primero ejecuar print(prueba.mensaje_inicial()) y prueba.info_usuario() para que el resto del código funcione; asimismo, lo último que debe ejecutarse es el método Graficador(), pues de ejecutarse antes causará un error. Comenzaremos implementando primero un control de flujo en la clase graficar, donde por ejemplo desearemos que el método str deba ejecutarse primero antes que el métodoGraficador().

Lo que haremos será definir un atributo con un valor lógico con el cual estableceremos el correcto control de flujo a la hora de llamar a los métodos de esta clase:

lo anterior puede explicarse como:

Hagamos una prueba:

Ahora bien, adaptaremos también la clase menu para adaptar un control de flujo con el siguiente orden:

  1. Debe invocarse primero el método mensaje_inicial
  2. Debe invocarse el método info_usuario
  3. Debe invocarse el método str de la clase graficar
  4. Al final, debe invocarse el método Graficador()

La idea para implementar lo anterior es análoga a lo que hicimos antes, salvo que el atributo self.control_f será parte del constructor de la super clase.

Así, escribimos

Notemos que al invocar el método info_usuario() de la clase menú, tendremos que self.control_f tendrá asignado el valor de True. Así, el control del flujo de la clase graficar() se verá afectado y podremos invocar el método Graficador() antes del método str. Para resolver este conflicto escribimos

es decir, como self.control_f tiene asignado el valor True, el método Graficador() sólo se ejecutará si self.control_f es False. Luego, el método str lo que hace es cambiar el valor de True de control_f a False, con lo cual conseguimos el control de flujo deseado. Hagamos unas pruebas:

Probamos ahora el control de flujo en la clase graficar()

Para finalizar esta parte del proyecto grafiquemos las siguientes funciones