Block Image

Il computer e il linguaggio macchina

Un computer è una macchina che accetta dei dati (istruzioni) in ingresso (input), li elabora e poi fornisce dei dati in uscita (output).
Le istruzioni che legge sono scritte in linguaggio macchina, che è un linguaggio binario poiché composto da soli due caratteri: 0 e 1. Le stringhe di 0 e 1 sono chiamate bit.

“La parola "ciao" codificata in binario:
01100011 01101001 01100001 01101111.“

Per poter interagire con i computer quindi, bisognerebbe scrivere delle istruzioni formate da 0 e 1. Per facilitare questo processo, è possibile interagire con un computer mediante dei linguaggi di programmazione ad alto livello. Alto livello significa che il linguaggio si avvicina a quello dell'uomo. Java e C sono esempi di linguaggio ad alto livello, infatti molte parole chiavi di questi linguaggi corrispondono a parole in inglese. Ma come fa il computer a capire queste istruzioni ad alto livello se è in grado di leggere solo 0 e 1?
Qui ci viene in aiuto i compilatori.

“Il compilatore di un certo linguaggio X (X può essere Java), è un programma che legge il programma sorgente,

contenente istruzioni scritte in quel linguaggio, e, se non sono presenti errori, lo trasforma in programma oggetto, cioè

un programma contenente le istruzioni scritte in linguaggio macchina.“

A quel punto il computer è in grado di leggere ed eseguire il programma oggetto.

Cosa significa programmare

La programmazione quindi consiste nello scrivere delle istruzioni di un determinato linguaggio di programmazione, in file chiamati sorgenti. L'insieme dei file sorgenti viene chiamato programma sorgente.
Possiamo scrivere istruzioni usando un qualsiasi editor di testo come un Blocco Note.
Una volta scritto il programma sorgente, esso viene compilato, cioè "trasformato"in un programma oggetto, scritto in linguaggio macchina e pronto per essere eseguito.

Fig.1 - Esempio di file sorgente Java.


Un programma permette di concretizzare la risoluzione di uno o più algoritmi.

“Un algoritmo è una sequenza finita di passi necessari a risolvere un problema. Uno stesso problema può essere risolto anche con algoritmi

diversi.“

Esempio di problema: Dati 2 numeri interi a e b in ingresso, calcolare il prodotto di a e b senza usare l'operatore della moltiplicazione.

Algoritmo:

Fig.2 - Flow chart dell'algoritmo somma.


Il flow chart o diagramma di flusso (o anche chiamato diagramma a blocchi), non è l'unico modo per rappresentare un algoritmo; un altro modo ad esempio è quello di usare un linguaggio pseudo-codice, cioè a metà tra le parole umane e quelle del linguaggio di programmazione:

  1. int a, b, conta = 1, somma = 0
  2. input a
  3. input b
  4. while conta <= b do
    4.1 somma = somma + a
    4.2 conta = conta + 1
  5. end while
  6. output somma

L'algoritmo poi dovrà essere scritto nel linguaggio di programmazione scelto.
Nella lezione successiva vedremo come scrivere questo algoritmo in Java.

Tipi di paradigmi di programmazione

Esistono vari tipi di paradigmi di programmazione, ossia vari modi di programmare.
Ogni linguaggio di programmazione usa uno o più paradigmi. Per semplicità chiariremo i concetti di paradigma procedurale e quello ad oggetti.

Nel paradigma procedurale, un programma può essere suddiviso in piccoli sottoprogrammi chiamati funzioni o procedure. L'esempio dell'algoritmo precedente può essere racchiuso in una funzione prodotto, richiamabile poi in qualunque punto del programma.

Block Image

Nell'immagine sopra possiamo vedere che sono state create 2 funzioni prodotto e divisione, richiamate poi in un punto del programma. Un esempio di linguaggio procedurale è il C.

La programmazione orientata agli oggetti è una evoluzione del paradigma precedente, si avvicina di più nel rappresentare il mondo reale in modo astratto. Consiste in oggetti che si scambiano messaggi tra di loro.
Una classe è una astrazione di un'entità del mondo reale. Un esempio di classe può essere Persona, Auto, Azienda. Ogni classe ha degli attributi. Ad esempio la classe Persona può avere come attributi nome, cognome, data di nascita.
Inoltre, oltre agli attributi, ogni classe ha dei metodi che sono un po' come le funzioni del paradigma procedurale. Ad esempio la classe Persona potrebbe avere il metodo calcolaEta o settaIlNome.
Un oggetto è un'istanza di una classe. Posso avere un oggetto chiamato Enzo di tipo Persona, un oggetto chiamato Marco di tipo Persona. Gli oggetti comunicano tra di loro tramite i metodi. Nella pratica, così come possiamo definire una variabile di nome "a" di tipo intero, posso definire una variabile di nome "Enzo" di tipo Persona.

Siccome Java è un linguaggio OOP, entreremo nel dettaglio di questo paradigma nelle lezioni successive.