Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Aedii S11

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 30

Foro Antes de clase

Preguntas y respuestas (del video):


1. ¿? …

Código Python
1. ¿? ..

Saberes previos:
1. ¿Qué es la herencia?
2. ¿Qué es la clase base?
3. ¿ En que consiste la herencia simple?
4. ¿Que es el Method Overriding?
5. ¿ En que consiste la herencia múltiple?
6. ¿Qué es el Método de Resolución de Orden?
Algoritmos y Estructuras de Datos II

Semana 11. Sesión 1:


Herencia simple y múltiple

Profesor
Mag. Ing. José Carlos Benítez Palacios
LOGRO DE LA SESIÓN
Al finalizar la sesión el estudiante utiliza las relaciones de
herencia entre las clases del lenguaje Python en la solución de
problemas para su trabajo de laboratorio.
CONTENIDO:
1. Herencia
2. Clase base
3. Herencia simple
4. Method Overriding
5. Herencia múltiple
6. Método de resolución de orden
7. Ejercicios
8. Foro Hoy aprendí…
9. Foro Después de clase
1. Herencia
La herencia es una de las premisas y técnicas de la POO la cual permite a los
programadores crear una clase general primero y luego más tarde crear clases más
especializadas que re-utilicen código de la clase general.
La herencia también le permite escribir un código más limpio y legible.
La herencia es un proceso mediante el cual se puede crear una clase hija que hereda
de una clase padre, compartiendo sus métodos y atributos. Además de ello, una
clase hija puede sobreescribir los métodos o atributos, o incluso definir unos nuevos.
Se puede crear una clase hija con tan solo pasar como parámetro la clase de la que
queremos heredar.
La herencia es una característica poderosa en la programación orientada a objetos.
Se refiere a definir una nueva clase con poca o ninguna modificación a una clase
existente. La nueva clase se denomina clase derivada(o secundaria) y la clase de la
que se hereda se denomina clase base(o principal).
2. Clase base

Clase Base o también


conocida como Clase
abstracta le permite definir
una clase que puede
heredarse en otras clases
los atributos y
comportamientos definido
en esta.
3. Herencia simple

Sintaxis de herencia de Python


La clase derivada hereda características de la clase base, agregándole
nuevas características. Esto resulta en la reutilización del código.
3. Herencia simple
Ejemplo de herencia
Para demostrar el uso de la herencia, tomemos un ejemplo.
Un polígono es una figura cerrada con 3 o más lados. Digamos que
tenemos una clase llamada Polígono definida de la siguiente manera.
3. Herencia simple

Esta clase tiene atributos de datos para almacenar el número de lados, y


la magnitud n de cada lado como una lista, lados.
El método inputSides() toma la magnitud de cada lado y, de manera
similar, dispSides() los mostrará correctamente.
Un triángulo es un polígono con 3 lados. Entonces, podemos crear una
clase llamada Triángulo que se hereda de Polígono. Esto hace que todos
los atributos disponibles en la clase Polígono estén disponibles en
Triángulo. No necesitamos definirlos de nuevo(reutilización del código).
Triángulo se define de la siguiente manera.
3. Herencia simple
3. Herencia simple
Sin embargo, la clase Triangle tiene un nuevo método findArea() para encontrar
e imprimir el área del triángulo. Aquí hay una muestra de su ejecución.

Podemos ver que, aunque no


definimos métodos como
inputSides() o dispSides()
para la clase Triangle,
pudimos usarlos.
Si no se encuentra un
atributo en la clase, la
búsqueda continúa a la clase
base. Esto se repite
recursivamente, si la clase
base se deriva de otras clases.
4. Method Overriding
En el ejemplo anterior, observe que el método __init __() se definió en
ambas clases, Triángulo y Polígono. Cuando esto sucede, el método en la
clase derivada anula eso en la clase base. Es decir, __init __() en Triangle
obtiene preferencia sobre Polygon.
Generalmente cuando se reemplaza un método base, tendemos a
extender la definición en lugar de simplemente reemplazarla. Lo mismo se
está haciendo llamando al método en la clase base desde el de la clase
derivada(llamando a Polygon .__ init __() desde __init __() en Triángulo).
Una mejor opción sería utilizar la función incorporada super(). Entonces,
super() .__ init __(3) es equivalente a Polygon .__ init __(self, 3) y se prefiere.
Dos funciones incorporadas isinstance() y issubclass() se usan para
verificar las herencias. La función isinstance() devuelve True si el objeto
es una instancia de la clase u otras clases derivadas de ella. Cada clase en
Python hereda del objeto de clase base.
4. Method Overriding

De manera similar,
issubclass() se usa
para verificar la
herencia de clase.
5. Herencia múltiple

Al igual que C ++, una clase puede


derivarse de más de una clase base en
Python. Esto se llama herencia
múltiple.
En la herencia múltiple, las
características de todas las clases
base se heredan en la clase derivada.
La sintaxis para la herencia múltiple
es similar a la herencia simple.
Ejemplo:
MultiDerived se deriva de las clases
Base1 y Base2.
6. Herencia multinivel
Por otro lado, también podemos heredar
de una clase derivada. Esto se llama
herencia multinivel. Puede ser de cualquier
profundidad en Python.
En la herencia multinivel, las características
de la clase base y la clase derivada se
heredan en la nueva clase derivada.
A continuación se muestra un ejemplo con
la visualización correspondiente.
Aquí, Derived1 se deriva de Base, y
Derived2 se deriva de Derived1.
7. Método de resolución de orden

Cada clase en Python se deriva del


objeto de clase. Es el tipo más básico
en Python.
Así que técnicamente, todas las
demás clases, ya sean integradas o
definidas por el usuario, son clases
derivadas y todos los objetos son
instancias de la clase de objeto.
7. Método de resolución de orden

En el escenario de herencia múltiple, cualquier atributo


especificado se busca primero en la clase actual. Si no se
encuentra, la búsqueda continúa en clases primarias en
profundidad, de izquierda a derecha, sin buscar la misma clase
dos veces.
Por lo tanto, en el ejemplo anterior de la clase MultiDerived el
orden de búsqueda es [MultiDerived, Base1, Base2, object]. Este
orden también se denomina linealización de la clase
MultiDerived y el conjunto de reglas que se utiliza para
encontrar este orden se denomina Orden de resolución de
métodos(MRO).
7. Método de resolución de orden

El MRO debe evitar el orden local de


precedencia y también proporcionar
monotonicidad. Asegura que una
clase siempre aparezca antes que sus
padres y, en el caso de varios padres,
el orden es el mismo que la tupla de
clases base.
El MRO de una clase puede verse
como el atributo __mro__ o el método
mro(). El primero devuelve una tupla
mientras que el segundo devuelve
una lista.
7. Método de resolución de orden

Aquí hay un ejemplo de


herencia múltiple un
poco más complejo y su
visualización junto con
el MRO
8. Ejercicios

1. Escribir dos o más clases en python lógicamente relacionadas


con la relación de herencia simple que resuelvan un problema.
2. Escribir dos o más clases en python lógicamente relacionadas
con la relación de herencia múltiple que resuelvan un
problema.
3. Escribir dos o más clases en python lógicamente relacionadas
con la relación de herencia multinivel que resuelvan un
problema.
4. Escribir dos o más clases en python lógicamente relacionadas
con la relación de herencia múltiple y utilice las funciones de
herencia que resuelvan un problema.
8. Ejercicios

5. Dada una clase Persona que contenga dos atributos: nombre y edad.
Definir como responsabilidades la carga por teclado y su impresión.
En el bloque principal del programa definir un objeto de la clase
persona y llamar a sus métodos. Definir una segunda clase llamada
Empleado que herede de la clase Persona y agregue un atributo
sueldo y muestre si debe pagar impuestos (sueldo superior a 3000).
En el bloque principal del programa crear un objeto de la clase
Empleado. Realizar las consultas necesarias de uso del programa.
8. Ejercicios
6. Implementar dos clases Suma y Resta. Cada clase tiene como atributo valor1,
valor2 y resultado. Los métodos a definir son cargar1 (que inicializa el atributo
valor1), carga2 (que inicializa el atributo valor2), operar (que en el caso de la
clase "Suma" suma los dos atributos y en el caso de la clase "Resta" hace la
diferencia entre valor1 y valor2), y otro método mostrar_resultado.
Analizando ambas clases encontramos que muchos atributos y métodos son
idénticos. En estos casos es bueno definir una clase padre que agrupe dichos
atributos y responsabilidades comunes. La relación de herencia que podemos
disponer para este problema es: Operacion: Suma, Resta. Solamente el
método operar es distinto para las clases Suma y Resta (esto hace que no lo
podamos disponer en la clase Operacion en principio), luego los métodos
cargar1, cargar2 y mostrar_resultado son idénticos a las dos clases, esto
hace que podamos disponerlos en la clase Operacion. Lo mismo los atributos
valor1, valor2 y resultado se definirán en la clase padre Operacion.
Realizar las consultas necesarias de uso del programa.
8. Ejercicios

7. Definir una clase Cuenta y dos subclases CajaAhorra y


PlazoFijo. Definir los atributos y métodos comunes entre una caja
de ahorro y un plazo fijo y agruparlos en la clase Cuenta.
Una caja de ahorro y un plazo fijo tienen un nombre de titular y
un monto. Un plazo fijo añade un plazo de imposición en días y
una tasa de interés. Hacer que la caja de ahorro no genera
intereses. En el bloque principal del programa definir un objeto
de la clase CajaAhorro y otro de la clase PlazoFijo.
Realizar las consultas necesarias de uso del programa.
HOY APRENDIMOS:
▪ …

Foro: Responder en el Foro Hoy aprendí …


10. Foro Después de clase
(desarrollado en equipo con presentación individual)
Desarrollar los ejercicios planteados en clase.
El Coordinador del equipo debe responder al Foro con todos los trabajos
“completos” de sus compañeros (Sx_pz_PaternoM.py) de equipo en una
carpeta (Sx_EquipoY), la que comprimirá y entregará en el Foro.
Nombres de archivos de integrante del código python:
Sx_pz_PaternoM.py, x: número de semana, z: número de la pregunta.
Nombre de la carpeta:
Sx_EquipoY Y es el número del equipo,
Nombre de la carpeta comprimida a adjuntar en el Foro: Sx_EquipoY.rar
NOTA: Las tareas vencen una hora antes de la siguiente clase de la
próxima semana.

También podría gustarte