vuoi
o PayPal
tutte le volte che vuoi
Anatomia di un Calcolatore:
- Parte software ➔ istruzioni semplici ed eseguibili rapidamente
- Parte hardware
- CPU (central processing unit) ➔ di transistor; controlla l'esecuzione dei programmi e l'elaborazione dei dati
- si occupa di operazioni: aritmetiche e logiche
- esegue istruzioni macchina (stringa di codice binario) ➔ linguaggio poco produttore e difficile da comprendere
- si usano linguaggi di programmazione di alto livello, tradotti in L.M. da un compilatore
- CPU (central processing unit) ➔ di transistor; controlla l'esecuzione dei programmi e l'elaborazione dei dati
Vantaggi di Java:
- sicurezza
- portabilità
- scelta vasta di librerie
- designed for the Internet
- dati utili alle CPU sono recuperati da:
- memoria principale: RAM ➔ volatile
- memoria secondaria: hard disk (o SSD) ➔ anche senza alimentazione
Scrivere un programma in Java
- serve un editor di testo ➔ ce ne sono di appositi per la programmazione
- si scrive il file sorgente nell'editor, salvando con l'estensione .java ➔ case sensitive
- questo è dato in input al compilatore per essere tradotto in codice macchina
- il file sorgente viene tradotto in class file, che contiene istruzioni per la JVM
- si dà comandi testuali tramite prompt dei comandi:
- editor ➔ Source file ➔ Compilatore ➔ class file ➔ JVM ➔ running program (library files)
Alcuni Comandi:
- folder ➔ cartella in cui mi trovo
- cd nome cartella/file ➔ per spostarsi da una cartella a un'altra
- ls ➔ lista di tutte le cartelle
- per compilare: javac file_java ➔ creazione di un file eseguibile (class)
- per eseguire: java file
Errori:
- di sintassi/compilazione: non viene prodotto il file class
- logici (RUNTIME error): programma sintatticamente corretto, ma non fa quello che dovrebbe (non risolve quel task)
Eccezioni:
avviene al runtime e genera un messaggio della JVM, per errori logici gravi (es. division by zero)
Algoritmo:
Sequenza di passi per risolvere un task
- non ambiguo
- eseguibile
- terminating (deve risolvere il task in un tempo finito)
Descritta da uno pseudocodice ➔ testo informale e comprensibile, poi da tradurre in Java e compilazione del programma
Analisi di un programma
Classe [PrintStream o System.out(), String]
- definisce un insieme di oggetti con lo stesso comportamento (stessi metodi)
- può essere public, cioè può essere usata anche in altri file
- in ogni classe sono dichiarati alcuni metodi (main)
- contiene oggetti diversi, manipolabili solo dai metodi di quella classe
Oggetti [System.out]
- entità manipolabile con invocazioni di metodi
- tengono dati memorizzati al loro interno
- identificazione = tipo gruppo = identificativo
- possono richiedere argomenti o parametri
- creare un oggetto -> (new) vengono recuperate celle di memoria - si tiene memorizzata dentro una variabile (es.box) - può essere mandato in output con println
Variabili
- zone di memoria dotate di un nome [String, Int, Double]
- quando si dichiara è meglio specificare un valore iniziale = inizializzazione
- definite da identificatori: 1^ lettera, cifra, underscore, $
- Regole:
- non può iniziare con un numero
- non usare spazi all'interno
- non parole che fanno già parte del linguaggio Java
- case sensitive
- camelcase
Commenti
- // oppure /* */
- Per spiegare una spiegazione e rendere il codice riutilizzabile
Operatori di assegnazione
- = serve per assegnare un valore a una variabile (se è stato assegnato uno iniziale)
- dopo l'uguale può esserci un'operazione matematica
Metodi
- -> sequenza di istruzioni di programmazione che descrivono come svolgere un certo task
- ogni applicazione Java deve avere un metodo (main), contiene enunciati (terminano con ;)
- eseguito uno dopo l’altro dall’avvio del programma
- può essere necessario un argomento, che contiene info sul racchiuso da parentesi
Invocare un metodo: (si fa per usare un oggetto)
- classe di appartenenza [String]
- - numero e tipo di ciascun argomento -> river.replace("p", "s")
- tipo del valore di ritorno [se void non c'è]
- in una classe, possono esserci due metodi con lo stesso nome e argomenti diversi -> overloaded
3 categorie di metodi
- metodi di accesso = leggono solamente i dati dell'oggetto, senza modificarli
- metodi di trasformazione = fanno cambiare i dati (translate(4, 5))
- tutti i metodi di una classe costituiscono la sua public interface, specificano cosa si può fare con gli oggetti della classe.
Documentation API
(Application Programming Interface)
- Raggruppa classi e metodi delle librerie Java per essere usate dall'Application Programmer
- pacchetto = implementazioni di System da Programmer;
- classi organizzate in pacchetti -> Java essere importati nella prima riga per usarli
Cap. 5 - decisioni
- if
- enunciato che consente al programma di compiere azioni diverse in base alla natura dei dati
- condizioni visualizzabili col diagrammi di flusso
- sintassi: if(condizione) { enunciati 1; } else { enunciati 2; }
- enunciato che consente al programma di compiere azioni diverse in base alla natura dei dati
- operatori relazionali
- = per il confronto di numeri
- == > >= < meglio verificare che il numeroso sufficientemente prossimo a un valore soglia ε (inizializzato come costante)
- Confronto di stringhe
- (metodo equals) [ string1.equals(stringa2) ] oppure equalsIgnoreCase() ]
- per valutare l'ordine lessicografico -> metodo compareTo( )
- # le lettere maiuscole precedono tutte le minuscole e i numeri precedono le lettere
- Confronto di oggetti
- rispetto == , verifica se due riferimenti puntano allo stesso oggetto
- per confrontare i contenuti di oggetti, si usa il metodo equals (se è definito nella classe)
- e sì si nul come valore per denotare, perché valido come tutti gli altri numeri (# non si diverte da una stringa vuota)
- Costrutti IF/ELSE composti
- bisogna verificare prima le condizioni più specifiche, poi quelle più generiche (altrimenti le condizioni più stringenti, non verrebbero controllate)
- if(condizione) {enunciati 1;} else if(condizione ...) {enunciati 2;}
- Diremazioni ANNIDATE (nested branches)
- si ha quando all'interno di una condizione if, è presente un intero blocco IF/ELSE
- servono per risolvere problemi che richiedono decisioni su più livelli (es. tasseu)
- Code Coverage
- senza costrutti di decisione, tutte le situazioni sono eseguite, in serie (black box testing)
- Se invece ne abbiamo, vengono eseguite alcune al di dati incerti, => per collaudarlo, bisogna tenere conto della struttura interna del programma ==> white box testing
- =>si esamina ogni diramazione if/else, anche con valori anomomali (casi limite)
- espresioni booleane, -> due valori: TRUE/FALSE
- quando una metodo restituisce valore booleano, si dice metodo predicato
- (non è implementato in tutte le classi)
- si usa il specifici operatori booleani che combinano condizioni:
- && (and) e || (or), cioè and ha la precedenza su or
- per invertire una condizione, => ! (not)
- dalle origini a diagrammi di flusso differenti e ci sono TRASLIE di VERITÀ
- FLAG: