Programmazione Informatica: linguaggi, paradigmi e linguaggio macchina

Slide da Universitas Studiorum Tergestum su Programmazione Informatica. La Pdf esplora i concetti fondamentali dei linguaggi di programmazione, la loro classificazione e i paradigmi, con un focus sul linguaggio macchina. Questo materiale di Informatica per l'Università è utile per comprendere i principi base dell'informatica.

Ver más

18 páginas

PROGRAMMAZIONE
INFORMATICA
LINGUAGGI DI PROGRAMMAZIONE
LINGUAGGIO DI PROGRAMMAZIONE
Un linguaggio di programmazione è un insieme strutturato di regole e simboli che permettono
ai programmatori di scrivere istruzioni comprensibili da una macchina, ovvero il computer.
Lobiettivo di questi linguaggi è rendere più facile e intuitivo il processo di creazione di
programmi che realizzano operazioni specifiche.
Le istruzioni sono tradotte in linguaggio macchina, il quale può essere eseguito direttamente
dalla CPU. Tuttavia, senza un linguaggio di programmazione, i programmatori dovrebbero
scrivere i programmi usando solo sequenze di 0 e 1, rendendo il compito estremamente
complesso.

Visualiza gratis el PDF completo

Regístrate para acceder al documento completo y transformarlo con la IA.

Vista previa

Programmazione Informatica

Linguaggi di Programmazione

Un linguaggio di programmazione è un insieme strutturato di regole e simboli che permettono ai programmatori di scrivere istruzioni comprensibili da una macchina, ovvero il computer. L'obiettivo di questi linguaggi è rendere più facile e intuitivo il processo di creazione di programmi che realizzano operazioni specifiche. Le istruzioni sono tradotte in linguaggio macchina, il quale può essere eseguito direttamente dalla CPU. Tuttavia, senza un linguaggio di programmazione, i programmatori dovrebbero scrivere i programmi usando solo sequenze di 0 e 1, rendendo il compito estremamente complesso.

Componenti Fondamentali dei Linguaggi

  • Sintassi: regole e strutture che determinano come devono essere scritte le istruzioni del linguaggio. In altre parole, la sintassi definisce la forma e la struttura dei programmi, specificando come i simboli, le parole chiave e le espressioni possono essere combinati per formare istruzioni valide.
  • Semantica: significato delle istruzioni e delle espressioni. In altre parole, la semantica stabilisce cosa fa il codice quando viene eseguito e quale è il suo comportamento. Mentre la sintassi si occupa della forma, la semantica si occupa del contenuto.
  • Struttura del linguaggio: Molti linguaggi di programmazione supportano strutture di controllo (come condizionali e cicli), funzioni, variabili, e tipi di dati, che permettono di scrivere programmi modulari e complessi.

Classificazione dei Linguaggi

  • Linguaggi di alto livello: Sono linguaggi progettati per essere comprensibili dagli esseri umani. La loro sintassi è vicina al linguaggio naturale, rendendo lo sviluppo di software più veloce ed efficiente. Offrono funzionalità come la gestione automatica della memoria e librerie standard per semplificare lo sviluppo. Sono indipendenti dall'hardware e necessitano di essere tradotti in linguaggio macchina tramite un compilatore o un interprete.
  • Linguaggi di basso livello: Sono più vicini al linguaggio macchina e offrono un maggiore controllo diretto sull'hardware. Rispetto ai linguaggi di alto livello, sono più difficili da imparare e utilizzare, ma consentono ottimizzazioni più fini del codice. Sono specifici per ogni architettura e sono eseguiti più velocemente.

Paradigmi di Programmazione

Modello di sviluppo software che definisce come i problemi dovrebbero essere risolti e come i programmi dovrebbero essere strutturati. Esistono diversi paradigmi che influenzano la sintassi e la semantica dei linguaggi di programmazione.

  • Programmazione imperativa: i programmi consistono in una sequenza di istruzioni che il computer esegue passo dopo passo. Si basa sull'uso di variabili, cicli e strutture di controllo per modificare lo stato del programma (C, C++, Java, Python).
  • Programmazione dichiarativa: invece di specificare esattamente come risolvere un problema, si descrive il risultato desiderato e il linguaggio determina come raggiungere tale risultato. Si concentra più sul "cosa fare" piuttosto che sul "come farlo" (SQL, Prolog).
  • Programmazione orientata agli oggetti: i programmi sono organizzati attorno agli oggetti, che rappresentano entità reali o astratte e contengono dati e metodi (Java, C++, Python.).
  • Programmazione procedurale: organizza il codice in una serie di istruzioni o procedure, spesso chiamate funzioni o subroutine, che vengono eseguite in modo sequenziale per raggiungere un obiettivo o risolvere un problema.

Linguaggio Macchina

Il linguaggio macchina è la forma più elementare di linguaggio di programmazione. È composto esclusivamente da sequenze binarie di 0 e 1 (bit), che rappresentano istruzioni comprensibili ed eseguibili direttamente dalla CPU. Ogni processore ha il suo set di istruzioni, chiamato Instruction Set Architecture (ISA), che specifica le operazioni che può eseguire, come sommare numeri, caricare dati in memoria o saltare a un'altra istruzione. Il linguaggio macchina è strettamente legato all'hardware e ogni tipo di processore ha il suo specifico linguaggio macchina. Ad esempio, un programma scritto per un processore Intel non funzionerà direttamente su un processore ARM, poiché utilizzano ISA differenti.

Caratteristiche del Linguaggio Macchina

  • Codice binario: Tutte le istruzioni sono rappresentate come combinazioni di 0 e 1. 10110100 00000001
  • Legato all'hardware: Il linguaggio macchina dipende dall'architettura del processore. Ogni CPU ha il proprio set di istruzioni.
  • Non leggibile per gli esseri umani: Il linguaggio macchina è praticamente incomprensibile senza strumenti di analisi specifici. Un programma scritto in linguaggio macchina è difficile da leggere, scrivere e mantenere.
  • Massima efficienza: Poiché è direttamente eseguibile dalla CPU, non c'è alcun livello di astrazione tra il programma e l'hardware, rendendolo estremamente efficiente in termini di esecuzione.

Esempio di Linguaggio Macchina

Supponiamo di voler sommare due numeri interi (ad esempio 5 e 3). La CPU eseguirebbe una serie di istruzioni binarie come le seguenti: - Caricamento del numero 5 in un registro: 10110000 00000101 Questo codice potrebbe significare "carica il valore 5 nel registro A". - Caricamento del numero 3 in un altro registro: 10110001 00000011 Questo codice potrebbe significare "carica il valore 3 nel registro B". - Somma dei due registri: 00000011 11000010 Questo codice potrebbe significare "somma i valori dei registri A e B".

Linguaggio Assembly

Il linguaggio assembly è una rappresentazione testuale e mnemonica del linguaggio macchina. Permette ai programmatori di scrivere codice in una forma più leggibile rispetto al codice binario, ma rimane comunque molto vicino all'hardware. Ogni istruzione in assembly corrisponde direttamente a un'istruzione in linguaggio macchina. In assembly, invece di lavorare con numeri binari, si utilizzano abbreviazioni chiamate mnemonici che rappresentano operazioni di base. Per esempio, l'istruzione "ADD" potrebbe rappresentare un'operazione di somma, e "MOV" potrebbe rappresentare lo spostamento di dati da una locazione a un'altra.

Caratteristiche del Linguaggio Assembly

  • Mnemonici: Invece di scrivere in codice binario, il programmatore usa abbreviazioni leggibili per rappresentare le istruzioni.
  • Relativamente più leggibile: Sebbene assembly sia più leggibile rispetto al linguaggio macchina, è ancora molto vicino all'hardware e richiede una buona conoscenza dell'architettura del processore.
  • Tradotto da un assemblatore: Il codice assembly viene tradotto in linguaggio macchina da un programma chiamato assemblatore. Questo permette di trasformare il codice mnemonico in istruzioni binarie eseguibili dalla CPU.
  • Dipendente dall'architettura: Come il linguaggio macchina, anche il codice assembly è specifico per il tipo di processore e non può essere eseguito su un'architettura diversa senza modifiche.

Esempio di Linguaggio Assembly

Supponiamo di voler sommare due numeri interi, come nel caso del linguaggio macchina: - Caricamento del numero 5 in un registro: MOV AX, 5 - Caricamento del numero 3 in un altro registro: MOV BX, 3 - Somma dei valori nei registri AX e BX: ADD AX, BX - Risultato: Dopo l'istruzione ADD, il registro AX conterrà il valore 8, che è la somma di 5 e 3.

Differenze tra Linguaggio Macchina e Assembly

Caratteristica Linguaggio Macchina Linguaggio Assembly Rappresentazione Codice binario (sequenze di 0 e 1) Mnemonici (abbreviazioni testuali) Leggibilità Molto difficile per gli esseri umani Relativamente più leggibile Esecuzione diretta Eseguibile direttamente dalla CPU Deve essere tradotto in linguaggio macchina dall'assemblatore Astrazione Nessuna astrazione, massimo controllo sull'hardware Bassa astrazione, ma più leggibile rispetto al linguaggio macchina Mantenibilità del codice Molto difficile da mantenere Più semplice rispetto al linguaggio macchina, ma comunque complesso

Compilatori ed Interpreti

Per tradurre il codice sorgente (scritto dal programmatore) in codice eseguibile dalla CPU, sono necessari strumenti che eseguano questa traduzione. Qui entrano in gioco compilatori e interpreti, che sono due modi differenti di trasformare il codice sorgente in codice macchina. Un compilatore è un programma che prende in ingresso il codice sorgente di un programma e lo traduce completamente in linguaggio macchina prima che il programma venga eseguito. Questa traduzione crea un file eseguibile, che può essere lanciato in un secondo momento senza la necessità di ritradurre il codice. Un interprete è un programma che legge e interpreta il codice sorgente linea per linea o istruzione per istruzione, traducendo ed eseguendo il codice in tempo reale senza produrre un file eseguibile separato.

Differenze tra Compilatore e Interprete

Caratteristica Compilatore Interprete Modalità di traduzione Traduce l'intero programma in linguaggio macchina prima dell'esecuzione. Traduce ed esegue il programma istruzione per istruzione. Tempo di esecuzione Il codice tradotto viene eseguito in modo indipendente dal compilatore, quindi l'esecuzione è molto veloce. L'esecuzione è generalmente più lenta, perché ogni istruzione deve essere tradotta al momento dell'esecuzione. File eseguibile Genera un file eseguibile Non genera un file eseguibile. L'interprete deve essere presente ogni volta che si esegue il programma. Diagnosi di errori Gli errori vengono rilevati prima dell'esecuzione, durante la fase di compilazione. Gli errori vengono rilevati durante l'esecuzione, istruzione per istruzione. Efficienza Poiché tutto il codice è tradotto in un'unica volta, i programmi compilati tendono a essere più efficienti in fase di esecuzione. L'esecuzione può essere più lenta, poiché ogni istruzione viene interpretata al volo. Esempi di linguaggi C, C++, Java Python, Ruby, JavaScript, R

Processo di Compilazione

  1. Analisi lessicale (Lexer): il compilatore legge il codice sorgente e lo scompone in unità più piccole chiamate token. Ogni token rappresenta un simbolo di base del linguaggio, come una parola chiave (ad esempio if, while), un identificatore (come il nome di una variabile), un operatore o un delimitatore (ad esempio ;).
  2. Analisi sintattica (Parser): il compilatore verifica se la sequenza di token generata dall'analisi lessicale segue le regole grammaticali (sintassi) del linguaggio di programmazione. Costruisce una struttura ad albero chiamata albero sintattico o albero di derivazione che rappresenta la struttura gerarchica del codice.
  3. Analisi semantica: il compilatore verifica il significato del codice, ovvero se ogni istruzione ha un senso nel contesto del programma. Ad esempio, verifica che le variabili siano dichiarate prima di essere utilizzate, che i tipi di dati siano compatibili e che le operazioni aritmetiche siano applicate correttamente.

¿Non has encontrado lo que buscabas?

Explora otros temas en la Algor library o crea directamente tus materiales con la IA.