Fondamenti di Informatica
1.1 Calcolatori e programmi
I calcolatori eseguono istruzioni estremamente elementari a velocità molto elevata.
Di per sé, un computer è una macchina che immagazzina dati (numeri, parole, immagini), interagisce
con dispositivi (lo schermo, gli altoparlanti, la stampante) ed esegue programmi. Un programma per
calcolatore spiega con grande dettaglio al calcolatore quale sia la sequenza di passi che devono
hardware
essere messi in atto per risolvere un problema. Chiamiamo l’insieme costituito dalla parte
software.
fisica del calcolatore e dai suoi dispositivi periferici, mentre i programmi eseguiti sono il
progettazione
La e la realizzazione di programmi per computer sono due attività che prendono il
nome di programmazione. Essa consiste quindi nella progettazione e nella realizzazione di
programmi per computer.
1.2 Anatomia di un calcolatore
Nel cuore del calcolatore si trova l’unità centrale di elaborazione (CPU, centrai processing unit). La
CPU si occupa del controllo dell’esecuzione dei programmi e dell’elaborazione dei dati, cioè
individua ed esegue le istruzioni del programma: effettua le operazioni aritmetiche, recupera i dati
dalla memoria esterna o dai dispositivi periferici, per poi memorizzarvi i risultati delle elaborazioni.
Esistono due tipi di memoria:
memoria principale,
La detta anche semplicemente “memoria”, è costituita da circuiti elettronici
• che sono in grado di memorizzare dati quando sono alimentati elettricamente.
memoria secondaria,
La che generalmente è un disco rigido (hard disk) oppure un dispositivo allo
• stato solido, consente un’archiviazione dei dati meno costosa e più lenta, che, però, viene
mantenuta anche in assenza di elettricità.
N.B: Quando viene avviato un programma, le sue istruzioni vengono copiate nella memoria, dove la
CPU le può leggere: la CPU legge ed esegue un’istruzione per volta. A seconda delle direttive
espresse da tali istruzioni, la CPU legge dati, li modifica e li scrive nuovamente nella memoria
principale o nella memoria secondaria.
1.3 Linguaggio di programmazione java semplici istruzioni,
Un programma per computer è costituito da un gran numero di per tale motivo
sono stati ideati i linguaggi di programmazione di alto livello, mediante i quali si possono specificare
compilatore
le azioni che devono essere svolte da un programma, dopodiché sarà un a tradurre le
istruzioni di alto livello nelle più dettagliate istruzioni necessarie alla CPU, che vengono chiamate
codice macchina. libreria
Java ha una ricca che permette di scrivere programmi portabili (cioè “trasferibili”) da un
sicurezza portabilità.
sistema operativo all’altro. Inoltre esso ha due qualità: e
L’ambiente Java consente a chiunque di eseguire programmi all’interno del proprio browser senza
• alcun timore: le caratteristiche di sicurezza previste dal linguaggio Java garantiscono l’interruzione
dell’esecuzione di un programma nel momento in cui questo tenti di compiere azioni
potenzialmente non sicure.
L’altro vantaggio di Java è la portabilità: il compilatore Java non traduce i programmi Java
• direttamente in istruzioni per la CPU. I programmi Java compilati contengono, invece, istruzioni
eseguibili dalla macchina virtuale Java, un programma che simula il funzionamento di una CPU
reale per questo motivi può operare in molti sistemi operativi.
I diversi sistemi operativi richiedono azioni significativamente differenti per mettere in esecuzione
editor,
l’ambiente di sviluppo Java. Bisogna innanzitutto eseguire un cioè un programma che svolge
una funzione analoga a un elaboratore di testi, poi è necessario aprire una finestra per l’esecuzione
di comandi o “finestra di terminale”, dove digitare i comandi che eseguono il programma realizzato.
N.B: Prima di poter eseguire il programma, il compilatore Java traduce il file sorgente, cioè gli
enunciati che avete scritto, in file di classi, contenenti istruzioni per la macchina virtuale Java. Dopo
che il compilatore ha tradotto il codice sorgente in istruzioni per la macchina virtuale, questa le può
eseguire. Durante l’esecuzione, la macchina virtuale accede a una libreria di codice precompilato.
1.6 Errori
In java possono presentarsi diversi tipi di errore quali:
Errore in fase di compilazione
1. (compile-time error) o errore di sintassi: in base alle regole del
linguaggio c’è qualcosa di sbagliato e il compilatore se ne accorge.
Errore in fase di esecuzione
2. o errori logici : il programma è sintatticamente corretto e fa
qualcosa, ma non quello che dovrebbe fare.
3. Altri errori logici, invece, sono tanto gravi da generare un’eccezione: un messaggio d’errore
emesso dalla macchina virtuale Java.
1.7 Il concetto di algoritmo
Per fornire una risposta a un problema che preveda il calcolo di una risposta, un programma per
calcolatore deve seguire una sequenza di passi che:
Non sia ambigua
• Sia eseguibile
• Arrivi a compimento (in un tempo finito)
• Una sequenza di passi che non sia ambigua, che sia eseguibile e che termini in un tempo finito
algoritmo.
prende il nome di
Lo pseudo codice, inoltre, è una descrizione informale di una sequenza di passi che risolvono un
problema.
Utilizzare Oggetti (Capitolo 2)
INVOCAZIONE DICHIARAZIONE
Variabili ASSEGNAZIONE,
/ Scrittura: tipo nome= valore vale solo per le
Es: int width=20; variabili. Esso o inizializza la variabile
oppure modifica il valore assunto dalla
variabile precedentemente.
Es: width=20; /
width= width+10;/
width= height;
Metodi Invoco un metodo che altri hanno già creato. I Descrivo che cosa fa il metodo. Siamo /
metodi sono usati per manipolare gli oggetti. noi a specificare le istruzioni/parametri
che dovrà eseguire. Per la dichiarazione
tipo dei parametri
Scrittura: oggetto.metodo(); abbiamo bisogno del e
tipo del valore restituito.
Es: del
String greeting= “hello, World!”;
• Int numberOfCharacters= greeting. length(); Scrittura: public tipovalorerestituito
String river= “Mississippi” ; metodo (tipoargomento argomento)
• String bigRiver= river.toUppercase(); Es:
String river= “Mississippi” ; public String replace(String target,
• •
String river= river.replace(“issipp”, “our”); String replacement)
box.translate(15,20); public void println (int output)
• •
N.B: si possono invocare più metodi alla volta con
“l’invocazione a cascata”
Es—> greeting.replace(“World”, “Dave”). length();
oggetto del metodo
Oggetti COSTRUZIONE OGGETTI
/ / , si usa
new
l’operatore seguito dal nome della
classe e da parametri opportuni.
Es: new Rectangle(5,10,30,15)
operatore
Dopo averlo creato questo si può salvare
variabile oggetto
in una che deve avere
come tipo la classe dell’oggetto.
All’interno della variabile non c’è l’oggetto
ma solo un riferimento ad esso che ne
descrive la sua posizione in memoria.
Es: box=
Rectangle new Rectangle(5,9,3,4);
tipo
Pacchetto / / La documentazione Api contiene
pacchetti in cui sono organizzate classi:
per utilizzarle bisogna sempre importare
questi pacchetti.
Es: import nomepacchetto.nomeclasse;
⌇
N.B: le variabili possono essere di tipo: Differenze:
1. Locale: sono dichiarate e inizializzate nel corpo del metodo ed entrano in vita quando - Parametri, locali sempre inizializzate
si invoca il metodo; muoiono alla fine dell’istruzione. (istanza no)
appartengono ai metodi
2. Parametro: vanno dichiarate e inizializzate con il nell’argomento del
valore di chiamata - Istanza, visibili in tutto il programma (altre
metodo, entrano in vita quando si invoca il metodo; muoiono alla fine dell’istruzione. no)
⌇
3. Di Istanza: entrano in vita quando viene creato l’oggetto, muoiono quando non viene - Istanza sempre “vive” fintanto che
più utilizzato l’oggetto. Possono non essere inizializzate perché assumono un valore l’oggetto viene usato. Le altre muoiono
appartiene agli oggetti
iniziale di default (0 per i numeri, null per le variabili oggetto). quando finisce l’istruzione del metodo
Realizzare Classi (Capitolo 3)
Struttura Dichiarazione Metodi
CLASSI Interfaccia Pubblica La classe descrive i comportamenti di un All’interno della classe i metodi si
Essa specifica cosa si può fare con gli oggetti insieme di oggetti e definisce dei metodi invocano e si dichiarano secondo la
della sua classe. È formata da che vengono utilizzati per manipolare gli classica struttura.
I. oggetti stessi. In generale la sintassi per
Intestazione dei metodi pubblici:
Struttura: ModalitàdiAccesso tipo nomeMetodo() la dichiarazione di una classe è: Es: Metodi Classe Counter
-
Es: public void deposit(double amount) click, incrementa di una unità il
public double getBalance() Scrittura: valore del contatore
-
ModalitàdiAccesso class NomeClasse getValue, restituisce il valore
II. I costruttori { variabili esemplare attuale del conteggio
Dichiarazione dei costruttori.
impostano valori iniziali per i dati degli oggetti, costruttori
cioè inizializzano gli oggetti. Il nome del metodi
costruttore è sempre uguale al nome della }
classe; essi non definiscono il tipo del valore N.B:
restituito. Quella dentro le graffe è la
variabile di istanza.
dichiarazione della
Struttura: modalitàdiAccesso nomeCostruttore() Essa memorizza i dati necessari per
l’esecuzione dei propri metodi.
Implementazione privata
Essa comprende le variabili di esemplare Es: public class NomedelleClasse
(descrivono i dati interni dell’oggetto), il corpo di { private tipo nomeVariabile }
costruttori(inizializza gli oggetti) e metodi info private del progettista
(istruzioni che modificano le variabili di istanza).
N.B: nell’implementazione di un metodo si
definisce una variabile parametro per ogni
argomento che si vuole ricevere ma non viene
analogamente definita una variabile parametro
per memorizzare l’oggetto con cui il metodo verrà
invocato, quest’ultimo è il parametro implicito
Tutte le variabili parametro, invece, sono i
(THIS).
parametri espliciti.
File BankAccount.java File BankAccountTester.java
Esempio completo public class BankAccount public class BankAccountTester
{ {
private double balance; //collauda i metodi della classe BankAccount
public BankAccount()
{ balance=0; public static void main (String[] args )
} {
public BankAccount(double initialBalance) BankAccount harrysChecking= new BankAccount();
{ harrysChecking.deposit(2000);
balance=initialBalance; harrysChecking.withdraw(500);
} System.out.println(harrysChecking.getBalance());
public void deposit (double amount) System.out.println(“expected: 1500”);
{ }
balance= balance+amount; }
}
public void withdraw (double amount)
{
balance= balance-amount; N.B:
} In questo caso devo salvare i due file nella stessa directory e
public double getBalance() successivamente:
{ Compilare entrambi i file;
•
return balance; Eseguire solo il programma tester.
•
}
}
N.B: Qui si può utilizzare anche un altro metodo, il
metodo transfer che trasferisce il saldo da un
conto a un altro.
Scrittura: public void transfer (BankAccount
finale, double amount)
{
this.withdrow (amount);
finale.deposit(amount);
}
Tipi di dati fondamentali (Capitolo 4)
Numeri Aritmetica Dati in ingresso e in uscita Stringhe
I tipi Operatori aritmetici Per acquisire dati tramite la Una stringa è una sequenza
Java ha otto tipi primitivi, tra i quali : Java consente l’esecuzione delle quattro tastiera, all’interno di una di caratteri (caratteri= valori
- quattro tipi numerici interi: operazioni aritmetiche basilari: addizione, finestra di console, si usa la di tipo char).
int, byte, short, CLASSE SCANNER. ↓
sottrazione, divisione, moltiplicazione.
long; Scrittura: I caratteri hanno valori
•
N.B: Incrementazione:
All’interno delle variabili di tipo intero Scrittura: numerici e letterali (‘H’, solo
—>items=
si possono inserire solo numeri compresi items++ items+1; import java.util.Scanner; un apice). I metodi principali
• Decrementazione:
in un certo range (tra circa -2 miliardi e +2 Scanner in= new Scanner di tipo char sono:
miliardi). Perciò per i valori più grandi si Items- - —>items= items-1; (System.in); charAt: restituisce un
•
• Creo oggetto di tipo Scanner
Divisione intera:
utilizza il tipo long, per quelli più piccoli il valore di tipo char estratto
per leggere dalla testiera
tipo short. intero/intero restituisce un numero intero e ignora da una stringa. I caratteri
il resto della divisione. Per avere anche la parte System.out.print(“please di ciascuna stringa hanno
- si
due tipi numerici in virgola mobile: decimale è necessario utilizzare il tipo double. enter the number: ”); una propria posizione:
• parte sempre a contare
Modulo: operatore che restituisce il resto della Int numer= in.nextInt();
double, float;
- Definisce una variabile per dalla posizione 0.
Un tipo per memorizzare caratteri: divisione intera (7%4)
char;
- memorizzare il valore Scrittura:
un tipo che può assumere solo due La libreria java contiene molte funzioni Public char charAt (int
acquisito
valori, vero o falso: boolean. matematiche tra cui le più importanti: posizione)
Errori n
x N.B: L’istruzione Es:
• Math.pow (x,n) —> ;
Errori di overflows: questi errori avvengono next—> legge una parola; String nome= “Harry”;
•
quando il risultato di un calcolo non rientra nextLine—> una riga; char start= nome.charAt(0);
x
• Math.sqrt (x) —> ;
nell’intervallo di variabilità del tipo nextInt—> un numero int; Char last= nome.charAt(4);
• Math.round (x) —> metodo che arrotonda il
numerico; nextdouble—> un numero
valore all’intero più vicino, il valore che viene
Errore di arrotondamento: i calcolatori double. substring: restituisce una
•
restituito è di tipo long.
rappresentano i numeri con il sistema parte della stringa a
binario nel quale non esiste una partire dalla pos iniziale
N.B: metodo statico
Il è un metodo che non
rappresentazione esatta di certi numeri fino alla pos finale-1.
opera su nessun oggetto. Essi infatti non
razionali perciò si sfocia in un errore di Es:
vengono invocati nel metodo usuale ma viene
arrotondamento; String hi= “Hello!”;
specificata la classe al posto dell’oggetto.
Errori di assegnazione: non si può String sub=hi.substring(1,4);
assegnare un valore di tipo double in una Scrittura:
variabile intera. nomeClasse.nomeMetodoStatico(argomento)
Costanti CashRegisterSimulator.java
Essi sono dei valori che non vengono import java.util.Scanner;
modificati e che hanno un significato ben
preciso all’interno dell’elaborazione. Per public class CashRegisterSimulator
definire tali variabili si usa l’attributo { public static void main(String[] args)
FINAL. { Scanner in = new Scanner(system.in);
Scrittura: CashRegister register = new CashRegister();
final TipoVariabile NOMEVARIABILE=
Valorevariabile; System.out.print("Enter price: ");
Definita nel corpo del metodo visibile solo lì. double price = in.nextDouble();
register.recordPurchase(price);
Se esse devono essere utilizzate in più
metodi, è conveniente dichiararle assieme System.out.print("Enter dollars: ");
alle variabili di istanza int dollars = in.nextInt();
Scrittura: System.out.print("Enter quarters: ");
p u b l i c s t a t i c fi n a l t i p o V a r i a b i l e int quarters = in.nextInt();
NOMEVARIABILE= Valorevariabile; System.out.print("Enter dimes: ");
int dimes = in.nextInt();
System.out.print("Enter nickels: ");
int nickels = in.nextInt();
System.out.print("Enter pennies: ");
int pennies = in.nextInt();
register.enterPayment (dollars, quarters, dimes, nickels,
pennies);
System.out.print("Your change: ");
System.out.println(register.giveChange());
}
}
Decisioni (Capitolo 5)
Enunciato if Def: L’enunciato if con
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Fondamenti cpp
-
Fondamenti di informatica
-
Appunti Fondamenti di informatica
-
Fondamenti di informatica