La scorsa volta abbiamo visto le principali differenza fra linguaggi compilati e linguaggi interpretati. Abbiamo visto che la differenza principale sta nelle prestazioni e nella portabilità diretta. Quindi spero che ora a seconda del progetto che avete in mente sapete scegliere fra queste due categorie quella che fa al caso vostro! 🙂
Ora affronteremo un altra distinzione fondamentale dei linguaggi di programmazione ovvero quella fra linguaggi procedurali e linguaggi orientati agli oggetti (e in misura minore quelli logici).
Innanzitutto è bene sapere che in principio fu il verbo. Insomma, come ci dice anche la bibbia, in principio non esistevano oggetti. La programmazione non solo era puramente procedurale ma era anche lineare ovvero non veniva modificata da input esterni in run-time. Basta pensare alle schede perforate del primo Fortran per rendersi conto che la sequenza di istruzioni era veramente difficile da modificare una volta iniziata l’esecuzione 🙂
Quindi tutti i linguaggi storici sono procedurali. Un linguaggio procedurale infatti segue l’idea classica di programmazione di cui abbiamo parlato in precedenza: in pratica esegue le istruzione in sequenza partendo dalla prima che incontra e si muove all’interno del programma soltanto attraverso chiamate di funzione (ovvero chiama altri algoritmi scritti da qualche parte che hanno un nome specifico) e tutti i dati a cui può accedere non sono visti in altro modo che come numeri e indirizzi di memoria.
E’ il modo più semplice di concepire la programmazione.
Linguaggi procedurali noti sono il C, Fortran, BASIC e altri.
Ma per molte applicazioni iniziò a diventare necessaria non soltanto una rappresentazione degli algoritmi ma anche una rappresentazione della realtà comprensiva di relazioni fra entità reali, proprietà comuni, sottoinsiemi di entità, attributi…
Pioniere di questo fu Smalltank un linguaggio pensato appunto per la creazione di simulazioni della realtà.
Questo approccio viene chiamato Paradigma ad Oggetti (o Object Oriented).
In pratica i linguaggi di questo tipo offrono al programmatore la possibilità di creare oggetti che contengono:
- Attributi: ovvero dati, caratteristiche, informazioni riguardanti l’oggetto. Rappresentano in pratica quello che un oggetto sa di se.
- Metodi: ovvero “abilità” dell’oggetto. Rappresentano in pratica quello che un oggetto sa fare.
Per esempio possiamo pensare ad un blog come ad un oggetto: i suoi attributi saranno il nome e la lista dei post che contiene mentre i suoi metodi saranno le sue abilità come ad esempio cancellare o aggiungere un post.
Caratteristica comune dei linguaggi object oriented consiste nell’ereditarietà. E’ un concetto complicatissimo che cercherò di semplificare cosi (e approfondiremo ovviamente in seguito): abbiamo definito il nostro oggetti blog. Ma a pensarci bene il nostro blog non è solo un blog MA ANCHE un sito web. Considerando questopossiamo dire che l’oggetto blog eredita dall’oggetto sito_web.
Ecco. Ogni qualvolta vi trovate difronte ad un oggetto che è ANCHE qualche altra cosa probabilmente quel qualche altra cosa è la sua sovraclasse.
Alcuni esempi: donna e uomo ereditano dall’oggetto essere umano; libro da cucina, libro di narrativa e saggio sono tutti oggetti che ereditano dall’oggetto libro; pomodoro eredita da vegetale che a sua volta eredita da essere vivente.
Come vedete è molto facile sfruttando il paradigma ad oggetti creare una copia “virtuale” di un oggetto materiale.
Ovviamente sugli oggetti andrebbero dette altre centomila cose e appena arriverà il momento analizzeremo nel dettaglio i vari aspetti sia tecnici che logici.
Linguaggi Object Oriented noti sono C++,Java,PHP,Python e moltissimi altri.
Bisogna comunque tener presente il fatto che un linguaggio procedurale non è detto implichi che sia meno potente rispetto ad un linguaggio orientato agli oggetti in quanto tutto ciò che si può fare con la programmazione a oggetti può essere fatto con la procedurale. Basti pensare che nelle prime versioni di C++ il codice veniva tradotto prima da un compilatore in codice C e poi successivamente compilato nel vero senso della parola.
La differenza sta nella notevole semplificazione sia realizzativa che di concetto che un linguaggio Object Oriented offre per questo tipo di applicazioni.
I linguaggi logici invece (come il PROLOG) hanno un impostazione del tutto diversa. Questi linguaggi infatti sono orientati alle proposizioni logiche e alla deduzione. Il programmatore infatti si occupa di inserire nel codice delle regole che il programma userà per valutare gli input.
Per esempio posso definire la regola APPARTIENE(x,y) come tutte le cose y che appartengono a x.
Questo genere di linguaggi non hanno attualmente molte applicazioni nell’informatica tradizionale ma vengono utilizzati spesso nelle intelligenze artificiali.
Bene. Nella prossima parleremo dell’ultima classificazione dei linguaggi di programmazione di un certo rilievo: ovvero fra i linguaggi ordinari e i linguaggi di scripting.
Ottimo articolo, veramente. Credo sia uno tra quelli che chiariscono meglio il concetto.
Grazie veramente! Sono contento di essere utile e questi commenti sono incitazioni a proseguire! ^^
“I linguaggi logici invece (come il PROLOG) hanno un impostazione del tutto diversa. Questi linguaggi infatti sono orientati alle proposizioni logiche e alla deduzione. Il programmatore infatti si occupa infatti di inserire nel codice delle regole che il programma userà per valutare gli input.”
Il programmatore ha un ‘infatti’ di troppo.
Comunque grande, finalmente ho capito cosa è la programmazione ad oggetti.
Sono in attesa del pdf.
Complimenti, semplice e conciso.
segnalazione:
“Pioniere di questo fu Smalltank un linguaggio pensato appunto per la creazione disimulazioni della realtà.”
Smalltank -> Smalltalk (c’e’ una “n” al posto della “l” :-)).