Está en la página 1de 23

Grupo CABUNTU

Programación Orientada
a Objetos con Python

Guillermo Morales
RadicalEd
Universidad Cooperativa de Colombia
Licencia
GNU/GFDL

http://www.gnu.org/copyleft/fdl.html
http://es.wikipedia.org/wiki/Licencia_de_documentaci%C3%B3n_libre_de_GNU
● Presentación del grupo
INDICE
CABUNTU ● Rematando (pero no
● Definición Wikipedia sobre vendiendo)
POO :P ● Las excepciones también son
● Conceptos sobre POO clases
● El lenguaje de programación ● Metaclases (clases de clases)
Python ● Type() la madre de las
● Clases (para no ir a la escuela) metaclases
● Atributos ● Preguntas
● Métodos ● Enlaces
● Abstracción
● Herencia
● Polimorfismo
● Encapsulamiento
Presentación del grupo CABUNTU
Cabuntu es un grupo de entusiastas amantes del software
libre y del sistema operativo GNU/Linux Ubuntu; creado a
finales del año 2008 por Jhon Galindo, un Diseñador
Gráfico que paso de utilizar programas propietarios a usar
solo Software Libre.

Nos gusta participar en eventos importantes que tengan


que ver con la temática del grupo, poder difundir Ubuntu y
sobre todo la cultura libre.
DEFINICION EN LA WIKIPEDIA
SOBRE POO
La Programación Orientada a Objetos (POO u OOP
según sus siglas en inglés) es un paradigma de
programación que usa objetos y sus interacciones para
diseñar aplicaciones y programas de computadora. Está
basado en varias técnicas, incluyendo herencia,
modularidad, polimorfismo y encapsulamiento. Su uso
se popularizó a principios de la década de 1990.
Actualmente son muchos los lenguajes de programación
que soportan la orientación a objetos.
El lenguaje de programación

Python es un lenguaje de programación desarrollado por


Güido Van Rossum en 1991, el nombre del lenguaje fue
inspirado en el grupo de cómicos ingleses “Monty Python”
y no en la serpiente constrictora, es similar a Perl. Se trata
de un lenguaje interpretado o de script, con tipado
dinámico, fuertemente tipado, multiplataforma y orientado
a objetos.
Zen de Python por Tim Peters
● Bello es mejor que feo.
● Explícito es mejor que implícito.
● Simple es mejor que complejo.
● Complejo es mejor que complicado.
● Plano es mejor que anidado.
● Ralo es mejor que denso.
● La legibilidad cuenta.
● Los casos especiales no son tan especiales como para quebrantar las reglas.
● Aunque lo práctico gana a la pureza.
● Los errores nunca deberían dejarse pasar silenciosamente.
● A menos que hayan sido silenciados explícitamente.
● Frente a la ambigüedad, rechaza la tentación de adivinar.
● Debería haber una -y preferiblemente sólo una- manera obvia de hacerlo.
● Aunque esa manera puede no ser obvia al principio a menos que usted sea holandés.[18]
● Ahora es mejor que nunca.
● Aunque nunca es a menudo mejor que ya mismo.
● Si la implementación es difícil de explicar, es una mala idea.
● Si la implementación es fácil de explicar, puede que sea una buena idea.
● Los espacios de nombres (namespaces) son una gran idea ¡Hagamos más de esas cosas!
Clases (para no ir a la escuela)
Las clases en Python y en cualquier lenguaje de
programación son una especie de plantilla donde se
fijan los atributos y funcionalidades para la creación de
los objetos.
Una clase es un contenedor de uno o más datos
(variables o propiedades miembro) junto a las
operaciones de manipulación de dichos datos
(funciones/métodos). Las clases pueden definirse como
estructuras (struct), uniones (union) o clases (class)
pudiendo existir diferencias entre cada una de las
definiciones según el lenguaje. además las clases son
agrupaciones de objetos que describen su
comportamiento.
Atributos
Qué sería de un objeto sin saber sus atributos???
Un objeto necesita saber de qué forma y cómo será, por
ejemplo, si sabemos que tenemos una clase para
conexiones MySQL, entonces necesitaremos saber hacía
que equipo, base de datos, con que usuario y contraseña se
debe conectar, para eso definimos los atributos de la clase
para ese objeto.
Nota: el método __init__() no es el
constructor de la clase, para eso está el
método __new__() que se ejecuta antes
de instanciarse el __init__()
Métodos
Los métodos son las acciones que puede realizar un
objeto, por ejemplo, en la clase anterior llamada
ConexionMySQL se puede crear un método para
conectarse a la DB después de tener los atributos de
conexión.

Nota: Se está haciendo uso del módulo MySQLdb para


manejo de DB MySQL, lo pueden encontrar en
http://sourceforge.net/projects/mysql-python/
Abstracción
La abstracción denota las características esenciales de
un objeto, donde se capturan sus comportamientos.
A la hora de crear una clase abstracta, Python no ofrece
una sintaxis particular para hacer esta labor.
El problema surge cuando alguien, usando un módulo,
decide instanciar esa clase.
Python no se opondrá, por lo que se debe usar un
pequeño truco.
De esta forma si se intenta crear un objeto
objeto = AbstractClass()
lanzará un error, mientras que si se crea un objeto
objeto = SubClass()
ejecutará igualmente el constructor de la clase padre,
pero se irá por la rama del else y ejecutará lo que tenga
que hacer el constructor
según AbstractClass.

Información extraída de:


http://valdaris.es/2008/07/clases-abstractas-en-python/
Herencia
Un lenguaje POO,
no sería POO sino
tuviera la herencia
dentro de él. Esta
característica es la
que permite
relacionar clases
entre si para
compartir sus
métodos y atributos.
Polimorfismo
El polimorfismo se da cuando una clase deriva de otra
pero los métodos tienen comportamientos diferentes,
por ejemplo, el método desplazar del código anterior
podríamos decirle que nos especifique que tipo de
desplazamiento está realizando.
Encapsulamiento
El encapsulamiento
impide que se pueda
tener acceso a
métodos o atributos
de la clase por fuera
de esta, ósea, en la
declaración de los
objetos en si,
solamente serían
utilizables dentro de
la misma clase.
Rematando (pero no vendiendo)
Algunas veces se necesita hacer uso de un tipo similar a
las estructuras de C para tener unos cuantos datos de
distinto tipo agrupados bajo un mismo nombre, para
esto podemos declarar una clase vacía.
Excepciones
Además de las excepciones manejadas por el lenguaje,
se pueden crear excepciones propias dependiendo lo que
se esté manejando. Las excepciones definidas por
usuario se identifican mediante clases. Utilizando este
mecanismo, es posible crear jerarquías ampliables de
excepciones.
Metaclases (clases de clases)
Si un objeto es una instancia de una clase, una clase es
una instancia de una metaclase, como quien dice en
POO una metaclase es una clase (valga el bug) cuyas
instancias son clases; esto nos sirve para definir clases
en tiempo de ejecución.
A partir de Python 2.2 type() tiene un significado nuevo muy especial: permite crear nuevos
tipos, es decir, es una metaclase, de hecho es la metaclase con la que están creados todos los
tipos “built-in” de Python y todas las clases de “nuevo-estilo” (las que heredan de object); para
crear una clase con type() se usa la siguiente sintaxis:
type(name, bases, dct)
● name: es el nombre de la nueva clase
● bases: son las clases de las que hereda
● dct: es un diccionario con los atributos y métodos que implementa
ENLACES

http://docs.python.org/tutorial/
http://es.wikipedia.org/wiki/Python
http://es.wikipedia.org/wiki/Programación_orientada_a_objetos
http://radicalpython.blogspot.com
http://mundogeek.net/tutorial-python/
http://valdaris.es/2008/07/clases-abstractas-en-python/
http://crysol.org/node/600
http://www.google.com.co