Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

Book Manager

Gestionale di un catalogo di libri in Python, costruito su due classi che si compongono e su un uso esteso dei metodi speciali del linguaggio.

Progetto realizzato come prova finale del modulo Programmazione 2, all'interno del percorso formativo Web Developer AI presso la Steve Jobs Academy (Catania).

Fa parte di una serie di quattro progetti finali del modulo. Gli altri sono pokemon-api-client, creature-manager e loan-predictor-ml.


L'idea alla base

Il progetto modella due entità distinte che si compongono: un libro, con i suoi dati, e un catalogo, che raccoglie più libri e ne conosce il valore complessivo.

La scelta di separarle non è formale. Il catalogo non è una semplice lista: deve mantenere aggiornato il proprio valore totale a ogni aggiunta o rimozione, e deve poter essere confrontato o unito a un altro catalogo. Sono responsabilità che appartengono al catalogo, non ai libri che contiene.


Le classi

Book

Rappresenta un singolo libro: titolo, autore, casa editrice e prezzo.

Il prezzo è dichiarato con il doppio underscore:

self.__price = price

Non è una convenzione estetica. Il doppio underscore attiva il name mangling di Python, che rende l'attributo inaccessibile dall'esterno con il suo nome originale. L'unico modo per leggerlo o modificarlo è passare dai metodi previsti.

def set_price(self, new_price):

    if new_price > 0:
        self.__price = new_price
    else:
        print("Error, the price must be a positive value")

Il setter esiste proprio per questo: impone che il prezzo resti positivo. Se l'attributo fosse pubblico, chiunque potrebbe assegnargli un valore negativo e il controllo non servirebbe a nulla.

Catalog

Raccoglie una lista di libri e mantiene aggiornato il proprio valore totale, anch'esso privato.

Ogni volta che un libro viene aggiunto o rimosso, il totale viene ricalcolato. In questo modo il valore non deve essere ricalcolato scorrendo tutta la lista a ogni richiesta: è sempre corretto.


Metodi speciali

Le due classi ridefiniscono i metodi con doppio underscore per integrarsi con la sintassi nativa di Python.

Metodo Classe Effetto
__str__ Book, Catalog Definisce cosa mostra print() sull'oggetto
__eq__ Catalog Ridefinisce l'operatore ==
__add__ Catalog Ridefinisce l'operatore +

__eq__ — quando due cataloghi sono uguali

Senza questo metodo, == confronterebbe gli indirizzi in memoria: due cataloghi identici nel contenuto risulterebbero diversi solo perché sono due oggetti distinti.

Qui il confronto avviene su nome e descrizione, che sono i dati che identificano davvero un catalogo.

__add__ — unire due cataloghi con +

unified = fantasy + classics

Il metodo crea un terzo catalogo con un nome composto, unisce le due liste di libri e somma i valori totali. I cataloghi originali restano intatti.

È l'esempio più chiaro di cosa permettono i metodi speciali: un'operazione complessa espressa con un singolo simbolo, che si legge come se fosse una somma tra numeri.


Concetti applicati

  • Incapsulamento — attributi privati con doppio underscore, accesso tramite getter e setter
  • Validazione nel setter — il prezzo non può essere negativo
  • Composizione tra classiCatalog contiene oggetti Book
  • Metodi speciali__str__, __eq__, __add__
  • Stato derivato mantenuto aggiornato — il valore totale si aggiorna a ogni operazione

Esecuzione

Nessuna dipendenza esterna oltre alla libreria standard.

python main.py

Lo script contiene una dimostrazione che esercita tutte le funzionalità: creazione dei libri, modifica del prezzo con e senza valori validi, creazione di due cataloghi, rimozione di un libro, unione con + e confronto con ==.


Sviluppi possibili

  • Aggiungere __eq__ a Book. Attualmente remove_book usa list.remove(), che confronta gli oggetti per identità: rimuove il libro solo se gli si passa esattamente lo stesso oggetto. Con __eq__ definito su titolo e autore, funzionerebbe anche con un libro equivalente creato separatamente.
  • Persistenza dei dati. Il catalogo vive in memoria e si perde alla chiusura. Il salvataggio su file JSON sarebbe lo sviluppo naturale.
  • Ricerca e ordinamento. Cercare un libro per autore o ordinare il catalogo per prezzo sono le funzioni che mancano per prime.
  • Interfaccia utente. Un menu interattivo, o una versione web, renderebbe il gestionale utilizzabile senza modificare il codice.

Tecnologie

  • Python 3 — libreria standard
  • Visual Studio Code come ambiente di sviluppo

Autore

Riccardo Mazza@Richard-WebDev Studente Web Developer AI, Steve Jobs Academy

About

Gestionale di un catalogo di libri in Python — incapsulamento e metodi speciali

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages