Gardelli Luca, [email protected] II anno DU Ingegneria Informatica Linguaggi e Traduttori Conclusioni L’evoluzione della richiesta di software sempre più voluminosi e complessi ci ha condotto alla ricerca di un nuovo paradigma di programmazione. Delle possibili soluzioni ne abbiamo analizzata una in particolare: il paradigma ad oggetti. Il passaggio dai linguaggi imperativi a quelli ad oggetti può essere riassunto nel passaggio dall’algoritmo agli oggetti. L’algoritmo in se è più mirato ad applicativi di piccole dimensioni: quando le dimensioni raggiungono determinati livelli il sistema procedurale diventa ingestibile. I dati sono dispersi nel codice e difficilmente si riesce a ricordare il funzionamento delle procedure e quali variabili coinvolgono. Il paradigma ad oggetti risolve questo inconveniente assimilando i dati e le procedure in una nuova astrazione che prende il nome di classe: i programmi assumono quindi un aspetto più modulare (Incapsulamento). La modularità ci conduce verso un modello di protezione dati, del tutto nuovo per i linguaggi di tipo imperativo. La soluzione adottata consiste nel fornire un’interfaccia al cliente tramite la quale è possibile accedere a campi (Astrazione): ogni altro tentativo di accesso produrrà come effetto un errore. L’algoritmo è anche superato dal punto di vista del flusso di esecuzione del codice. Non esiste più un percorso forzato per l’andamento del programma: le nuove entità che istanziano una classe, gli oggetti, comunicano fra loro scambiandosi messaggi, i quali dipendono dal contesto corrente (Dinamicità). Il linguaggio preso in esame che adotta un paradigma ad oggetti è il Java. Gli sviluppatori di Java si sono posti come uno degli obiettivi primari il poter trasferire i programmi su qualsiasi macchina, a prescindere quindi dal sistema operativo installato e dall’hardware su cui opera: questa caratteristica viene detta portabilità. Questo risultato è stato raggiunto utilizzando una strategia simile a quella dei linguaggi interpretati. In realtà il codice viene parzialmente compilato, cioè non viene prodotto codice macchina: quello che si ottiene è il bytecode, il quale è indipendente dalla piattaforma. Questo bytecode viene poi gestito dalla macchina virtuale Java specifica per il sistema utilizzato. Questo è la motivazione principale per cui Java ha riscosso successo in Internet. Java inoltre supporta l’ereditarietà. Per ereditarietà si intende la possibilità di derivare oggetti da altri estendendone e modificandone le funzionalità, organizzando il sistema da modellare in una gerarchia. Tramite questo approccio è possibile programmare in maniera incrementale (bottom-up). In Java è possibile programmare in maniera concorrente: questa funzionalità è supportata tramite i thread. E’ possibile lanciare diversi thread in maniera da eseguire parallelamente più compiti, con un conseguente aumento delle prestazioni. Valutazione: 30/30 Le motivazioni di questa mia valutazione risiedono innanzi tutto nella cura riposta nella stesura delle relazioni, nel rispetto delle specifiche e nel tentativo di osservare i tempi di consegna. Da un’analisi delle relazioni dovrebbe emergere che ho acquisito una buona padronanza dei concetti discussi a lezione. Penso di aver dimostrato un notevole impegno e partecipazione sia alle lezioni sia per quanto riguarda le esercitazioni.