Página inmutable History Adjuntos

Cursos/Principiantes/Parte5

Nombre de la página: Cursos / Principiantes / Parte5



Introducción a la programación orientada a objectos

La programación orientada a objetos (POO) o en inglés, Object Oriented Programming (OOP) es un paradigma de la programación, el cual aporta simpleza en programas complicados a través de la abstracción de la forma en que se descompone un problema en pequeños "objetos".

Al final de cuentas, como muchas otras cosas en la programación, es solo un concepto para dar estructura a un programa, con esto quiero decir que ayuda al programador a entender y mantener el código del programa a futuro, no es algo tangible, pero el que se siga una metodología definida ayuda a entender el código de forma eficiente, no piensen que POO es algo como un programa o un lenguaje o un archivo, es solo una forma de hacer las cosas que cabe destacar no es la única.

Es como decir que la única forma de comer una sopa es a cucharadas, claro que puede que sea mas sencillo y parece ajustarse mas a la sociedad actual, pero en todo momento se podría sorber, tomar con popote o sumergir la cara y succionar, todas cumplen el cometido, la sopa llega al estomago, pero cada una tiene su método particular, con sus ventajas y desventajas, y usualmente preferiríamos comer la sopa con cuchara.

En la POO como en todo paradigma se siguen convenciones sobre nomenclatura de las estructuras para pasar a un nivel superior de abstracción, en este caso, los objetos.

Un objeto, es solo una generalización de algo que es independiente, partiendo de analogías de la vida real, un objeto son sus computadoras, los vasos donde toman agua, los libros que leen, los automóviles que usan (directa o indirectamente), lo que comen, etc.

Ustedes mismos delimitan que es un objeto o no, a fin de cuentas es solo un concepto que ayuda al cerebro humano (que le fascina crear jerarquías) a crear una capa de abstracción del pensamiento, ayuda que cuando andamos manejamos una bicicleta, no pensamos en los tornillos con los que se sostiene el asunto, nos interesa el objeto de más alto nivel, la bicicleta y como ínter-actua con el resto del mundo (un mundo lleno de objetos).

La POO ayuda de igual manera en un mundo completamente virtual, si aún no lo han notado, programar es solo una forma estructurada de definir la solución a un problema, usualmente se le conoce como algoritmo a la forma mas general de una definición para la resolución de un problema, entonces, entre mejor definamos nuestra forma de proponer soluciones, será mas sencillo el que encontremos esa solución.

Orientación a objetos en Python

Para definir un tipo de objeto en python se usa la palabra reservada class, donde la construcción en general tiene la forma:

   1 class <NOMBRE_DE_CLASE>(CLASES_SUPERIORES):
   2     '''
   3       Documentación sobre la clase
   4     '''
   5     <ATRIBUTOS Y MÉTODOS DE LA CLASE>

La clase básica en python tiene el nada ambiguo nombre de "object"

Por ejemplo:

   1 class Ventana(object):
   2     """
   3     Objeto que ayuda a contener otros objetos gráficos
   4     para ser mostrados al usuario, en un sistema
   5     que maneja ventanas.
   6     """

Lo anterior representa la definición de una clase en python, no tiene atributos propios ni métodos, pero es una clase en particular, con la cual se pueden crear "instancias", de la misma, la forma de hacerlo es igual que con las funciones comunes y corrientes:

v1 = Ventana()
v2 = Ventana()
v3 = Ventana()

Cada vN son completamente independientes, imaginen a la clase como un molde para crear productos, cada "v" es un producto, cada "v" es un objeto.

El ejemplo anterior crea 3 instancias de una clase, pero seria interesante poder modificar la instancia al momento de "instanciar" la clase, como por ejemplo que la ventana tuviera un atributo de color, entonces, que tal si definimos a la clase Ventana de la siguiente formas:

   1 class Ventana(object):
   2     """
   3     Objeto que ayuda a contener otros objetos gráficos
   4     para ser mostrados al usuario, en un sistema
   5     que maneja ventanas.
   6     """
   7     def __init__(self, color):
   8         """
   9         Personaliza a la clase con un color en particular
  10         """
  11         self.color = color

Y se instancían de la siguiente forma

   1 v1 = Ventana('verde')
   2 v2 = Ventana('azul')
   3 v3 = Ventana('rojo')
   4 
   5 # podemos modificar propiedades del objeto
   6 v3.color = 'blanco'
   7 v3.ancho = 22

El método __init__, representa el "constructor" de la clase, el cual se ejecuta al instanciar la clase, recibiendo los parámetros que se envían al crear el objeto.

Nótese:

  1. Indentado dentro de "class".
  2. Tiene la misma estructura que la definición de una función.
  3. Acepta 2 parametros, pero se instancia con 1 parámetro.
  4. Se esta usando el operador punto ".", como se vio en los módulos y paquetes.
  5. El nombre __init__, es relevante y necesariamente tiene que tener ese nombre.

  6. Si recuerdan de la clase anterior, para crear un paquete se tenia un directorio con un archivo ¿que se llamaba?.

   1         
   2 class Persona(object):
   3     
   4     def __init__(self, nombre, edad=0, *args, **params):
   5         self.nombre = nombre
   6         self.edad = edad
   7         self.args = args
   8         for name, value in params.items():
   9             setattr(self, name, value)
  10     
  11     def _come_la_comida(self, comida):
  12         print("Chum Chum... %s" % comida)
  13     
  14     def come(self, comida):
  15         print("Come %s" % comida)
  16         self._come_la_comida(comida)
  17     
  18     def duerme(self):
  19         print("Durmiedo")

Video de la charla