UNIDAD II
Lenguajes Imperativos
Profesor Miguel Cantillana
INS240 – Lenguajes de Programación
Ingeniería en Computación e Informática
Semestre 2017-1
Orientada a objetos con Python II
Sobre carga de métodos
- C++ y Java admiten la sobrecarga de funciones por lista de argumentos, es decir, una clase puede tener varios métodos con el mismo nombre, pero con argumentos en distinta cantidad, o de distinto tipo.
- Python no admite sobrecarga de funciones.
- Los métodos se definen sólo por su nombre y hay un único método por clase con un nombre dado.
- De manera que si una clase sucesora tiene un método __init__, siempre sustituye al método __init__ de su clase padre, incluso si éste lo define con una lista de argumentos diferentes. Y se aplica lo mismo a cualquier otro método
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 número de usos diferentes, y el compilador decide cómo usar ese operador dependiendo sobre qué opera.
Sobre carga de operadores
- __add__( self, other) -> Oper. Suma
- __sub__( self, other) -> Oper. Resta
- __mul__( self, other) -> Oper. Multiplicacion
- __rmul__( self, other) -> Oper. Multi. Por Escalar
- __floordiv__( self, other) -> Oper. division Redondeo
- __mod__( self, other) -> Oper. modulo
- __divmod__( self, other) -> Oper. division
- __pow__( self, other[, modulo]) -> Oper. Potencia
- __and__( self, other) -> Oper. and
- __xor__( self, other) -> Oper. xor
- __or__( self, other) -> Oper. or
Sobre carga de operadores
import math
class Complejo:
def __init__(self, real, imaginario):
self.real = real
self.img = imaginario
def abs(self):
print math.sqrt((self.real*self.real)+(self.img*self.img))
def __add__(self, otro):
return Complejo(self.real + otro.real, self.img + otro.img)
def __sub__(self, otro):
return Complejo(self.real + otro.real, self.img + otro.img)
def mostrar(self):
print self.real, self.img
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 añadiendo otras nuevas.
- La nueva clase obtenida se conoce como clase derivada, y las clases a partir de las cuales se deriva, clases base. Además, cada clase derivada puede usarse como clase base para obtener una nueva clase derivada.
Herencia
- Definición de una clase heredada en Python.
class Instrumento:
pass
class Guitarra(Instrumento):
pass
class Bajo(Instrumento):
pass
Herencia: El Método __init__
Cuando creamos una clase derivada a partir de una clase padre y tenemos que la clase derivada proporciona o requiere su propio método __init__ , este método de la clase derivada debe llamar explícitamente el método __init__ de la clase base.
Herencia: __init__
class Animal:
def __init__(self):
print "Animal creado"
def quien_soy(self):
print "Animal"
def comer(self):
print "Estoy comiendo"
class Perro(Animal):
def __init__(self):
Animal.__init__(self)
print "Perro creado"
def quien_soy(self):
print "perro"
def ladrar(self):
print "woof woof<!"
Herencia Múltiple
class Acuatico:
pass
class Terrestre:
pass
class Anfibio(Acuatico, Terrestre):
pass
Polimorfismo
En programación orientada a objetos se denomina polimorfismo a la capacidad que tienen los objetos de una clase de responder al mismo mensaje o evento en función de los parámetros utilizados durante su invocación.
Un objeto polimórfico es una entidad que puede contener valores de diferentes tipos durante la ejecución del programa. (wikipedia)
Polimorfismo
El polimorfismo es el proceso de la utilización de un operador o función de diferentes formas para diferentes datos de entrada. En términos prácticos, 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
Polimorfismo
- A diferencia de Java y C++ el Polimorfismo en Python no es de gran importancia, dada su naturaleza de lenguaje dinámico.
- En Python no existe la sobrecarga de métodos, el ultimo método que se declare reemplazara a los anteriores, aunque se puede conseguir este comportamiento usando métodos de argumentos variable (*otros, **otros)
Ejercicio en clases
Papel, Boligrafo, Marcador
- Escribir una clase Papel que contenga un texto, un método escribir, que reciba una cadena para agregar al texto (concatenar), y el método __str__ que imprima el contenido del texto.
- Escribir una clase Boligrafo que contenga una cantidad de tinta, y un método escribir, que reciba un texto y un papel sobre el cual escribir. Cada letra escrita debe reducir la cantidad de tinta contenida. Cuando la tinta se acabe, debe lanzar una excepción.
- Escribir una clase Marcador que herede de Boligrafo, y agregue el método recargar, que reciba la cantidad de tinta a agregar.
UNAB: LP09
By Miguel Cantillana
UNAB: LP09
Clase 9
- 403