Archivi tag: metodi di programmazione

Overview sui linguaggi di programmazione

Con il passare del tempo si è assistito ad una massiccia evoluzione dei linguaggi di programmazione, che ha portato ad una loro evidente semplificazione, aumentandone allo stesso tempo le potenzialità.

 

linguaggi di programmazione, metodi di programmazione, OOP, procedurale, funzionale, Java, C, C++, LISP, linguaggi di scripting, compilatore

Esistono diversi criteri per differenziare i vari linguaggi di programmazione, tra cui l’ordine cronologico. Parliamo quindi di:

1) linguaggi di prima generazione, come il linguaggio macchina, piuttosto complesso e strettamente dipendente dall’architettura hardware;

2) linguaggi di seconda generazione, tra cui assembly. Tale linguaggio, molto simile al linguaggio macchina, consente al programmatore di turno di ottenere gli stessi risultati dei linguaggi di prima generazione adoperando, però, un minor numero di istruzioni. Inoltre, affinchè tale linguaggio possa essere tradotto in linguaggio macchina è necessario uno strumento apposito, detto assembler (per l’operazione inversa viene invece utilizzato il cosiddetto disassembler);

3) linguaggi di terza generazione: trovano in C, C++ e Java gli elementi più rappresentativi. Essi hanno come elemento predominante il fatto che si avvicinano molto al linguaggio naturale (english like) e dunque sono molto più semplici da utilizzare rispetto ad assembly o allo stesso linguaggio macchina.

4) linguaggi di quarta generazione: in questa categoria rientrano i cosiddetti linguaggi dichiartativi, come SQL, utilizzato come DDL e DML nell’albito dei DBMS.

Un ulteriore elemento distintivo tra i vari linguaggi di programmazione è sicuramente il metodo attraverso il quale vengono tradotti in linguaggio macchina. Parliamo quindi di:

1) linguaggi compilati: ne sono un’esempio C e C++, linguaggi che per essere tradotti il codice macchina (e dunque in eseguibili) necessitano di un compilatore (come gcc e g++);

2) linguaggi interpretati: essi non vengono compilati, ma interpretati in runtime senza che vi sia la necessità di trasformarli in eseguibili. Un esempio di linguaggi interpretati sono i cosiddetti linguaggi di scripting: da bash a perl, da php ad asp, and so on…

3) linguaggi a compilazione intermedia: sono un tipo di linguaggio ibrido, ovvero soggetti ad una prima fase, in cui si assiste ad una sorta di compilazione, ed una seconda fase, in cui avviene l’interpretazione. Un esempio tipico di questa tipologia di linguaggi è Java: in un primo momento il codice viene compilato, generando il cosiddetto bytecode. Successivamente, tale bytecode verrà interpretato da un software apposito (che funge appunto da interprete), ovvero la Java Virtual Machine (JVM).

Infine, un altro criterio per distinguere i vari linguaggi è la tipologia di programmazione di cui si avvalgono. Esistono infatti i seguenti tipi di programmazione:

1) programmazione procedurale: il programma viene realizzato attraverso l’uso di apposite procedure (le cosiddette funzioni) che hanno il compito di suddividere lo stesso in parti più elementari, consentendo allo sviluppatore di risolvere il problema mediante il classico approccio divide et impera. Essi, inoltre, permettono l’uso dei salti incondizionati (aka goto), anche se adoperarli potrebbe causare diversi problemi.

2) programmazione strutturata: simile in tutto e per tutto alla programmazione procedurale a differenza che non consente l’uso dei salti incondizionati;

3) programmazione orientata agli ogetti (OOP – Object Oriented Programming): i massimi rappresentanti di questa tipologia di programmazione sono certamente C++ ed il suo successore, ovvero Java. In questo caso parliamo di classe, caratterizzata da dati (attributi) e funzioni (metodi). Un oggetto non è altro che l’istanza di una classe.

4) programmazione dichiarativa, che a sua volta si suddivide in due tipologie, ovvero:

4a) programmazione funzionale, che basa il suo funzionamento su funzioni matematiche (un linguaggio che si avvale di tale tecnica è LISP, utilizzato soprattutto nell’ambito dell’intelligenza artificiale);

4b) programmazione logica, fondata su elementi di logica matematica.

Infine, a prescindere dal tipo di linguaggio e di logica di programmazione che si vuole utilizzare durante lo sviluppo software, è necessario porre particolare attenzione sul concetto di astrazione.

L’astrazione è un’attività svolta quasi automaticamente dalla nostra mente, la quale ci consente di concentrarci solo sui dettagli importanti di un dato problema, tralasciando tutto il resto. Esistono diversi tipi di astrazione:

1) astrazione funzionale: ovvero viene fornita solo l’interfaccia di un dato metodo (o il prototipo di una data funzione), tralasciando i dettagli implementativi della stessa;

2) astrazione dei dati: ovvero vengono considerate solo le informazioni essenziali relative ad una classe (o struttura), evitando quindi di dichiarare attributi che non verranno mai utilizzati;

3) astrazione di sistema: che riguarda l’intero software e lo rende in qualche modo indipendente dalla sua implementazione. Si può affermare che è una diretta conseguenza dell’astrazione dei dati che a sua volta dipende dall’astrazione funzionale.

Alla prossima.