Curso de programacion en python3 : 06 - Uso de modulos, DRY(No te repitas) y ¿orientacion a objetos?
Esta entrada es parte de una serie, puedes ver la primera aquí
Como estos módulos son miles y ya sabemos que todos nuestros programas pueden ser usados a modo de modulo, lo mejor será reciclar el programa de la clase anterior, vamos a usar ese programa como modulo y de una vez trabajaremos con ciertos conceptos de la orientación a objetos, vamos al código utilizando el segundo programa de la entrada anterior:
/*este codigo se escribe en un archivo llamado imprimir, en caso contrario hay que importar esta clase con el nombre que tiene el archivo*/
#!/usr/local/bin/python3
#coding:utf-8
def salida_programada():
entrada = input("Desea salir del programa? 1-si 2-no\n")
try:
entrada = int(entrada)
except:
print("Error en el ingreso")
return
if(entrada == 1):
exit()
def tarea(entrada):
print("se ha introducido",entrada)
def switch_manual(entrada):#les recuerdo que no hay switch
if(entrada == "salir"):
salida_programada()
else:
tarea(entrada)
if __name__=='__main__':#secretos de la vida :v sigue siendo un metodo
while(True):#¿es infinito? pues si :v es la gracia
entrada = input("Ingrese algo para mostrarse o salir para salir\n")
switch_manual(entrada)
/*Este otro es la implementación del modulo, no importa cual sea su nombre pero si deben estar ambos archivos en el mismo directorio o carpeta para que funcione correctamente*/
#!/usr/local/bin/python3
#coding:utf-8
import impresion #se importa la clase, sustituya impresion por el nombre de su archivo
if __name__=='__main__':
impresion.tarea("Esto se imprime desde otro modulo")
El modulo no es complejo y creo que no es necesario explicarlo, su objetivo era imprimir lo que el usuario enviara y si no era posible convertirlo a numero entero saltaba un error, ahora bien nos estamos saltando la ejecución al llamarlo desde otro modulo, cuando utilizamos módulos tenemos que decirle al interprete que "impresion" es una dependencia de nuestro script, es decir, impresión es un modulo que se requiere para el funcionamiento del sistema, esto lo hace python de forma invisible pero una vez importados podemos hacer uso de los métodos y variables que este modulo tenga sin estar limitados por su forma de ejecución, hay que tomar en cuenta que seguimos limitados por sus funciones que son la única forma de utilizar el código, entonces sabiendo que el módulo tiene un método que imprime todo lo que entra por parámetro solo nos hace falta enviarle cualquier dato que se pueda imprimir y la magia sucede en ese objeto de la clase impresion, sucede en una instancia creada por el programa que ejecutamos.
Al definir un poco esta forma de trabajar tan útil como lo es la programación orientada a objetos(POO de aquí en adelante), primero quiero ir en defensa de la programación estructurada y funcional, hay cosas tan pequeñas o concretas que solo pueden ser hechos en base a programación funcional, por tanto es error bastante común de estudiantes como yo hacer una solución bastante simple utilizando la POO, cuando un problema se puede resolver sin interfaz gráfica es del dominio de la programación funcional o estructurada, cuando queremos solucionar algo que se extiende mas allá de la consola y requiere mucho código, resulta mejor orientar lo a objetos, hay excepciones, el juego Quake III está escrito en C totalmente y no hay mejor forma de haberlo hecho, esto por que las maquinas de los 90's no eran muy potentes, sobre todo por que era mas rentable vender maquinas recreativas con el juego embebido que vender CD del mismo, los invito a conocer mas de esa historia, el punto es que dependiendo de nuestro conocimiento y los requerimientos del hardware podemos utilizar navajas suizas como C teniendo la posibilidad de medir en bits el gasto de memoria que ejerce nuestro programa o python donde se gasta bastante ram pero casi siempre es lo que sobra en nuestras modernas maquinas, somos programadores, la decisión es nuestra, escoja cada uno con sabiduría y documentación al respecto.
Ahora voy a hablar de java, es posible hacer programación estructurada pero siempre estamos dependiendo de grandes cosas necesarias y complejas de entender que son propias del lenguaje, mas allá de una sintaxis, hablo de una estructura engorrosa que le facilita la vida a los creadores de java, pero es motivo de confusión, python no tiene una estructura limpia, fija y esplendorosa (guiño, guiño, fanáticos de la RAE a mi), sino que prefiere que las cosas pasen al ritmo del programador, el objetivo de este lenguaje es ir de cero a cien, el método main en casi todos los lenguajes con orientación a objetos es obligatorio, aquí resulta totalmente optativo y fue obviado hasta la entrada anterior por que es importante para entender el concepto de método, en C/C++ es obligatorio pero sigue siendo mucho menos complejo que el de java, con imágenes robadas de Internet voy a ejemplificar esto con claridad.
![]() |
Tomado de una presentación de Mariano Reingart |
Es casi natural la orientación a objetos, vamos a usar la imaginación por un momento, ¿que es una silla?, para cualquier persona son 4 patas y una tabla para sentarse, pero según la orientación a objetos hay que hacer una deconstrucción mas grande que esa, una silla son patas tipo entero por que se pueden contar, respaldar que es booleano(por que la silla o lo tiene, o no lo tiene), comodidad es una cadena(para escribir una extensa critica), la silla tiene coordenadas X,Y y Z que la ubican en el espacio, deberá haber un método para cambiar la posición de la silla, el numero de patas, si tiene respaldar e incluso cambiar nuestra critica sobre la comodidad, eso es orientación a objetos, "modelamos" un objeto real usando solo lo indispensable para el desarrollo de nuestra aplicación e ignorando el resto, hay muchas mas características de la silla como el peso o tamaño pero en un juego bastarían esos componentes para definir el comportamiento de la silla como objeto.
Para la próxima entrada voy a conceptualizar la orientación a objetos con imágenes, quiero trabajar en el desarrollo de un programa bastante mas complejo en comparación a todos los anteriores que me sirva al menos para hablar de objetos, en las próximas entradas ya habrá tiempo para hablar sobre herencia y polimorfismo, muy útiles y bastante sutiles, estos conceptos son de potencia indiscutible pero solo aparecen en situaciones muy concretas, pocas veces he podido encontrar un polimorfismo o herencia pero se agradece mucho saber como identificarlos, cuando están presentes no hay otra forma de abordar un problema sin mal gastar memoria.
Comentarios
Publicar un comentario
Comente usted aquí