Curso Avanzado de Desarrollo en Python
Capítulo
>
Nivel
Clases Avanzadas
Polimorfismo de Clases
Objetivo
Termina de preparar algunas mezclas de vino para que estén listas para ser procesadas utilizando polimorfismo de clases.
Hay ciertos tipos de vino especial que necesitan más preparación que otros y requieren adiciones extra antes de que puedan ser mezclados y envejecidos en un vino adecuado. Para lograr esto, debemos usar polimorfismo de clases, que es una forma de optimizar el uso de objetos creados utilizando clases. Esto se logra haciendo que las funciones internas de la clase compartan propiedades para que todas puedan ser llamadas de la misma manera a pesar de pertenecer a clases diferentes.
En el editor de código, tendrás configuradas cuatro (4) clases que incluyen cuatro tipos diferentes de vino: grape, cherry, strawberry y mango. Cada clase tendrá dos funciones llamadas add() y take_action(), pese a que estas funciones están estructuradas de la misma manera, el contenido de estas funciones puede ser diferente. Cada una de las clases necesita tener su función take_action() completada con un material para ser colocado.
Para comenzar, camina hacia la marca de luz X y enfréntate al escritorio para leer la nota utilizando la función read(). Toma nota de la información escrita que te indicará lo que debe agregarse a la función take_action() de cada clase. Por ejemplo, en la clase grape se debe agregar "white oak" utilizando la función place() como se ilustra a continuación:
# Class for making grape wine
class grape:
def __init__(self,item):
self.name = "grape"
self.item = item
# Adds materials
def add(self):
player.speak("%s are added to the %s mixture." % (self.item, self.name))
# Take actions
def take_action(self):
player.place(self.name)
# New code added
player.place("white oak")
Una vez que todos los materiales que deben ser colocados estén agregados a las funciones de la clase, camina hacia la marca de oro X y recoge los ingredientes que deben ser colocados en las mezclas de vino. Utiliza la función collect() para tomar una constante de lista llamada ingredients, y verifica el contenido utilizando la función speak().
Camina hasta el final del mapa y recoge las cuatro (4) bolsas de frutas y bayas, para que tengas los componentes necesarios para terminar la mezcla de vino.
Ahora que todo ha sido recogido, es hora de agregar todos los materiales para terminar las mezclas de vino. Crea objetos de las clases y llena sus argumentos, deberías tener cuatro (4) objetos: grape_mix, cherry_mix, strawberry_mix y mango_mix.
En cada objeto, asigna la clase que corresponda con el nombre y añade el ítem que debe ser mezclado de acuerdo con la lista que recogiste. Para grape se añade "nothing", para cherry añade "pure water", para strawberry añade "sugar" y para mango añade "spice". Por ejemplo, un objeto definido debería verse así: grape_mix = grape("nothing")
Una vez que los objetos han sido creados, es hora de poner en práctica el polimorfismo de clases. Camina hacia la marca oscura X bajo la alfombra roja, enfréntate al barril y utiliza el bucle configurado en el editor de código. El bucle te permitirá navegar a cada barril de vino en la fila inferior y agregar los elementos necesarios para completar sus mezclas.
La alfombra red necesita el strawberry_mix, la alfombra purple necesita el cherry_mix, la alfombra green necesita el grape_mix y la alfombra orange necesita el mango_mix. Agrega los elementos al bucle en el orden en que se presentan en el mapa de izquierda a derecha. Por ejemplo:
for mix in (strawberry_mix, mango_mix, cherry_mix): mix.add() mix.take_action() player.turn_right() player.move_forward(2) player.turn_left()
Como en el ejemplo, las mezclas corresponden a cómo se colocan las alfombras de izquierda a derecha, es decir: red, orange, purple corresponden a strawberry_mix, mango_mix, cherry_mix. Una vez que la secuencia esté completa, camina hacia la marca oscura X en la alfombra green, enfréntate al barril y haz lo mismo con el segundo bucle que está configurado en el editor de código. Esta vez, hazlo de derecha a izquierda con el color de las alfombras (green, purple, orange) según se muestra en el mapa, para completar el nivel.