Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Parte II
Herencia
Jhonny Felípez Andrade
Contenido
Herencia
Ejemplos
Polimorfismo
Ejemplo
Polimorfismo en tiempo de ejecución
Ejemplos
Herencia Múltiple
Ejemplos
Clase Abstracta
Ejemplo
HERENCIA
¿Qué es la herencia?
4
La herencia es un principio de la
Programación Orientada a Objetos que
permite que una clase adquiera
propiedades y comportamientos de otra
clase padre. La clase hija hereda todos
los atributos y métodos de la clase
padre, lo que puede ahorrar tiempo y
esfuerzo en la implementación de
nuevas clases.
5
Herencia
CLASE
SUBCLASE
Una subclase es una clase que esta basada en otra clase. Esta
hereda los atributos de la clase. Esta también puede incluir
nuevos atributos.
Herencia
class Cliente:
nombre = ""
numero_cuenta = 0
class Cliente_Preferido:
nombre = ""
numero_cuenta = 0
tipo_de_cuenta = ""
Herencia
Clase
Subclase Subclase
Persona
es-una es-una
Empleado Cliente
Figura
es-una es-una
Circulo Triangulo
Ejercicios
Vehículo
es-un es-un
Coche Avión
class Vehiculo:
def __init__(self, s=None): # Constructor
print("Constructor de Vehículo...",s)
def iniciar(self):
print("Arranca...") La clase Coche “hereda” de la
class Coche(Vehiculo): clase Vehiculo
def __init__(self, s=None): # Constructor
super().__init__(s)
print("Constructor de Coche...", s)
def conducir(self):
print("Conduce...")
c1 = Coche()
c1.iniciar()
Llama a un método de la
c1.conducir()
superclase
c2 = Coche("dos")
c2.iniciar()
c2.conducir()
Constructor de Vehículo...
Constructor de Coche...
Arranca...
Conduce...
Constructor de Vehículo... dos
Constructor de Coche... dos
Arranca...
Conduce...
16
POLIMORFISMO
17
Si se tiene diferentes objetos y se tiene
que realizar las mismas acciones con
estos objetos.
19
Polimorfismo
método
2, 3 5
20
EJEMPLO
Ejemplo de Herencia
Figura
es-un es-un
Circulo Cuadrado
import math
class Figura:
def area(self): La clase Circulo tiene 3 métodos:
pass __init__, area y perimetro
def perimetro(self):
pass
class Circulo(Figura):
Se sobrescribe o sobrecarga
def __init__(self, radio):
self.radio = radio el método area
def area(self):
return math.pi * self.radio ** 2
def perimetro(self):
return 2 * math.pi * self.radio
class Cuadrado(Figura):
def __init__(self, lado):
self.lado = lado
def area(self):
return self.lado ** 2 Se sobrescribe o sobrecarga
def perimetro(self): el método perimetro
return 4 * self.lado
23
Ejemplo de Salida
circulo = Circulo(5)
cuadrado = Cuadrado(6)
print(circulo.area())
print(cuadrado.area())
78.53981633974483
36
24
Se tiene dos subclases que heredan de la
clase "Figura" y definen su propia
implementación de los métodos "area" y
"perimetro", pero utilizando la misma interfaz
que la clase base. Esto significa que todas las
subclases pueden ser tratadas como objetos
de la clase "Figura", lo que nos permite utilizar
el polimorfismo.
Se puede crear diferentes objetos de las dos
subclases y llamar a sus métodos "area" y
"perimetro" de la misma manera, aunque su
implementación es diferente.
25
POLIMORFISMO EN TIEMPO
DE EJECUCIÓN
26
Polimorfismo
29
class Rectangulo (Figura):
base = 0.0
altura = 0.0
def __init__(self, base, altura, color):
super().__init__(color)
self.base = base
self.altura = altura
def getArea(self):
return self.base * self.altura
30
def despliegaObjeto(f):
print(f.__str__())
31
Ejemplo de Salida
Circulo [radio= 2]
Figura [color=Azul]
32
import math
class Figura:
color = ""
def __init__(self, c):
self.color = c
def getColor(self):
return self.color
def __str__(self):
return "Figura [color={}]".format(self.color)
class Circulo (Figura):
radio = 0.0
def __init__(self, radio, color):
super().__init__(color)
self.radio = radio
def getArea(self):
return math.pi * self.radio * self.radio
def __str__(self):
return "Circulo [radio= {}]".format(self.radio)
33
class Rectangulo (Figura):
base = 0.0
altura = 0.0
def __init__(self, base, altura, color):
super().__init__(color)
self.base = base
self.altura = altura
def getArea(self):
return self.base * self.altura
34
figuras = [0] * 2
figuras[0] = Circulo(2, "Rojo")
figuras[1] = Rectangulo(2, 3, "Azul")
for i in range(len(figuras)):
print(figuras[i].__str__())
35
Ejemplo de Salida
Circulo [radio= 2]
Figura [color=Azul]
36
HERENCIA MÚLTIPLE
¿Qué es la herencia múltiple?
38
La herencia múltiple en programación
orientada a objetos se refiere a la
capacidad de una clase de heredar
atributos y métodos de múltiples clases
padre. Esto permite a una clase
derivada heredar y combinar
características de varias clases
diferentes.
39
¿Cómo heredar una clase a
partir de dos clases?
40
EJEMPLOS
Ejemplo de Herencia
Múltiple
Empleado
es-un es-un
Vendedor Gerente
es-un
es-un
Gerente
de ventas
Ejemplo de Herencia
Múltiple
Empleado
es-un es-un
Ingeniero Secretario
es-un
es-un
Secretario
Técnico
Ejemplo de Herencia
Múltiple
Persona
es-una es-una
Profesor Autor
es-un
es-un
Profesor
Autor
Ejemplo de Herencia
Múltiple
Persona
es-una es-una
Empleado Estudiante
es-un
es-un
Estudiante
Trabajador
class Persona:
def __init__(self, nombre):
self.nombre = nombre La clase Empleador “hereda” de
class Empleador(Persona): la clase Persona
def __init__(self, nombre, salario):
Persona.__init__(self, nombre) Utiliza el atributo de la
self.salario = salario superclase
def __str__(self):
return self.nombre + " Salario: " + str(self.salario)
class Estudiante(Persona):
def __init__(self, identificacion, nota):
self.identificacion = identificacion
self.nota = nota
def __str__(self):
return " Id: " + str(self.identificacion) + " Nota: " + str(self.nota)
class EstudianteTrabajador(Empleador, Estudiante):
def __init__(self, nombre, identificacion, nota, salario):
Empleador.__init__(self, nombre, salario)
Estudiante.__init__(self, identificacion, nota)
def __str__(self):
return Empleador.__str__(self) + " " + Estudiante.__str__(self)
et = EstudianteTrabajador("Juan",55555,100, 2000)
print(et)
46
Ejemplo de Salida
47
CLASE ABSTRACTA
¿Cómo obligar a una subclase para que
sobre escriba todos los métodos
definidos en una superclase?
Clases Abstractas
53
Ejemplo de Salida
Area = 78.53981633974483
Area = 6
54
Bibliografía
https://docs.python.org/3/tutorial/class
es.html?highlight=classes
https://docs.python.org/es/dev/library/
abc.html
55
GRACIAS