Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Definimos Persona:
class Persona(object):
"Constructor de Persona"
self.identificacion = identificacion
self.nombre = nombre
self.apellido = apellido
def __str__(self):
Class AlumnoFIUBA(Persona):
"Constructor de AlumnoFIUBA"
self.padron = padron
Probamos la nueva clase:
>>> print a
def __str__(self):
>>> print a
La clase base:
class Figura(object):
def area(self):
pass
Los crculos:
class Circulo(Figura):
self.radio = radio
def area(self):
class Triangulo(Figura):
self.base = base
self.altura = altura
def area(self):
>>> c = Circulo(4)
>>> c.area()
50.26548245743669
>>>
>>> t = Triangulo(3, 5)
>>> t.area()
Polimorfismo
El concepto de polimorfismo (del griego muchas formas) implica que si en una
porcin de cdigo se invoca un determinado mtodo de un objeto, podrn
obtenerse distintos resultados segn la clase del objeto. Esto se debe a que
distintos objetos pueden tener un mtodo con un mismo nombre, pero que
realice distintas operaciones.
Se vio, por ejemplo, que es posible recorrer cualquier tipo de secuencia (ya sea
una lista, una tupla, un diccionario, un archivo o cualquier otro tipo de
secuencia) utilizando la misma estructura de cdigo (for elemento in
secuencia).
De la misma forma, hemos utilizado funciones que podan trabajar con los
distintos tipos numricos sin hacer distincin sobre de qu tipo de nmero se
trataba (entero, real, largo o complejo).
Por otro lado, en la unidad anterior se vio tambin que al construir una clase, es
posible incluir el mtodo __str__ para que cuando se quiera imprimir el objeto
se lo haga de la forma deseada; as como una gran variedad de otros mtodos
especiales, que permiten que operadores comunes sean utilizados sobre
distintos tipos de objetos.
Interfaz
Llamamos interfaz a un conjunto de funciones, mtodos o atributos con
nombres especficos. Una interfaz es un contrato entre el programador que
realiza una clase y el que la utiliza, puede consistir en uno solo o varios
mtodos o atributos.
Por ejemplo, para que un objeto se pueda comparar con otros, debe cumplir
con la interfaz comparable, que en Python implica incluir el
mtodo __cmp__ visto en la unidad anterior.
Redefinicin de mtodos
Llamamos redefinicin a la accin de definir un mtodo con el mismo nombre
en distintas clases, de forma tal que provea una interfaz.
Un ejemplo de polimorfismo
En la unidad anterior se vio la clase Punto que representa a un punto en el
plano. Es posible definir tambin una clase Punto3D, que represente un punto
en el espacio. Esta nueva clase contendr los mismos mtodos que se vieron
para Punto, pero para tres coordenadas.
def obtener_versor(punto):
norma = punto.norma()
def frecuencias(secuencia):
la secuencia recibida.
"""
frec = dict()
# recorre la secuencia
frec[elemento] = frec.get(elemento, 0) + 1
return frec
Vemos que el parmetro secuencia puede ser de cualquier tipo que se
encuentre dentro de la "familia" de las secuencias. En cambio, si llamamos a la
funcin con un entero se levanta una excepcin.
>>> frecuencias((1,3,4,2,3,1))
{1: 2, 2: 1, 3: 2, 4: 1}
>>> frecuencias(ran)
{9: 1, 3: 1, 5: 1, 7: 1}
>>> frecuencias(4)
frecuencias(4)
for v in seq:
Delegacin
Llamamos delegacin a la situacin en la que una clase contiene (como
atributos) una o ms instancias de otra clase, a las que delegar parte de sus
funcionalidades. Esta relacin entre clases suele ser la ms indicada cuando es
necesaria una asociacin entre las clases pero el principio de Liskov no se
cumple. Tambin puede verse como la relacin entre clases "S contiene a T".
Por ejemplo, Vehculo contiene un Motor, pero Alumno no contiene a Persona,
sino que es una Persona.
Por ejemplo, la clase Hotel vista en la unidad anterior, podra contener una
clase Disponibilidad, que almacene la disponibilidad de las habitaciones del
hotel para distintas fechas. La clase Hotel debera tener, entonces, los
mtodos consultar_disponibilidad, reservar y cancelar, que todos
delegaran en la clase Disponibilidad su funcionamiento principal.
Delegacin y Referencias
Queremos construir una clase Rectangulo, que se describe mediante los
siguientes atributos:
#! /usr/bin/env python
#encoding: latin1
self.base = base
self.altura = altura
self.origen = origen
def area(self):
def __str__(self):
>>> print r
>>> r.trasladar(2,4)
>>> print r
>>> q = Punto(7,2)
>>> r.origen = q
>>> print r
Resumen
Se llama polimorfismo a la posibilidad de obtener distintos
comportamientos mediante la invocacin a mtodos de un mismo nombre,
pero de clases distintas.