L'informatico di Schrödinger

cat
31Oct/10Off

Interludio introduttivo sulla programmazione ad Oggetti

Seppur forse anticipando un po' troppo la tabella di marcia ho deciso di affrontare sin da subito un tema abbastanza caldo: la programmazione ad oggetti.

Ovviamente questo articolo è pensato in modo da esplicare, o almeno tentare di rendere chiaro, in modo semplice l'idea generale che si nasconde dietro a tale modello di programmazione. Non avendo ancora fornito le basi sintattiche imperative del linguaggio questo argomento verrà presentato non tramite esempi strutturati tramite codice ma in modo discorsivo: successivamente, quando introdurremo gli oggetti e la sintassi per definirli ed interagire con essi riprenderemo il discorso dando un senso pratico a quello che qui viene riassunto.

Object Oriented.

Questa definizione è legata ad un intuizione di fondo che mira a rendere la scrittura del codice di un qualsivoglia applicativo il più possibile esprimibile tramite le usuali interazioni che tutti noi abbiamo con il mondo fisico. Nella vita di tutti i giorni la nostra percezione della realtà ci pone di fronte ad un insieme discreto di elementi con cui siamo in grado di interagire in più modi, che sappiamo riconoscere ed appellare con un nome e descrivere elencandone le proprietà.

Prendiamo come esempio un oggetto banale: una sveglia.

Innanzitutto abbiamo stabilito che il Tipo di oggetto che vogliamo prendere in considerazione è quello che noi chiamiamo Sveglia.
Una qualsiasi sveglia ha delle proprietà, alcune interessanti altre meno, ad esempio: il colore, la marca, il peso ed il fatto se questa è analogica o digitale.
Inoltre con una sveglia siamo abituati ad interagire effettuando delle azioni: alcune ne modificano lo stato (spegni\accendi, aggiorna data\ora, imposta allarme..) altre ci permettono di venire a conoscenza di particolari informazioni sul suo stato (leggi data\ora) o osservarne le proprietà (leggi marca ad esempio).

Queste caratteristiche sono comuni a tutti gli oggetti di Tipo Sveglia.

Una particolare Sveglia, quella che ad esempio abbiamo sul comodino, può essere descritta come una sveglia nera, digitale, di una specifica marca. Questa particolare sveglia non è altro che una Istanza (così la definiremo) del tipo Sveglia: un istanza  di un determinato tipo identifica esattamente, attraverso la definizione dei suoi attributi e del suo stato, il preciso oggetto a cui ci stiamo riferendo - e solo quello.

Non è tutto sommato un idea nuova. Chi ha studiato filosofia alle superiori sicuramente troverà nella descrizione soprastante qualcosa di già sentito.. a costo di essere particolarmente pedante (e compreso solo da alcuni lettori) il parallelo che sto suggerendo è quello che si può ritrovare nell'Iperuranio Platonico.
Pensateci bene: secondo Platone le Idee, nella loro perfezione, si collocano nell'Iperuranio (noi non le chiamiamo Idee ma Tipi) mentre la loro imperfetta realizzazione fisica e materiale (che Platone chiamerebbe Oggetti e che noi identifichiamo nelle Istanze di Tipi) è ciò con cui veniamo in contatto tutti i giorni.

Un Idea Platonica, come un Tipo, può avere infinite istanze specifiche.

Bene. Perché tutto questo rigirio? Perché il succo della programmazione ad oggetti è proprio questo!

In Java (e in altri linguaggi a oggetti) noi definiamo delle Classi ciascuna delle quali non fa altro che identificare un Tipo. Ciascuna classe specificherà dei metodi per maneggiare l'oggetto che descrive, tali metodi possono essere invocati per modificarne lo stato e per eseguire operazioni che interessino l'istanza dell'oggetto con cui di volta in volta lavoriamo.

La programmazione ad oggetti prevede, tramite questa raffigurazione ideale, che un qualsiasi programma possa essere visto come un interazione tra istanze di oggetti di diverso tipo: pensate alle avventure grafiche "punta e clicca" che andavano di moda qualche anno fa dove per risolvere enigmi spesso andavano usati insieme (in modo più o meno complicato) degli oggetti raccolti dal protagonista, l'idea è la stessa. Il tentativo, portato avanti dalla programmazione ad oggetti, è quello di rendere il processo di scrittura del codice meno astratto (per quanto possibile) è più vicino alle interazioni di cui abbiamo esperienza nella vita reale.

Ovviamente questo consente di poter lavorare, in modo relativamente "semplice", con concetti a cui siamo già abituati a fare i conti: argomenti come polimorfismo e ereditarietà (che tratteremo in seguito) per quanto definiti con nomi altisonanti non sono altro che estensioni dell'esperienza quotidiana all'ambito della programmazione.

Bene, credo di aver detto quanto necessario per farsi un idea teorica di base (ovviamente son dispostissimo a chiarire dubbi se mi fossi espresso in modo non chiaro), ovviamente in seguito vedremo come questi concetti hanno una ricaduta pratica nella sintassi espressa da Java.

Alla prossima puntata! Stay Tuned!

Enhanced by Zemanta
Comments (1) Trackbacks (0)
  1. Grandee!! ;) Capito benissimo XD


Leave a comment

You must be logged in to post a comment.

Trackbacks are disabled.