Está en la página 1de 51

Python: Programacin Orientada a Objetos

JESSE PADILLA AGUDELO Ingeniero Electrnico

Licencia de la Presentacin

Python Manizales - Jesse Padilla Agudelo

Objetivos
Dar un repaso general a la Programacin Orientada a Objetos, comprendiendo de manera general conceptos tales como Objetos, Clases, Mtodos, Herencia, polimorfismo, etc. Conocer e implementar cada uno de los conceptos claves de la POO usando Python como lenguaje de programacin.
Python Manizales - Jesse Padilla Agudelo 4

Introduccin
Hoy en da la POO es un paradigma de programacin fundamental para el desarrollo de cualquier tipo de aplicacin, por eso hoy en da se la mayora de los lenguajes de alto nivel (Como Java, C#, C++ entre otros) soportan este paradigma y buscan explotarlo al mximo, Python no es la excepcin de hecho en Python trabajar con POO es muy fcil y agradable. Razn por la cual durante esta presentacin analizaremos de forma detallada las virtudes de Python a la hora de desarrollar software bajo este paradigma.
Python Manizales - Jesse Padilla Agudelo 5

ndice
1. 2. 3. 4. 5. 6. 7. 8. Conceptos de Programacin Orientada a Objetos Python: Clases y Objetos Python: Herencia Python: Herencia Mltiple Python: Polimorfismo Python: Encapsulacin Python: Clases de Nuevo Estilo Python: Mtodos Especiales
Python Manizales - Jesse Padilla Agudelo 6

POO Programacin Orientada a Objetos


La programacin orientada a objetos es un paradigma de programacin que busca representar entidades u objetos agrupando datos y mtodos que puedan describir sus caractersticas y comportamiento.

Python Manizales - Jesse Padilla Agudelo

POO Programacin Orientada a Objetos


La POO paradigma de programacin en el que los conceptos del mundo real relevantes para nuestro problema se modelan a travs de clases y objetos, y en el que nuestro programa consiste en una serie de interacciones entre estos objetos.

Python Manizales - Jesse Padilla Agudelo

Ventajas de la POO
Fomenta la reutilizacin y extensin del cdigo. Permite crear sistemas ms complejos. Relacionar el sistema al mundo real. Facilita la creacin de programas visuales. Construccin de prototipos Agiliza el desarrollo de software Facilita el trabajo en equipo Facilita el mantenimiento del software
Python Manizales - Jesse Padilla Agudelo 9

Modelo Orientado a Objetos


Para entender la POO vamos a revisar unos conceptos bsicos:
1. 2. 3. 4. 5. 6. Objeto Clase Mensaje Mtodo Interfaz Herencia
Python Manizales - Jesse Padilla Agudelo 10

POO: El Objeto
Un objeto es una unidad que engloba en s mismo caractersticas y comportamiento necesarias para procesar informacin. Cada objeto contiene datos y funciones. Y un programa se construye como un conjunto de objetos, o como un nico objeto.

Python Manizales - Jesse Padilla Agudelo

11

POO: El Objeto
Ejemplo
Carro BMW
Caractersticas
4 Ruedas Micheline Motor BMW Caja de cambios de 7 Velocidades Color Azul 2 Espejos

Python Manizales - Jesse Padilla Agudelo

12

POO: La Clase
La clase es un modelo o prototipo que define las variables y mtodos comunes a todos los objetos de cierta clase. Tambin se puede decir que una clase es una plantilla genrica para un conjunto de objetos de similares caractersticas.

Python Manizales - Jesse Padilla Agudelo

13

POO: La Clase
Ejemplo:
Clase Vehculo
Numero de Ruedas Tipo de Motor Capacidad del Tanque de Gasolina Numero de Velocidades de la Caja de Cambios Color

Python Manizales - Jesse Padilla Agudelo

14

POO: Mensaje
El mensaje es el modo en que se comunican los objetos entre si. Ejemplo:
Cuando llamemos a una funcin de un objeto, diremos que estamos enviando un mensaje a ese objeto.

Python Manizales - Jesse Padilla Agudelo

15

POO: Mtodo
Un Mtodo es en POO se encarga de procesar los mensajes que lleguen a un objeto, un mtodo no es otra cosa que una funcin o procedimiento perteneciente a un objeto.

Python Manizales - Jesse Padilla Agudelo

16

POO: Interfaz
Las clases y por lo tanto tambin los objetos, tienen partes pblicas y partes privadas. Algunas veces llamaremos a la parte pblica de un objeto su interfaz. Se trata de la nica parte del objeto que es visible para el resto de los objetos, de modo que es lo nico de lo que se dispone para comunicarse con ellos.

Python Manizales - Jesse Padilla Agudelo

17

POO: Herencia
La herencia es uno de los conceptos ms cruciales en la POO. La herencia bsicamente consiste en que una clase puede heredar sus variables y mtodos a varias subclases. Esto significa que una subclase, aparte de los atributos y mtodos propios, tiene incorporados los atributos y mtodos heredados de la superclase.
Python Manizales - Jesse Padilla Agudelo 18

Python: Clases y Objetos


Python est completamente orientado a objetos: puede definir sus propias clases, heredar de las que usted defina o de las incorporadas en el lenguaje, e instanciar las clases que haya definido. En Python las clases se definen mediante la palabra reservada class seguida del nombre de la clase, dos puntos (:) y a continuacin, indentado, el cuerpo de la clase.
Python Manizales - Jesse Padilla Agudelo 19

Python: Clases y Objetos


Ejemplo:
class Ejemplo: pass #1 #2

En este ejemplo el nombre de la clase es Ejemplo y no hereda de otra clase. Por convencin las clases empiezan en Mayscula. Esta clase no define atributos pero no puede estar vaca para eso usamos la funcin pass, equivalente en otros lenguajes a usar {}
Python Manizales - Jesse Padilla Agudelo 20

POO en Python: el mtodo __init__

Las clases de Python no tienen constructores o destructores explcitos. Las clases de Python tienen algo similar a un constructor: el mtodo __init__.

Python Manizales - Jesse Padilla Agudelo

21

POO en Python: el mtodo __init__


__init__ se llama inmediatamente tras crear una instancia de la clase. Sera tentador pero incorrecto denominar a esto el constructor de la clase. Es tentador porque parece igual a un constructor (por convencin, __init__ es el primer mtodo definido para la clase), acta como uno (es el primer pedazo de cdigo que se ejecuta en una instancia de la clase recin creada), e incluso suena como uno. Incorrecto, porque el objeto ya ha sido construido para cuando se llama a __init__, y ya tiene una referencia vlida a la nueva instancia de la clase. Pero __init__ es lo ms parecido a un constructor que va a encontrar en Python, y cumple el mismo papel.
Python Manizales - Jesse Padilla Agudelo 22

POO en Python: el mtodo __init__


El primer atributo o variable de cada mtodo de clase, incluido __init__, es siempre una referencia a la instancia actual de la clase. Por convencin, este argumento siempre se denomina self. En el mtodo __init__, self se refiere al objeto recin creado; en otros mtodos de la clase, se refiere a la instancia cuyo mtodo ha sido llamado. Los mtodos __init__ pueden tomar cualquier cantidad de argumentos, e igual que las funciones, stos pueden definirse con valores por defecto, hacindoles opcionales para quien invoca.
Python Manizales - Jesse Padilla Agudelo 23

POO en Python: el mtodo __init__


Por convencin, el primer argumento de cualquier clase de Python (la referencia a la instancia) se denomina self. Cumple el papel de la palabra reservada this en C++ o Java, pero self no es una palabra reservada en Python, sino una mera convencin. Aunque necesita especificar self de forma explcita cuando define el mtodo, no se especifica al invocar el mtodo; Python lo aadir de forma automtica.
Python Manizales - Jesse Padilla Agudelo 24

POO en Python: Instanciacin de las Clases


Crear un objeto o instanciar una clase en Python es muy sencillo. Para instanciar una clase, simplemente se invoca a la clase como si fuera una funcin, pasando los argumentos que defina el mtodo __init__. El valor de retorno ser el objeto recin creado.

Python Manizales - Jesse Padilla Agudelo

25

POO en Python: Instanciacin de las Clases

Python Manizales - Jesse Padilla Agudelo

26

POO en Python: Borrar Objetos


Crear instancias nuevas es sencillo, destruirlas lo es ms. En general, no hay necesidad de liberar de forma explcita las instancias, porque se eliminan automticamente cuando las variables a las que se asignan salen de mbito. Son raras las prdidas de memoria en Python.

Python Manizales - Jesse Padilla Agudelo

27

POO con Python: Atributos de datos


Python admite atributos de datos (llamados variables de instancia en Java, y variables miembro en C++). Para hacer referencia a este atributo desde cdigo que est fuera de la clase, debe calificarlo con el nombre de la instancia, instancia.data, de la misma manera que calificara una funcin con el nombre de su mdulo. Para hacer referencia a atributos de datos desde dentro de la clase, use self como calificador. Por convencin, todos los atributos de datos se inicializan en el mtodo __init__. Sin embargo, esto no es un requisito, ya que los atributos, al igual que las variables locales, comienzan a existir cuando se les asigna su primer valor.

Python Manizales - Jesse Padilla Agudelo

28

POO en Python: Atributos de datos

Python Manizales - Jesse Padilla Agudelo

29

POO en Python: Sobre Carga de Mtodos


C++ y Java admiten la sobrecarga de funciones por lista de argumentos, es decir una clase puede tener varios mtodos con el mismo nombre, pero con argumentos en distinta cantidad, o de distinto tipo. Python no admite sobrecarga de funciones. Los mtodos se definen slo por su nombre y hay un nico mtodo por clase con un nombre dado. De manera que si una clase sucesora tiene un mtodo __init__, siempre sustituye al mtodo __init__ de su clase padre, incluso si ste lo define con una lista de argumentos diferentes. Y se aplica lo mismo a cualquier otro mtodo
Python Manizales - Jesse Padilla Agudelo 30

POO en Python: Sobre Carga de Operadores


La sobrecarga de operadores permite redefinir ciertos operadores, como "+" y "-", para usarlos con las clases que hemos definido. Se llama sobrecarga de operadores porque estamos reutilizando el mismo operador con un nmero de usos diferentes, y el compilador decide cmo usar ese operador dependiendo sobre qu opera.
Python Manizales - Jesse Padilla Agudelo 31

POO en Python: Sobre Carga de Operadores


__add__( self, other) __sub__( self, other) __mul__( self, other) __rmul__( self, other) __floordiv__( self, other) __mod__( self, other) __divmod__( self, other) __pow__( self, other[, modulo]) __and__( self, other) __xor__( self, other) __or__( self, other) -> Oper. Suma -> Oper. Resta -> Oper. Multiplicacion -> Oper. Multi. Por Escalar -> Oper. division Redondeo -> Oper. modulo -> Oper. division -> Oper. Potencia -> Oper. and -> Oper. xor -> Oper. or
32

Python Manizales - Jesse Padilla Agudelo

POO en Python: Sobre Carga de Operadores

Python Manizales - Jesse Padilla Agudelo

33

Python: Herencia
Una de las principales propiedades de las clases es la herencia. Esta propiedad nos permite crear nuevas clases a partir de clases existentes, conservando las propiedades de la clase original y aadiendo otras nuevas. La nueva clase obtenida se conoce como clase derivada, y las clases a partir de las cuales se deriva, clases base. Adems, cada clase derivada puede usarse como clase base para obtener una nueva clase derivada.
Python Manizales - Jesse Padilla Agudelo 34

Python: Herencia
Definicin de una clase heredada en Python.
class Instrumento: pass class Guitarra(Instrumento): pass class Bajo(Instrumento): pass

Python Manizales - Jesse Padilla Agudelo

35

Herencia: El Mtodo __init__


Cuando creamos una clase derivada a partir de una clase padre y tenemos que la clase derivada proporciona o requiere su propio mtodo __init__ , este mtodo de la clase derivada debe llamar explcitamente el mtodo __init__ de la clase base.

Python Manizales - Jesse Padilla Agudelo

36

Herencia: El Mtodo __init__

Python Manizales - Jesse Padilla Agudelo

37

Python: Herencia Mltiple


class acuatico: pass class terrestre: pass class anfibio(acuatico, terrestre): pass
Python Manizales - Jesse Padilla Agudelo 38

Polimorfismo
En programacin orientada a objetos se denomina polimorfismo a la capacidad que tienen los objetos de una clase de responder al mismo mensaje o evento en funcin de los parmetros utilizados durante su invocacin. Un objeto polimrfico es una entidad que puede contener valores de diferentes tipos durante la ejecucin del programa. (wikipedia)
Python Manizales - Jesse Padilla Agudelo 39

Python: Polimorfismo
El polimorfismo es el proceso de la utilizacin de un operador o funcin de diferentes formas para diferentes datos de entrada. En trminos prcticos, el polimorfismo significa que si la clase B hereda de la clase A, no tiene que heredar todo acerca de la clase A, que puede hacer algunas de las cosas que hace una clase diferente
Python Manizales - Jesse Padilla Agudelo 40

Python: Polimorfismo
A diferencia de Java y C++ el Polimorfismo en Python no es de gran importancia, dada su naturaleza de lenguaje dinmico. En Python no existe la sobrecarga de mtodos, el ultimo mtodo que se declare reemplazara a los anteriores, aunque se puede conseguir este comportamiento usando mtodos de # argumentos variable (*otros, **otros)
Python Manizales - Jesse Padilla Agudelo 41

Encapsulacin
Para proteger a las variables de modificaciones no deseadas se introduce el concepto de encapsulacin. Los miembros de una clase se pueden dividir en pblicos y privados. Los miembros pblicos son aquellos a los que se puede acceder libremente desde fuera de la clase. Los miembros privados, por el contrario, solamente pueden ser accedidos por los mtodos de la propia clase.
Python Manizales - Jesse Padilla Agudelo 42

Encapsulacin
La Encapsulacin se consigue en otros lenguajes de programacin como Java y C++ utilizando modificadores de acceso que definen si cualquiera puede acceder a esa mtodo o atributo. En estos lenguajes tenemos los modificaciones: public -> hace visible los mtodos y atributos fuera de la clase. private -> hace que los mtodos y atributos solo sean accesibles por mtodos dentro de la clase.
Python Manizales - Jesse Padilla Agudelo 43

Python: Encapsulacin
En Python no existen los modificadores de acceso. El acceso a una atributo o a los mtodos viene determinado por su nombre: si el nombre comienza con dos guiones bajos (y no termina tambin con dos guiones bajos) se trata de una atributo o mtodo privada, si no es asi estos son pblicos.
Python Manizales - Jesse Padilla Agudelo 44

Python: Encapsulacin

Python Manizales - Jesse Padilla Agudelo

45

Python: Clases de Nuevo Estilo


La ramas 2.x de Python tiene dos tipos de clases, las de estilo viejo y las de estilo nuevo conviviendo. Las de estilo viejo siguen exactamente el mismo modelo que cualquier programador de cualquier versin anterior debera conocer. Todas las caractersticas que se explicarn a continuacin se aplican slo a las clases de estilo nuevo. Eventualmente se dejarn de soportar las clases de estilo viejo, en Python 3.0
Python Manizales - Jesse Padilla Agudelo 46

Python: Clases de Nuevo Estilo


Cmo se define una clase de estilo nuevo? Se hace heredando de una clase existente. La mayora de los tipos internos de Python, como enteros, listas, diccionarios, e incluso archivos son ahora clases de estilo nuevo. Hay adems una clase de estilo nuevo llamada 'object' que se convierte en la clase base para todos los tipos internos, de modo que si no queremos heredar de un nuevo tipo interno se puede heredar de este: class MiClase(object):
def __init__(self): pass
Python Manizales - Jesse Padilla Agudelo 47

Preguntas

Python Manizales - Jesse Padilla Agudelo

48

Referencias
Python para todos, Ral Gonzlez Duque Inmersin en Python, MARK PILGRIM FRANCISCO CALLEGO RICARDO CRDENAS. Aprenda a Pensar Como un Programador con Python, ALLEN DOWNEY - JEREY ELKNER CHIRIS MEYER

Python Manizales - Jesse Padilla Agudelo

49

Enlaces
www.python.org http://es.wikipedia.org/wiki/Programaci%C3%B3 n_orientada_a_objetos http://www.python.org/doc/2.5.2/ref/numerictypes.html http://blog.rvburke.com/2006/11/22/programaci on-orientada-a-objetos-en-python/ http://www.freenetpages.co.uk/hp/alan.gauld/sp anish/tutclass.htm http://juanjoalvarez.net/?q=cambiospython
Python Manizales - Jesse Padilla Agudelo 50

Python Manizales - Jesse Padilla Agudelo

51

También podría gustarte