Anuncios

Bienvenidos sean a este post, hoy comenzaremos con lo mas fuerte en lenguajes de programacion como es el OOP.

Anuncios

Cuando hablamos de OOP nos referimos a la Programacion Orientada a Objetos (por sus siglas en ingles) y python tiene un soporte total sobre este paradigma de la programacion, anteriormente mencionamos que python trabaja todo como un objeto, es decir que no es solo soportado sino que es parte de su nucleo, al que conoce algo de programacion y sobre OOP sabe que las dos partes fundamentales de esta son las clases y los objetos, y la mejor forma de definirlas que he conocido es:

La clase es un molde y el objeto es lo creado con ese molde

El Tinchicus
Anuncios

En la realidad las clases siempre seran un conjunto de propiedades (variables) y metodos (funciones) que pueden ser instanciadas por medio de objetos los cuales nos permitiran acceder a estos, para entender este concepto vamos a utilizar el siguiente ejemplo:

>>> class Simple():
...     pass
... 
>>>
Anuncios

Esta es la forma mas basica y «simple» de crear una clase, siempre comenzara con la palabra class seguida del nombre que la identifica, los parentesis para los argumentos, los dos puntos para comenzar el bloque y luego como vimos hasta ahora las instrucciones hasta que dejemos un espacio en blanco en el interprete o reajustemos la siguiente linea con el tabulador, con esto tenemos una clase vacia pero vamos a hacer unas pruebas, la primera sera ver que tipo es:

>>> print(type(Simple))
<class 'type'>
>>>
Anuncios

Si lo hacemos de esta forma nos dira que es un tipo clase, es decir que ya lo tenemos creado, pasemos a crear una instancia u objeto de esta clase:

>>> simp = Simple()
Anuncios

Es igual que crear una variable o nombre, una identificacion y a este le asignamos la clase correspondiente, para verificar su tipo haremos la siguiente prueba:

>>> print(type(simp))
<class '__main__.Simple'>
>>>
Anuncios

Observen como nos informa que es una instancia, objeto o derivacion de la clase Simple que esta en la raiz o main de nuestro codigo, por ultimo haremos una ultima verificacion (aunque no la mas correcta) para chequear que esta instancia es de Simple, para ello usaremos la siguiente linea:

>>> print(type(simp) == Simple)
True
>>>
Anuncios

En este caso le pedimos que nos muestre el resultado de una operacion logica de comparacion entre el tipo del objeto creado y la clase, como ambos son lo mismo nos devuelve un True, por ultimo si no lo observaron la forma de definir a una clase es igual a la de una funcion en todo su aspecto con la salvedad de que en lugar de usar def usamos class, pasemos al siguiente tema.

Anuncios

Namespaces de clases y objetos

Si observaron cuando mostramos el tipo de la instancia nos mostro a main y la clase, esto significa que al momento de definir o crear una clase esta automaticamente se convierte en un namespace, lo mismo ocurre cuando importamos un modulo, esto nos permite llamar a la clase para crear las instancias, a su vez las instancias heredan las propiedades y metodos de la clase y reciben su propio namespace, si recuerdan en este post vimos que para recorrer el namespace solo necesitamos al operador punto (.), analicemos el concepto mediante los siguientes ejemplos:

>>> class Persona:
...     especie = "Humano"
... 
>>>
Anuncios

Primero crearemos una nueva clase llamada Persona la cual tendra una propiedad llamada especie con un valor, en este caso no fue necesario los parentesis porque es una clase basica y lo mismo podriamos con la clase anterior, vamos a ver el valor de propiedad de esta clase:

>>> print(Persona.especie)
Humano
>>>
Anuncios

En este caso utilizamos el nombre de la clase seguido de la propiedad dentro de la misma, una vez ejecutado nos mostrara el valor de la misma, pasemos a hacer la siguiente accion:

>>> Persona.viva = True
Anuncios

Esta accion agrega una propiedad nueva a la clase, lo hace automaticamente, sin necesidad de tener que definirla dentro de la misma, vamos a verificar si es verdad de la siguiente manera:

>>> print(Persona.viva)
True
>>>
Anuncios

En el cuadro podemos ver como si solicitamos la informacion de la nueva propiedad de la clase nos devuelve el valor ingresado confirmando lo dicho anteriormente, para nuestro siguiente caso vamos a crear una nueva instancia u objeto de la clase:

>>> hombre = Persona()
Anuncios

Probemos a mostrar la informacion contenida en hombre:

>>> print(hombre.especie)
Humano
>>> print(hombre.viva)
True
>>>
Anuncios

La instancia en realidad es un acceso al objeto que usamos de molde, por lo tanto no solamente tendra acceso a las propiedades de la clase sino tambien a los metodos de la misma, y cuando trabajamos con esta instancia no trabajamos con la clase sino con un nuevo objeto que no afectara a la clase base o padre, aunque las modificaciones de la clase si afectan a sus instancias, vamos a modificar el valor de viva en la clase Persona:

>>> Persona.viva = False
Anuncios

Si mostramos nuevamente el valor de viva en hombre sucedera lo siguiente:

>>> print(hombre.viva)
False
>>>
Anuncios

Vemos que se modifico con el nuevo valor, esto es debido a que cuando modifiquemos algo en la clase que hara de base, bajara la nueva modificacion en todos sus «hijos», como se dice habitualmente, esta descendencia siempre es hacia abajo y nunca hacia arriba por lo tanto las modificaciones que efectuemos en los hijos no se veran en la clase padre, por ultimo vamos a agregar dos nuevas propiedades a nuestra instancia:

>>> hombre.nombre = "Martin"
>>> hombre.apellido = "Miranda"
>>>
Anuncios

Si probamos de imprimir las nuevas propiedades de la instancia sucedera lo siguiente:

>>> print(hombre.nombre, hombre.apellido)
Martin Miranda
>>>
Anuncios

Vemos que nos devuelve los valores creados correctamente pero si lo intentamos con la clase sucedera lo siguiente:

>>> print(Persona.nombre, Persona.apellido)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: type object 'Persona' has no attribute 'nombre'
>>>
Anuncios

Nos informa que dicha propiedad no existe, por lo tanto vemos que siempre las modificaciones van desde arriba hacia abajo y nunca al reves, por el momento concluimos con este tema en los proximos posts no solo ahondaremos en estos conceptos sino en otros muy interesantes.

Anuncios

En resumen, hoy hemos visto que es la programacion orientada a objetos, hemos visto como se crea una clase, como se crea un objeto o instancia del mismo, luego hemos hablado sobre los namespaces de las clases y objetos, por ultimo hemos visto como son las propiedades de la misma, como se transfieren a sus instancias o hijas y como estas pueden tener sus propiedades pero no pueden heredarlas a sus padres, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Donación

Es para mantenimento del sitio, gracias!

$1.00