Gemini_Generated_Image_g85cmug85cmug85c.png

Tanto tempo fa in una galassia lontana, lontana…

Fino a questo momento abbiamo gestito singoli oggetti. Ma un vero Impero Galattico gestisce flotte intere. È arrivato il momento di capire come mettere in pratica i concetti di Ereditarietà.

Sei stato assunto dalla Imperial Fleet Corp: il loro software è vecchio, confusionario e pieno di codice duplicato. Il tuo compito è rifondare il sistema usando l’ereditarietà per le astronavi e, successivamente, avanzati algoritmi per ottimizzare le risorse… più una quest finale adatta solo ai più temerari di voi.

<aside> 🧩

Prerequisiti

<aside> 🧠

Cosa imparerai con questo esercizio


🟢 Livello Stagista imperiale (Base)

stagista_imperiale.jpg

<aside> 🎯

Focus su

Ereditarietà, super(), Overriding, @final.

</aside>

Il primo passo per la gestione della Flotta Imperiale è creare una gerarchia di classi solida. Definiremo una generica navicella spaziale Spaceship e poi implementeremo una serie di navi specifiche.

Crea un file chiamato spaceships.py e implementa le seguenti classi.

1. Classe base: Spaceship

Questa è la classe parent di tutte le navi. Contiene la logica condivisa.

Attributo / Metodo Tipo Descrizione
name str Il nome della nave (es. “Tie Fighter”).
fuel int Quantità di carburante. Parte sempre da 100.
__init__ Costruttore Accetta solo name. Inizializza fuel a 100.
fly(distance) Metodo Simula un viaggio.
  1. Stampa: "{name} percorre {distance} anni luce.".
  2. Calcola il consumo: 1 unità di fuel ogni 10 anni luce (divisione intera).
  3. Se il fuel non basta, stampa errore e non parte.
  4. Se basta, sottrae il fuel necessario a percorrere il viaggio. | | dock() | Metodo | Decorato con @final. Stampa: "{name} esegue la procedura di attracco standard.". Nota: La procedura di attracco è standard per sicurezza! |

2. Sottoclasse: CargoShip

Eredita da Spaceship. È progettata per il trasporto pesante: lenta e consuma molto.

Attributo / Metodo Tipo Descrizione
max_load int Carico massimo trasportabile (tonnellate).
current_load int Carico attuale (parte da 0).
__init__ Costruttore Accetta name e max_load.
⚠️ Usa super() per impostare il nome.
load(amount) Metodo Aggiunge peso al carico attuale.
Se supera il massimo, errore. Altrimenti aggiorna.
fly(distance) Override Le navi cargo sono pesanti.
  1. Chiama super().fly(distance) per muoversi.
  2. Solo se il volo ha successo, consuma un ulteriore 1 unità di fuel ogni 10 anni luce (Consumo totale: 2x). |

3. Sottoclasse: ExplorationProbe

Eredita da Spaceship. È un gioiello tecnologico, non modificabile.