<aside> 🧩

Prerequisiti

<aside> 🧠

Cosa imparerai con questo esercizio

<aside> 📢

Novità

Questo esercizio introduce il concetto di refactoring. Con questo termine si indica la modifica della struttura interna del codice sorgente di un programma senza alterarne il comportamento esterno.

💡 Scopo principale

L’obiettivo del refactoring è migliorare gli attributi non funzionali del codice, come la:

🛠️ Come Funziona

Si tratta di una serie di piccole modifiche atomiche e sicure (spesso supportate da test) che cambiano la progettazione del codice. Non è una riscrittura completa, ma un miglioramento continuo. Esempi includono la ridenominazione di variabili, l’estrazione di metodi o l’introduzione di pattern di progettazione.

Gli IDE moderni (come la suite JetBrains, ad esempio) supportano il refactoring con strumenti automatici e sicuri che ne semplificano l’applicazione; un esempio di funzionalità fondamentale che vi invito a sperimentare è l’Extract Method che consente di isolare un blocco di codice in un nuovo metodo con un solo comando, riducendo la duplicazione e migliorando la chiarezza.

Il sottomenu Refactor di PyCharm

Il sottomenu Refactor di PyCharm

</aside>


Obiettivi dell’esercizio

Rifattorizzare la soluzione della Parte 1 introducendo l’incapsulamento tramite la convenzione Python con __ (name mangling) e i getter e setter espliciti.

Requisiti funzionali (estensione della Parte 1)

  1. Incapsulamento con __
  2. Classe Weapon
  3. Classe Player
  4. __str__ aggiornati
  5. Simulazione

Esempio di output atteso

Nota: i danni inflitti variano perché dipendono da calcoli e casualità.

=== SIMULAZIONE COMBATTIMENTO ===

Gimli: Forza=16, Destrezza=12
Legolas: Forza=8, Destrezza=17

Gimli equipaggia: Spada a due mani (8–15 dmg)
Legolas equipaggia: Balestra (8–13 dmg)

=== INIZIO COMBATTIMENTO ===

--- Turno 1 ---
Gimli attacca Legolas e infligge 12 danni!
Legolas (HP: 33/45)

--- Turno 2 ---
Legolas attacca Gimli e infligge 7 danni!
Gimli (HP: 43/50)
...
=== FINE COMBATTIMENTO ===

🏆 Gimli vince il combattimento! Gimli (HP: 10/50)

<aside> <img src="notion://custom_emoji/899aa73c-260f-813c-baa9-0003a270e9e6/29eaa73c-260f-8057-931f-007a0ac7402b" alt="notion://custom_emoji/899aa73c-260f-813c-baa9-0003a270e9e6/29eaa73c-260f-8057-931f-007a0ac7402b" width="40px" />

Indice di Code Combat

Parte 1: creare classi e istanziare oggetti

Parte 2: incapsulamento e visibilità

Parte 3: @property, metodi privati e duck typing

Parte 4: validazione e gestione errori

Parte 5: implementare l’MVC

Parte 6: un team di sviluppo

</aside>

<aside> ©️

License

Python Doesn’t Byte © 2025 by Marco Farina is licensed under CC BY-NC-SA 4.0. To view a copy of this license, visit https://creativecommons.org/licenses/by-nc-sa/4.0/

E-mail: [email protected]

</aside>