appunti3s:python_orientato_ad_oggetti
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
appunti3s:python_orientato_ad_oggetti [2018/06/28 18:30] – profpro | appunti3s:python_orientato_ad_oggetti [2020/06/08 22:19] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Python orientato ad oggetti ====== | ||
+ | |||
+ | >> indice: [[appunti3s: | ||
+ | |||
+ | ===== Cosa faremo? ===== | ||
+ | |||
+ | In questo capitolo sarà introdotto un nuovo " | ||
+ | |||
+ | **NOTA**: Questi appunti sono su ;;python2;; , da aggiornare per python3 | ||
+ | ===== Prerequisiti ===== | ||
+ | |||
+ | È necessario conoscere i concetti di __tipo di dato__, variabile, funzione e modulo in Python. | ||
+ | * per python2 installare pacchetto python-tk | ||
+ | * per python3 installare pacchetto python3-tk | ||
+ | ===== Oggetti ===== | ||
+ | |||
+ | Prima di dire cosa sono gli oggetti, diciamo che in realtà __li abbiamo già usati__ :) | ||
+ | |||
+ | Quando? Quando abbiamo usato le variabili... Anche le variabili sono dei semplici oggetti. Quindi, come prima definizione, | ||
+ | |||
+ | In generale un oggetto può essere più complesso di una semplice variabile e può contenere più dati di una variabile. Viene chiamato con un termine vago come " | ||
+ | ===== Classi ===== | ||
+ | |||
+ | Prima di dire cosa sono le classi, diciamo che in realtà __le abbiamo già usate__ :) | ||
+ | |||
+ | Quando? Quando abbiamo creato un nuovo oggetto (o una nuova variabile). Le classi sono quei modelli che servono a creare nuovi oggetti. Quindi, come prima definizione, | ||
+ | * **Quiz** Se abbiamo paragonato la classe ad uno stampo, a cosa paragoneresti gli oggetti così prodotti? | ||
+ | |||
+ | Fino ad ora abbiamo usato oggetti che appartengono a tipi predefiniti come ' | ||
+ | |||
+ | ==== Esempio ==== | ||
+ | |||
+ | Vediamo come si creano gli oggetti, a partire da una classe (una categoria, un modello ideale), con un esempio: | ||
+ | <file python 20.py> | ||
+ | import Tkinter | ||
+ | mario = Tkinter.Tk() # Tkinter e' il prefisso del modulo esterno (tk interface) e si puo' trascurare... | ||
+ | mario.mainloop() | ||
+ | </ | ||
+ | |||
+ | Tradotto in italiano: | ||
+ | - Importa un modulo | ||
+ | - Crea/ | ||
+ | - L' | ||
+ | - Notazione: di solito le classi hanno un nome maiuscolo mentre gli oggetti minuscolo... | ||
+ | |||
+ | * Hai provato il precedente codice? Hai creato un oggetto! Riesci anche a vederlo? :) | ||
+ | Non tutti gli oggetti rappresentano qualcosa di visibile. Ad esempio, le variabili sono oggetti, ma non sono visibili... | ||
+ | |||
+ | * **Esercizio** osservare la seconda riga del precedente codice e rispondere alle seguenti domande: | ||
+ | * cosa è mario? | ||
+ | * cosa è Tk? | ||
+ | Terminologia: | ||
+ | ==== Una prima formula ==== | ||
+ | |||
+ | {{: | ||
+ | In base a quanto appena visto, per costruire nuovi oggetti basta usare la seguente " | ||
+ | < | ||
+ | * Consiglio: ricopia questa formula sul quaderno tante volte fino a che non la ricordi. Attenzione alle maiuscole... | ||
+ | Le parentesi tonde non sono messe per caso, significa che stiamo usando proprio una funzione... | ||
+ | Questa formula vale anche per le variabili/ | ||
+ | < | ||
+ | Prova ad applicarla anche tu: | ||
+ | * **Esercizio**: | ||
+ | * **Esercizio**: | ||
+ | * **Esercizio**: | ||
+ | |||
+ | <file python 21.py> | ||
+ | import turtle | ||
+ | laTartaruga = turtle.Turtle() | ||
+ | laTartaruga.shape(" | ||
+ | </ | ||
+ | * **Esercizio**: | ||
+ | * **Quiz**: adesso prova a tentare di indovinare a tradurre in italiano anche l' | ||
+ | |||
+ | ===== Metodi ===== | ||
+ | |||
+ | Se si notano le parentesi nell' | ||
+ | |||
+ | Aggiungiamo un' | ||
+ | <file python 21bis.py> | ||
+ | import turtle | ||
+ | laTartaruga = turtle.Turtle() | ||
+ | laTartaruga.shape(" | ||
+ | laTartaruga.forward(30) | ||
+ | </ | ||
+ | |||
+ | ==== Una seconda formula ==== | ||
+ | |||
+ | {{: | ||
+ | < | ||
+ | * **Quiz**: A cosa serve la prima formula e a cosa serve la seconda? | ||
+ | * **Quiz**: Si può usare la seconda senza usare la prima? | ||
+ | Traducendo in italiano l' | ||
+ | - Crea/ | ||
+ | - L' | ||
+ | - Si applica il metodo shape(" | ||
+ | - Si applica il metodo forward(30) sull' | ||
+ | - notare che in italiano la frase inglese // | ||
+ | |||
+ | Provare a spiegare il seguente esempio, traducendo sempre in italiano: | ||
+ | <file python 22.py> | ||
+ | parola = str(" | ||
+ | print parola, numero | ||
+ | print parola.capitalize() | ||
+ | </ | ||
+ | * **Quiz** Completa la seguente frase: Con quest' | ||
+ | * **Esempio: | ||
+ | < | ||
+ | Questo perché su un oggetto di tipo ' | ||
+ | |||
+ | ===== Svantaggi ===== | ||
+ | |||
+ | Potrebbe sorgere una domanda: se utilizzare lo stile della programmazione orientata agli oggetti porta a questo nuovo " | ||
+ | |||
+ | ===== Vantaggi ===== | ||
+ | |||
+ | Inizialmente, | ||
+ | |||
+ | Basta immaginare di provare a costruire una casa senza seguire nessuna regola: nessuno ci vieta di fare una casa senza le fondazioni o il tetto, ma poi cosa si ottiene senza regole? Forse un architetto geniale potrebbe ottenere un capolavoro, ma senza regole, tutti gli altri otterrebbero solo disastri. | ||
+ | |||
+ | Comunque, questo stile di programmazione non si può applicare sempre, ad esempio, non si possono chiamare le funzioni //len()// o // | ||
+ | |||
+ | ===== Esercizi ===== | ||
+ | |||
+ | Creare un vocabolario con i nuovi termini e provare a descriverne il significato con parole proprie. | ||
+ | |||
+ | Provare a creare nuovi oggetti a partire dalle seguenti classi: | ||
+ | * etichetta = Tkinter.Label(fabio, | ||
+ | |||
+ | Provare ad applicare i seguenti metodi ad oggetti di classe Tkinter.Tk | ||
+ | * fabio.title(" | ||
+ | * print Tkinter.Tk.%%__doc__%% | ||
+ | * print Tkinter.Tk.%%__class__%% | ||
+ | * etichetta.pack() | ||
+ | * fabio.destroy() | ||
+ | Provare ad applicare i seguenti metodi ad oggetti di classe turtle.Turtle | ||
+ | * tartaruga.color(" | ||
+ | * tartaruga.circle(25) | ||
+ | |||
+ | |||
+ | |||
+ | |||