Corso Avanzato di Sviluppo Python
Capitolo
>
Livello
Classi Avanzate
Polimorfismo di Classe
Obiettivo
Finisci di preparare alcune miscele di vino in modo che possano essere pronte per essere processate utilizzando il polimorfismo delle classi.
Esistono alcuni tipi di vino speciali che necessitano di più preparazione rispetto ad altri e richiedono ulteriori aggiunte prima di poter essere mescolati ed invecchiati in un vero e proprio vino. Per ottenere ciò dobbiamo utilizzare il polimorfismo delle classi, ovvero un modo per ottimizzare l'uso degli oggetti creati tramite classi. Questo si realizza facendo in modo che le funzioni interne delle classi condividano proprietà, così da poter essere richiamate nello stesso modo nonostante provengano da classi diverse.
Nell'editor di codice avrai predisposto quattro (4) classi che includono quattro diversi tipi di vino: grape, cherry, strawberry e mango. Ogni classe avrà due funzioni chiamate add() e take_action(). Nonostante queste funzioni siano strutturate nello stesso modo, il contenuto di esse può essere diverso. Ciascuna classe deve avere la sua funzione take_action() popolata con un materiale da posizionare.
Per iniziare, dirigiti verso il segno X luminoso e rivolgi il viso alla scrivania per leggere il biglietto utilizzando la funzione read(). Prendi nota delle informazioni scritte, che ti diranno cosa dovrà essere aggiunto alla funzione take_action() di ciascuna classe. Ad esempio, nella classe grape deve essere aggiunto "white oak" utilizzando la funzione place() come illustrato di seguito:
# 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 volta aggiunti tutti i materiali che devono essere posizionati nelle funzioni della classe, dirigiti verso il segno X dorato e prendi gli ingredienti che devono essere inseriti nelle miscele di vino. Usa la funzione collect() per prendere una costante lista chiamata ingredients e controlla il contenuto utilizzando la funzione speak().
Dirigiti in fondo alla mappa e raccogli le quattro (4) borse di frutta e bacche, in modo da avere i componenti necessari per completare la miscela di vino.
Ora che tutto è stato raccolto, è il momento di aggiungere tutti i materiali per completare le miscele di vino. Crea oggetti delle classi e popola il loro argomento: dovrebbero essere quattro (4) oggetti, ovvero grape_mix, cherry_mix, strawberry_mix e mango_mix.
Per ogni oggetto, imposta la classe corrispondente al nome e aggiungi l'elemento da mescolare in accordo con la lista raccolta. Per grape viene aggiunto "nothing", per cherry aggiungi "pure water", per strawberry aggiungi "sugar" e per mango aggiungi "spice". Ad esempio, un oggetto definito dovrebbe apparire così: grape_mix = grape("nothing")
Una volta creati gli oggetti, è il momento di mettere in pratica il polimorfismo delle classi. Dirigiti verso il segno X scuro sotto il tappeto rosso, rivolgi il viso alla botte e utilizza il ciclo predisposto nell'editor di codice. Il ciclo ti permetterà di navigare verso ogni botte di vino nella fila inferiore e di aggiungere gli elementi necessari per completare le loro miscele.
Il tappeto red necessita del strawberry_mix, il tappeto purple necessita del cherry_mix, il tappeto green necessita del grape_mix e il tappeto orange necessita del mango_mix. Aggiungi gli elementi al ciclo nell'ordine in cui sono presentati sulla mappa da sinistra a destra. Ad esempio:
for mix in (strawberry_mix, mango_mix, cherry_mix): mix.add() mix.take_action() player.turn_right() player.move_forward(2) player.turn_left()
Come nell'esempio, i mix corrispondono all'ordine in cui i tappeti sono posizionati da sinistra a destra, cioè: red, orange, purple corrispondono rispettivamente a strawberry_mix, mango_mix, cherry_mix. Una volta completata la sequenza, dirigiti verso il segno X scuro sul tappeto verde, rivolgi il viso alla botte e ripeti la stessa procedura con il secondo ciclo predisposto nell'editor di codice. Questa volta, il ciclo dovrà essere eseguito da destra a sinistra, seguendo l'ordine dei tappeti (green, purple, orange) come mostrato sulla mappa, per completare il livello.