Foro Antes de clase
Preguntas y respuestas (del video):
1. ¿? …
…
Código Python
1. ¿? ..
…
Saberes previos:
1. ¿Qué es la abstracción en POO?
2. ¿Qué son las clases abstractas en Python?
3. ¿Cuáles son las propiedades de las clases abstractas?
4. ¿Cómo se crean las clases abstractas en Python
5. ¿Por qué utilizar clases base abstractas?
6. ¿Cómo funcionan las clases abstractas?
Algoritmos y Estructuras de Datos II
Semana 12. Sesión 1:
Clases abstractas
Profesor
Mag. Ing. José Carlos Benítez Palacios
LOGRO DE LA SESIÓN
Al finalizar la sesión el estudiante utiliza las clases abstractas
del lenguaje Python en la solución de problemas para su trabajo
de laboratorio.
CONTENIDO:
1. Clases abstractas en Python
2. Propiedades de las clases abstractas
3. Creación de clases abstractas en Python
4. ¿Por qué utilizar clases base abstractas?
5. ¿Cómo funcionan las clases de Abstract Base?
6. Ejemplos
7. Ejercicios
8. Foro Hoy aprendí…
9. Foro Después de clase
1. Clases abstractas en Python
Un concepto importante en POO es el de las clases abstractas.
Las CA son unas clases en las que se pueden definir tanto métodos como
propiedades, pero que no pueden ser instanciadas directamente.
Solamente se pueden usar para construir subclases. Permitiendo así tener una única
implementación de los métodos compartidos, evitando la duplicación de código.
Una CA puede considerarse como un modelo para otras clases. Le permite crear un
conjunto de métodos que deben crearse dentro de las clases secundarias creadas a
partir de la CA.
Una clase que contiene uno o más métodos abstractos se llama CA.
Un método abstracto es un método que tiene una declaración pero no tiene una
implementación. Mientras diseñamos grandes unidades funcionales, usamos una
CA. Cuando queremos proporcionar una interfaz común para diferentes
implementaciones de un componente, usamos una CA.
2. Propiedades de las clases abstractas
▪ Las clases abstractas no puede ser instanciadas. Simplemente proporciona una
interfaz para las subclases derivadas y evitando así la duplicación de código.
▪ En las CA no es necesario que tengan una implementación de todos los métodos
necesarios. Pudiendo ser estos abstractos. Los métodos abstractos son aquellos
que solamente tienen una declaración, pero no una implementación detallada de
las funcionalidades.
▪ Las clases derivadas de las clases abstractas debe implementar necesariamente
todos los métodos abstractos para poder crear una clase que se ajuste a la
interfaz definida. En el caso de que no se defina alguno de los métodos no se
podrá crear la clase.
▪ Las CA define una interfaz común para las subclases. Proporciona atributos y
métodos comunes para todas las subclases evitando así la necesidad de duplicar
código. Imponiendo además lo métodos que deber ser implementados para evitar
inconsistencias entre las subclases.
3. Creación de clases abstractas en Python
Para poder crear una clase en Python e instanciarla:
3. Creación de clases abstractas en Python
Para poder crear CA en Python es necesario importar la clase ABC y el
decorador abstractmethod del modulo abc (Abstract Base Classes). Un
módulo que se encuentra en la librería estándar del lenguaje, por lo que no es
necesario instalar.
3. Creación de clases abstractas en Python
Para definir una clase privada
solamente se tiene que crear una
clase heredada de ABC con un
método abstracto.
Para invocar métodos de clases
abstractas no se necesita un método
abstracto para ser "totalmente
abstracto" en Python, que es
diferente con algún otro lenguaje de
POO. Podemos definir algunas cosas
comunes en un método abstracto y
usar las super() para invocarlas en
subclases.
3. Creación de clases abstractas en Python
Como se muestra en el ejemplo, el
método move abstracto puede
contener algunas funciones y puede
ser invocado por subclase usando
super().
Aunque tiene un poco de
implementación, sigue siendo un
método abstracto y tenemos que
implementarlo completamente en
subclases.
4. Por qué utilizar clases base abstractas
Al definir una clase base abstracta, puede definir una interfaz
de programa de aplicación(API) común para un conjunto de
subclases.
Esta capacidad es especialmente útil en situaciones en las que
un tercero proporcionará implementaciones, como con
complementos, pero también puede ayudarle cuando trabaja
en un equipo grande o con una base de código grande donde
es difícil mantener todas las clases en su mente, o no es
posible.
5. Cómo funcionan las clases de Abstract Base
De forma predeterminada, Python no proporciona clases abstractas.
Python viene con un módulo que proporciona la base para definir las clases
base abstractas y el nombre del módulo es “abc”. “abc” funciona decorando
métodos de la clase base como abstractos y luego registrando clases
concretas como implementaciones de la base abstracta.
Un método se vuelve abstracto cuando se decora con la palabra clave
@abstractmethod.
6. Ejemplo de clases abstractas
7. Ejercicios
1. Escribir el programa del juego de dados de la clase anterior con
clases abstractas y métodos abstractos.
7. Ejercicios
Las reglas para los jugadores son:
• Un jugador tira dos dados. Cada dado tiene seis caras. Las caras
contienen 1, 2, 3, 4, 5 y 6 puntos. El resultado de tirar los dados deben
mostrarse “gráficamente”.
• Una vez que los dados se hayan detenido, se calcula la suma de los
puntos en las dos caras superiores.
• Si a la primera tirada, la suma es 7, o bien 11, el jugador gana.
• Si a la primera tirada la suma es 2, 3 o 12, el jugador pierde (es decir la
casa “gana”).
• Si a la primera tirada la suma es 4, 5, 6, 8, 9 ó 10, entonces dicha suma
se convierte en el “punto” o en la “tirada”.
• Para ganar, el jugador deberá continuar tirando los dados hasta que
haga su “tirada”.
• El jugador perderá si antes de hacer su tirada sale una tirada de 7.
7. Ejercicios
Al finalizar presentará un resumen de todas las jugadas:
• Tabla de todas las jugadas, indicando resultado dado por
dado, y le saldo de la casa y del jugador en cada tirada.
• El lado del dado que más (y menos) salió y cuántas veces
• La tirada que más (y menos) salió y cuántas veces
• El número de veces que ganó la casa.
• El número de veces que ganó el jugador.
7. Ejercicios
2. Escribir el programa del juego del ahorcado con clases
abstractas y métodos abstractos.
Referencia: https://www.youtube.com/watch?v=dFkg0DltY8c
7. Ejercicios
3. Escribir el programa del juego del mago, del guerrero y del
campesino(agregar) con clases abstractas y métodos
abstractos.
• Dotar a cada una de las subclases con mas de 5 métodos.
• Cada personaje debe tener mas de 5 armas.
• Rediseñar la lógica del juego y completarla.
7. Ejercicios
3. Escribir un programa con clases abstractas y métodos
abstractos.
Requisitos:
Las clases abstractas (más de 3) deben tener 5 subclases como
mínimo, cada una de las subclases con mas de 6 métodos
heredados de la clase abstracta y 3 métodos propios.
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.