Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Presentado por:
2
Practica N°04: Herencia y Polimorfismo
RECONOCIMIENTOS
PALABRAS CLAVE
Clases
Clase Padre
Clase Hija
Herencia
Herencia Simple
Herencia Múltiple
Polimorfismo
3
Practica N°04: Herencia y Polimorfismo
ÍNDICE
1. RESUMEN …………………………………………………………………………………5
2. INTRODUCCIÓN .................................................................................................................. 5
3. EXPERIENCIAS DE PRÁCTICA
3.1 HERENCIA SIMPLE ................................................................................................... 6
3.2 HERENCIA MÚLTIPLE............................................................................................ 10
3.3 CREACIÓN DE CLASES POLIMÓRFICAS .......................................................... 111
3.4 POLIMORFISMO CON MÉTODOS DE CLASE ................................................... 133
3.5 POLIMORFISMO CON UNA FUNCIÓN............................................................... 155
4. CONCLUSIONES DE LA PRÁCTICA: ........................................................................... 166
5. EJERCICIOS
5.1 .................................................................................................................................... 16
5.2 .................................................................................................................................... 18
5.3 .................................................................................................................................. 118
5.4 .................................................................................................................................. 139
5.5 .................................................................................................................................... 20
5.6 .................................................................................................................................. 213
6. CONCLUSIONES DE LOS EJERCICIOS: ......................................................................... 23
7. CUESTIONARIO ................................................................................................................. 23
8. BIBLIOGRAFÍA .................................................................................................................. 27
4
Practica N°04: Herencia y Polimorfismo
1. RESUMEN
En nuestra primera práctica nosotros hemos desarrollado código para aprender sobre
la utilización de tipos de datos agregados por el usuario basados en estructuras y
clases, de la misma forma que hemos podido aprender la forma como se construyen
arreglos de objetos del tipo de estructuras y clases, las estructuras que estamos
trabajando en archivos binarios, persistencia de datos a partir del ingreso de
información a un programa convencional.
2. INTRODUCCIÓN
La potencia de las computadoras nos permite a nosotros manejar grandes volúmenes
de información procesarlos y obtener herramientas que nos permitan tomar decisiones
a futuro, el procesamiento de información es posible a través del acopio de grandes
volúmenes de datos, y posteriormente vamos
5
Practica N°04: Herencia y Polimorfismo
3. ACTIVIDADES
import math
class Padre:
def __init__(self):
self.x = 8
print("Constructor clase padre")
print("Esta clase posee un atributo llamado 'x'")
def metodo(self):
print("Ejecutando el método de la clase padre")
print("La suma de 8 y 5 es:",8+5)
class Hija(Padre):
def metHija(self):
print("Método de la clase hija")
print("La raíz cuadrada de 25 es:",math.sqrt(25))
Ana=Hija()
Ana.metodo()
Ana.metHija()
Ejecución:
6
Practica N°04: Herencia y Polimorfismo
class Padre:
def __init__(self):
self.x = 8
print("Constructor clase padre")
print("Esta clase posee un atributo llamado 'x'")
def metodo(self):
print("Ejecutando el método de la clase padre")
class Hija(Padre):
def __init__(self):
print("Constructor de la clase hija")
print("Esta clase no posee ningún atributo, pero lo hereda de su
clase padre")
def metHija(self):
print("Método de la clase hija")
Maria=Hija()
Maria.x=100
print("El atributo 'x' ahora será",Maria.x)
Maria.metodo()
Maria.metHija()
Ejecución:
7
Practica N°04: Herencia y Polimorfismo
Clases hijas:
En este código apreciar que una clase padre puede poseer varias clases hijas,
que heredan tanto sus atributos como sus métodos.
class Vehiculo:
n_ruedas = 2
def __init__(self,marca,modelo,placa):
self.marca = marca
self.modelo = modelo
self.placa=placa
def mostrarDatos(self):
print("Marca:",self.marca,"\nModelo:",self.modelo,"\nPlaca:"
,self.placa)
def acelerar(self):
print("Método acelerar")
print("Brm - Brm")
print("Máxima potencia")
def frenar(self):
print("Método frenar")
print("ZzzzZ")
class Moto(Vehiculo):
pass
class Coche(Vehiculo):
pass
C1=Coche("Lamborghini","URUS","1F3-567")
C1.n_ruedas=4
C1.mostrarDatos()
C1.frenar()
C1.acelerar()
print("El coche tiene",C1.n_ruedas,"ruedas\n")
M1=Moto("Suzuki","GSX-S1000GT 2022","4M3-123")
M1.n_ruedas=2
M1.mostrarDatos()
M1.acelerar()
M1.frenar()
print("La moto tiene",M1.n_ruedas,"ruedas")
8
Practica N°04: Herencia y Polimorfismo
Ejecución:
Marca: Lamborghini
Modelo: URUS
Placa: 1F3-567
Método frenar
ZzzzZ
Método acelerar
Brm - Brm
Máxima potencia
El coche tiene 4 ruedas
Marca: Suzuki
Modelo: GSX-S1000GT 2022
Placa: 4M3-123
Método acelerar
Brm - Brm
Máxima potencia
Método frenar
ZzzzZ
La moto tiene 2 ruedas
9
Practica N°04: Herencia y Polimorfismo
class Personal():
def trabajar(self):
print("Soy personal de la empresa")
class Mantenimiento(Persona,Personal):
def mostrarDatos(self):
print("Nombre:",self.nombre,"\nEdad:",self.edad,"\nSexo:",se
lf.sexo,"\nDNI:",self.dni)
def labor(self):
print("Trabajo en mantenimiento")
J1=Mantenimiento("Juan Rodriguez",35,"Masculino",12345678)
J1.hablar()
J1.trabajar()
J1.labor()
J1.mostrarDatos()
Ejecución:
10
Practica N°04: Herencia y Polimorfismo
class PezPayaso():
def __init__(self,nombre):
self.nombre=nombre
def nadar(self):
print("El pez payaso está nadando.")
print("El pez payaso se llama",self.nombre)
def nadarHaciaAtras(self):
print("El pez payaso puede nadar hacia atrás.")
def esqueleto(self):
print("El esqueleto del pez payaso está hecho de hueso.")
King=Tiburon("King")
King.nadar()
King.nadarHaciaAtras()
King.esqueleto()
print("")
Nemo=PezPayaso("Nemo")
Nemo.nadar()
Nemo.nadarHaciaAtras()
Nemo.esqueleto()
11
Practica N°04: Herencia y Polimorfismo
Ejecución:
12
Practica N°04: Herencia y Polimorfismo
class Tiburon():
def __init__(self,nombre):
self.nombre=nombre
def nadar(self):
print("El tiburón está nadando.")
print("El tiburon se llama",self.nombre)
def nadarHaciaAtras (self):
print("El tiburón no puede nadar hacia atrás, pero puede hun
dirse hacia atrás.")
def esqueleto(self):
print("El esqueleto del tiburón está hecho de cartílago.")
class PezPayaso():
def __init__(self,nombre):
self.nombre=nombre
def nadar(self):
print("El pez payaso está nadando.")
print("El pez payaso se llama",self.nombre)
def nadarHaciaAtras(self):
print("El pez payaso puede nadar hacia atrás.")
def esqueleto(self):
print("El esqueleto del pez payaso está hecho de hueso.")
King=Tiburon("King")
Nemo=PezPayaso("Nemo")
Jack=Tiburon("Jack")
for pez in [King,Nemo,Jack]:
pez.nadar()
pez.nadarHaciaAtras()
pez.esqueleto()
print("")
13
Practica N°04: Herencia y Polimorfismo
Ejecución:
14
Practica N°04: Herencia y Polimorfismo
class PezPayaso:
def __init__(self,nombre):
self.nombre=nombre
def respirar(self):
print("Puedo respirar bajo el agua y soy un pez también")
print("Hola mi soy un pez payaso y mi nombre es",self.nombre
,"\n")
class Persona:
def __init__(self,nombre):
self.nombre=nombre
def respirar(self):
print("No puedo respirar bajo el agua, no soy un pez")
print("Hola soy una persona y mi nombre es",self.nombre,"\n"
)
def funcion(Objeto):
Objeto.respirar()
King=PezEspada("King")
funcion(King)
Nemo=PezPayaso("Nemo")
funcion(Nemo)
Rodrigo=Persona("Rodrigo")
funcion(Rodrigo)
15
Practica N°04: Herencia y Polimorfismo
Ejecución:
4.2. Las actividades nos muestran todas las facilidades que nos brinda
Python para la creación de clases polimórficas, y la ejecución de sus
diferentes métodos.
16
Practica N°04: Herencia y Polimorfismo
5. EJERCICIOS:
#Ejercicio 1
class Material():
def __init__(self, Nombre, NumVol):
self.nombre=Nombre
self.NumVol=NumVol
def mostrar(self):
print(self.nombre, " ",self.NumVol)
class Revista(Material):
def __init__(self,NumRevistas):
self.NumRevistas=NumRevistas
def Mostrar(self):
print(self.NumRevistas)
class Libro(Material):
def __init__(self,numLibros):
self.NumLibros=numLibros
def mostrar(self):
print(self.NumLibros)
x=Revista(19)
x.nombre=("Vogue")
x.NumVol=5
x.Mostrar()
17
Practica N°04: Herencia y Polimorfismo
class Figura:
def __init__(self,lados):
self.lados=lados
self.set_vertices(lados)
def mostrar(self):
print("Soy una figura geométrica")
def get_vertices(self):
return self._vertices
def set_vertices(self,valor):
if valor > 2:
self._vertices = valor
vertices = property(get_vertices,set_vertices)
class Cuadrado(Figura):
def mostrar(self):
print("Hola soy un cuadrado, tengo",self.lados,"lados")
print("Tengo",self.get_vertices(),"vertices")
class Circulo(Figura):
def mostrar(self):
print("Hola soy un circulo, tengo",self.lados,"lados")
print("Tengo",self.get_vertices(),"vertices")
class Triangulo(Figura):
def mostrar(self):
print("Hola soy un triangulo, tengo",self.lados,"lados")
print("Tengo",self.get_vertices(),"vertices")
C1=Triangulo(3)
C1.mostrar()
5.3 A partir de una clase Persona (que contenga como atributos identificación,
nombre, apellido), construya la clase EstudianteIS que extiende a Persona y
agrega como atributo el semestre de matrícula. Use el método __init__() para
inicializar los objetos e investigue el método __str__() para devolver con formato
los datos de la persona cuando se imprima el objeto EstudianteIS. Cuando cree el
objeto EstudianteIS llame desde el método __init__() al constructor de la clase
Persona para enviar los datos de la persona.
18
Practica N°04: Herencia y Polimorfismo
class Persona():
def __init__(self,identificacion,nombre,apellido):
self.identificacion=identificacion
self.nombre=nombre
self.apellido=apellido
class EstudiantesIS(Persona):
def __init__(self,semestre_de_matricula,x):
self.semestre_de_matricula=semestre_de_matricula
self.x=Persona
def __str__(self):
return +self.nombre+" "+self.apellido+", con identificacion
" +
self.identificacion+" se encuentra en el semestre"+self.semestre_de_
matricula
5.4 Cree una clase Cliente que derive de la clase Persona definida en el ejercicio
anterior e incluya los siguientes atributos: dirección fiscal, código postal, estado.
Añada la operación __init__()
class Persona:
def __init__(self,identif,nombre,apellido):
self.identif=identif
self.nombre=nombre
self.apellido=apellido
class Cliente(Persona):
def __init__(self,identif,nombre,apellido,direccionF,codigoP,est
ado):
super().__init__(identif,nombre,apellido)
self.direccionF=direccionF
self.codigoP=codigoP
self.estado=estado
def __str__(self):
texto = "Nombre completo: "+self.nombre+" "+self.apellido+"\
nID: "+str(self.identif)
texto2 = "Dirección fiscal: "+self.direccionF+"\nCódigo post
al: "+self.codigoP+"\nEstado: "+self.estado
return texto+"\n"+texto2
19
Practica N°04: Herencia y Polimorfismo
5.5 Cree una clase Empleado que derive de la clase Persona e incluya los siguientes
atributos: Fecha ingreso, cargo, sueldo. Añada la operación __init__(). El sueldo
por defecto es 2500.
class Persona:
def __init__(self,identif,nombre,apellido):
self.identif=identif
self.nombre=nombre
self.apellido=apellido
class EstudiantesIS(Persona):
def __init__(self,identif,nombre,apellido,semestre):
super().__init__(identif,nombre,apellido)
self.semestre=semestre
def __str__(self):
texto = "Nombre completo: "+self.nombre+" "+self.apellido+"\nID:
"+str(self.identif)+"\nSemestre matriculado: "+self.semestre
return texto
class Cliente(Persona):
def __init__(self,identif,nombre,apellido,direccionF,codigoP,estado):
super().__init__(identif,nombre,apellido)
self.direccionF=direccionF
self.codigoP=codigoP
self.estado=estado
def __str__(self):
texto = "Nombre completo: "+self.nombre+" "+self.apellido+"\nID:
"+str(self.identif)
texto2 = "Dirección fiscal: "+self.direccionF+"\nCódigo postal: "
+self.codigoP+"\nEstado: "+self.estado
return texto+"\n"+texto2
class Empleado(Persona):
def __init__(self,identif,nombre,apellido,fechaI,cargo,sueldo=2500):
super().__init__(identif,nombre,apellido)
self.fechaI=fechaI
self.cargo=cargo
self.sueldo=sueldo
def mostrarDatos(self):
print("INFORMACIÓN DEL EMPLEADO")
print("Nombre:",self.nombre,self.apellido)
print("DNI:",self.identif)
print("Fecha de ingreso:",self.fechaI)
print("Cargo:",self.cargo)
print("Sueldo:",self.sueldo)
E1=Empleado(74278817,"Juan","Otto","15/11/2021","Cajero")
E1.mostrarDatos()
20
Practica N°04: Herencia y Polimorfismo
class Persona():
def __init__(self,identificacion,nombre,apellido):
self.identificacion=identificacion
self.nombre=nombre
self.apellido=apellido
def set_identificacion(self,identificacion):
self.identificacion=identificacion
def get_identificacion(self,identificacion):
print(self,identificacion)
def set_nombre(self,Nombre):
self.nombre=Nombre
def get_nombre(self):
print(self.nombre)
def set_apellido(self,apellido):
self.apellido=apellido
def get_apellido(self):
print(self.apellido)
def __str__(self):
return self.nombre+" "+self.apellido+", con identificacion "
+self.identificacion
class EstudiantesIS(Persona):
def __init__(self,semestre_de_matricula):
x=Persona
x.__init__
self.semestre_de_matricula=semestre_de_matricula
def set_semestre_de_matricula(self,semestre_de_matricula):
self.semestre_de_matricula=semestre_de_matricula
def get_semestre_de_matricula(self):
print(self.semestre_de_matricula)
def __str__(self):
return self.nombre+" "+self.apellido+", con identificacion "
+self.identificacion+" se encuentra en el" +self.semestre_de_matricu
la+"semestre"
class Cliente(Persona):
def __init__(self,direccion_fiscal,codigo_postal,estado):
self.direccion_fiscal=direccion_fiscal
self.codigo_postal=codigo_postal
self.estado=estado
def set_direccion_fiscal(self,direccion_fiscal):
self.direccion_fiscal=direccion_fiscal
def get_direccion_fiscal(self):
print(self.direccion_fiscal)
def set_codigo_postal(self, codigo_postal):
self.codigo_postal=codigo_postal
def get_codigo_postal(self):
21
print(self.codigo_postal)
def set_estado(self,estado):
self.estado=estado
def get_estado(self):
Practica N°04: Herencia y Polimorfismo
class Cliente(Persona):
def __init__(self,direccion_fiscal,codigo_postal,estado):
self.direccion_fiscal=direccion_fiscal
self.codigo_postal=codigo_postal
self.estado=estado
def set_direccion_fiscal(self,direccion_fiscal):
self.direccion_fiscal=direccion_fiscal
def get_direccion_fiscal(self):
print(self.direccion_fiscal)
def set_codigo_postal(self, codigo_postal):
self.codigo_postal=codigo_postal
def get_codigo_postal(self):
print(self.codigo_postal)
def set_estado(self,estado):
self.estado=estado
def get_estado(self):
print(self.estado)
def __del__(self):
del (self.direccion_fiscal, self.codigo_postal, self.estado)
def __str__(self):
return "Direccion Fiscal"+self.direccion_fiscal+"\n, El codi
go Postal es:"+self.codigo_postal+"\n, en el estado de"+self.estado
class Empleado(Persona):
def __init__(self,Fecha_ingreso,cargo,sueldo=2500):
self.fecha_ingreso=Fecha_ingreso
self.cargo=cargo
self.sueldo=sueldo
def set_fecha_ingreso(self,fecha_ingreso):
self.fecha_ingreso=fecha_ingreso
def get_fecha_ingreso(self):
print(self.fecha_ingreso)
def set_cargo(self,cargo):
self.cargo=cargo
def get_cargo(self):
print(self.cargo)
def set_sueldo(self,sueldo=2500):
self.sueldo=sueldo
def get_sueldo(self):
print(self.sueldo)
def __str__(self):
return self.nombre+" "+self.apellido+" \n, con la fecha de i
ngreso "+self.fecha_ingreso+"\n con el cargo de: "+self.cargo+"\n co
n el sueldo de: "+self.sueldo
C1=Persona(412342,"Juan","Carlos")
C2=EstudiantesIS("Cuarto")
C3=Cliente("Av. Arequipa",342342,"Perú")
C4=Empleado("28/09/2021","Empleado")
22
Practica N°04: Herencia y Polimorfismo
6.1. Ejercicio 1: Pudimos apreciar que gracias a esta clase "Figura" como clase
padre podemos asignar los lados de las figuras ahorrando celdas de código y
tiempo nuestro.
6.2. Ejercicio 2: Ahora en este se pudo apreciar al igual que en el anterior que se
puede ahorrar celdas de código para asignar nombre y el número de volumen
6.3. Ejercicio 3,4,5: En estos ejercicios se aprecian que las clases "EstudianteIS",
"Cliente" y "Empleado" ahorran celdas de código gracias a que heredan de la
clase "Persona" los atributos Nombre, Apellido, Identificacion y otros.
7. CUESTIONARIO
a) ¿Qué es la herencia?
La herencia permite que una clase se defina a partir de otra, esto comparte métodos
y los datos, además se pueden definir nuevos métodos o remplazar los ya
existentes.
23
Practica N°04: Herencia y Polimorfismo
class profesionales:
def _init_(self, especialidad, edad, nombre, dni):
self.especialidad = especialidad
self.edad = edad
self.nombre = nombre
self.dni = dni
def observar(self):
pass
def moverse(self):
pass
def describeme(self):
print("soy un ingeniero de sistemas y me llamo ", type(self)._name_)
class programador(profesionales):
def hablar(self):
print("hola")
def caminar(self):
print("Caminando")
Se le conoce como herencia múltiple cuando una clase hija hereda atributos de
varias clases en lugar de una.
24
Practica N°04: Herencia y Polimorfismo
def inseing(self):
opc=False
while opc==False:
self.capitulo=input("Ingrese capitulo: ")
opc=self.capitulo.isalpha()
while self.sueldo<0:
self.sueldo=int(input("Ingrse sueldo: "))
def mostrar(self):
print("El codigo ingresado es: ", obj.codigo)
print("El nombre ingresado es: ", obj.nombre)
print("El genero ingresado es: ", obj.genero)
print("El capitulo es: ", obj.capitulo)
print("El sueldo es: ", obj.sueldo,"\n")
# Rutina principal
obj=Ingenieros() # solo crea objeto de la subclase
lista=["\n1. Ingesar datos","2. Mostrar datos","3. FIN"]
for i in lista:
print(i)
opc=int(input("Escoger una opcion: (1-2-3): "))
while opc>=1 and opc<=2:
if opc==1:
print("\nIngrese datos")
obj.inseper() # obj puede usar metodo de la superclase Persona
obj.inseing() # obj puede usar metodo de la subclase Ingenieros
if opc==2:
print("\nMostrar datos")
obj.mostrar()
for i in lista:
print(i)
26
opc=int(input("Escoger una opción: (1-2-3): " ))
print ("Fin del programa")
Practica N°04: Herencia y Polimorfismo
j) ¿Qué es el polimorfismo?
Se le conoce como polimorfismo cuando se puede acceder a diferentes clases
desde el mismo interfaz
class Animal:
def hablar(self):
pass
class Perro(Animal):
def hablar(self):
print("Guau!")
class Gato(Animal):
def hablar(self):
print("Miau!")
for animal in Perro(), Gato():
animal.hablar()
8. BIBLIOGRAFÍA
1. Fernández Montoro, Arturo, "Python 3 al Descubierto", 2da Edición, Editorial
ALFAOMEGA, México, Año 2013.
2. Horstmann, Cay S., Necaise, Rance D. "Python for Everyone", 2nd Edition, John
Wiley & Sons, Inc., New Jersey, Año 2014.
3. Ascher, David, Lutz, Mark, "Learning Python", 2da Edición, O’Reilly Media,
Inc., Sebastopol, CA, Año 2003.
4. Barry, Paul, Griffiths, David, "Head First Programming", O’Reilly Media, Inc.,
Sebastopol, CA, Año 2009
27