Ciao toti81
toti81 ha scritto:
Chiaro, ma a cosa potremmo assimilare le classi e gli oggetti? Anche con termini fuori dal mondo della programmazione, ad esempio: insiemi?
Una bella chiacchierata su classi e oggetti ogni tanto ci vuole, anche se sono cose cose già dette ripeterle non fa male.
Saro breve:
Intanto bisogna distinguere
oggetto e
classe. Un oggetto è qualcosa di concreto, di reale mentre la classe è un' idea, potremmo anche usare il termine 'Tipo'. Fido e Pluto sono due cani ovvero corrispondono a quell' idea di caninità che è nella nostra testa (Platone parlò a lungo di questo), possiamo dire che Fido e Pluto sono due istanze della classe 'Cane', oppure che sono due oggetti di tipo 'Cane'.
Nella classe descriviamo quali caratteristiche deve avere un oggetto e in questa descrizione specifichiamo attributi e comportamenti. Un cane deve avere quattro zampe, una coda, due orecchie, ma deve anche abbaiare, rincorrere i gatti, scodinzolare (queste ultime sono azioni).
L' idea della programmazione ad oggetti è proprio questa, ovvero unire in un' unica entità
attributi e
comportamenti. Ad esempio in un gioco potremmo avere delle automobili, un' automobile ha una velocità e una direzione questi sono gli attributi e saranno due variabili numeriche, ma una automobile ha anche dei comportamenti, può accelerare, curvare ecc, questa sono azioni. I comportamenti saranno descritti da delle funzioni che fanno parte della classe e che agiscono sui campi dell' oggetto.
Ad esempio 'accelera' modificherà il campo velocita dopo aver controllato di non aver raggiunto la velocita massima e magari controllando se la strada è in salita per variare l' accelerazione.
Questo ci porta ad altre considerazioni, un oggetto da solo serve a poco, quando programmi ad oggetti ti preoccupi principalmente dell'
interazione di molti oggetti. Ad esempio una macchina è su una strada, su una strada vi sono molte macchine, una strada può essere in pendenza. La classe strada conterrà un array di automobili, e un attributo pendenza. Un' automobile potrà avere dei riferimento alla strada, in questo modo i metodi della classe macchina possono esaminare la strada e attraverso di essa valutare la presenza di altri veicoli. ecc ecc.
Questo mi fa venire in mente un altro esempio formato dalle classi 'Scena', 'Soldato', 'Arma', 'Proiettile',
quattro classi tanti oggetti. Vi sarà probabilmente un solo oggetto 'Scena' ma questo conterrà numerosi oggetti 'Soldato', ognuno con la sua posizione ecc, ogni soldato possiede delle armi, diciamo due oggetti Pistola e un oggetto Fucile, ogni arma contiene dei proiettili, ovvero oggetti di tipo Prioettile (i proiettili del fucile sono diversi da quelli della pistola, sono tipi diversi ma imparentati).
Un soldato esamina la scena e quando vede un altro soldato gli spara, ovvero prima
manda un messaggio all' arma opportuna di orientarsi in un certo modo, poi le manda un secondo messaggio di fare fuoco, a questo punto la pistola invia un messaggio al primo oggetto proiettile del caricatore per metterlo in movimento, un proiettile durante il movimento esamina la scena e se incontra un soldato lo uccide, ovvero manda un messaggio all' oggetto soldato che ha intercettato e questo messaggio mette il soldato nello stato morto.
Poi faremo degli esempi concreti.