Concetti di informatica e fondamenti di Java
di Cay Horstmann
Aggiornamenti e Contenuti Digitali
Il libro di Horstmann si è imposto negli anni come efficace supporto didattico nei corsi universitari di programmazione e, al tempo stesso, come prezioso riferimento per l’apprendimento autonomo.
Anche in questa edizione il testo mantiene le caratteristiche che da venti anni ne hanno decretato il grande successo: un approccio graduale alla programmazione, che permette di assimilare anche i concetti più difficili; una particolare enfasi sull’attività di problem-solving, della quale vengono resi espliciti i passaggi; una straordinaria ricchezza di esempi svolti, esercizi e problemi.
Nella nuova edizione l’Autore ha introdotto, tra tanti miglioramenti, l’adeguamento alla versione Java 11 del linguaggio, nonostante la maggior parte degli esempi sia perfettamente funzionante anche con versioni precedenti, a partire da Java 8.
Cay Horstmann
Insegna Computer Science presso il Department of Computer Science della San Jose State University.
L’edizione italiana è a cura di Marcello Dalpasso
Docente di Sistemi per l’Elaborazione dell’Informazione presso la Scuola di Ingegneria dell’Università di Padova.
settima edizione per Java 8, 9, 10 e 11
Pagine | 804 |
Data pubblicazione | Dicembre 2019 |
Data ristampa | |
Autori | Cay Horstmann |
ISBN | 8891639431 |
ean | 9788891639431 |
Tipologia prodotto | Cartaceo |
Collana | Apogeo Education |
Editore | Maggioli Editore |
Dimensione | 19x23,5 |
Presentazione della edizione italiana
Prefazione
Capitolo 1 - Introduzione
Obiettivi del capitolo
1.1 Calcolatori e programmi
1.2 L’anatomia di un calcolatore
1.3 Il linguaggio di programmazione Java
1.4 L’ambiente di programmazione Java
1.5 Analisi di un semplice programma
1.6 Errori
1.7 Problem Solving: progettazione di algoritmi
1.7.1 Il concetto di algoritmo
1.7.2 Un algoritmo che risolve un problema fi nanziario
1.7.3 Pseudocodice
1.7.4 Dagli algoritmi ai programmi
Riepilogo degli obiettivi di apprendimento
Elementi di libreria presentati nel capitolo
Esercizi di riepilogo e approfondimento
Esercizi di programmazione
Capitolo 2 - Utilizzare oggetti
Obiettivi del capitolo
2.1 Oggetti e classi
2.1.1 Utilizzare oggetti
2.1.2 Classi
2.2 Variabili
2.2.1 Dichiarazioni di variabili
2.2.2 Tipi
2.2.3 Nomi
2.2.4 Commenti
2.2.5 Assegnazioni
2.3 Invocare metodi
2.3.1 L’interfaccia pubblica di una classe
2.3.2 Parametri dei metodi
2.3.3 Valori restituiti
2.3.4 Dichiarazioni di metodi
2.4 Costruire oggetti
2.5 Metodi d’accesso e metodi modifi catori
2.6 La documentazione API
2.6.1 Consultare la documentazione API
2.6.2 Pacchetti
2.7 Realizzare un programma di collaudo
2.8 Riferimenti a oggetti
2.9 Applicazioni grafiche
2.9.1 Finestre con cornice
2.9.2 Disegnare in un componente
2.9.3 Visualizzare un componente in un frame
2.10 Ellissi, segmenti, testo e colore
2.10.1 Ellissi e cerchi
2.10.2 Segmenti
2.10.3 Scrivere testo
2.10.4 Colori
Riepilogo degli obiettivi di apprendimento
Elementi di libreria presentati in questo capitolo
Esercizi di riepilogo e approfondimento
Esercizi di programmazione
Capitolo 3 - Realizzare classi
Obiettivi del capitolo
3.1 Variabili di esemplare e incapsulamento
3.1.1 Variabili di esemplare
3.1.2 I metodi della classe Counter
3.1.3 Incapsulamento
3.2 Progettare l’interfaccia pubblica di una classe
3.2.1 Definire i metodi
3.2.2 Definire i costruttori
3.2.3 Usare l’interfaccia pubblica
3.2.4 Commentare l’interfaccia pubblica
3.3 Realizzare la classe
3.3.1 Definire le variabili di esemplare
3.3.2 Definire i costruttori
3.3.3 Definire i metodi
3.4 Collaudo di unità
3.5 Problem Solving: tenere traccia dell’esecuzione
3.6 Variabili locali
3.7 Il riferimento this
3.8 Classi per figure complesse
Riepilogo degli obiettivi di apprendimento
Esercizi di riepilogo e approfondimento
Esercizi di programmazione
Capitolo 4 - Tipi di dati fondamentali
Obiettivi del capitolo
4.1 Numeri
4.1.1 Tipi di numeri
4.1.2 Costanti
4.2 Aritmetica
4.2.1 Operatori aritmetici
4.2.2 Incremento e decremento
4.2.3 Divisione intera e resto
4.2.4 Potenze e radici
4.2.5 Conversione e arrotondamento
4.3 Dati in ingresso e in uscita
4.3.1 Acquisire dati
4.3.2 Controllare il formato di visualizzazione
4.4 Problem Solving: prima si risolve a mano
4.5 Stringhe
4.5.1 Il tipo di dato String
4.5.2 Concatenazione
4.5.3 Acquisire stringhe in ingresso
4.5.4 Sequenze di escape
4.5.5 Stringhe e caratteri
4.5.6 Sottostringhe
Riepilogo degli obiettivi di apprendimento
Elementi di libreria presentati in questo capitolo
Esercizi di riepilogo e approfondimento
Esercizi di programmazione
Capitolo 5 - Decisioni
Obiettivi del capitolo
5.1 L’enunciato if
5.2 Confrontare valori
5.2.1 Operatori relazionali
5.2.2 Confrontare numeri in virgola mobile
5.2.3 Confrontare stringhe
5.2.4 Confrontare oggetti
5.2.5 Confrontare con null
5.3 Alternative multiple
5.4 Diramazioni annidate
5.5 Problem Solving: diagrammi di flusso
5.6 Problem Solving: preparare casi di prova
5.7 Variabili booleane e operatori
5.8 Applicazione: validità dei dati in ingresso
Riepilogo degli obiettivi di apprendimento
Elementi di libreria presentati in questo capitolo
Esercizi di riepilogo e approfondimento
Esercizi di programmazione
Capitolo 6 - Iterazioni
Obiettivi del capitolo
6.1 Il ciclo while
6.2 Problem Solving: esecuzione manuale
6.3 Il ciclo for
6.4 Il ciclo do
6.5 Applicazione: elaborazione di valori sentinella
6.6 Problem Solving: storyboard
6.7 Algoritmi di uso frequente che utilizzano cicli
6.7.1 Calcolo di somma e valore medio
6.7.2 Conteggio di valori che soddisfano una condizione
6.7.3 Identifi cazione della prima corrispondenza
6.7.4 Richiesta ripetuta fino al raggiungimento di un obiettivo
6.7.5 Valore massimo e minimo
6.7.6 Confronto di valori adiacenti
6.8 Cicli annidati
6.9 Applicazione: numeri casuali e simulazioni
6.9.1 Generare numeri casuali
6.9.2 Il metodo Monte Carlo
6.10 Usare un debugger
Riepilogo degli obiettivi di apprendimento
Elementi di libreria presentati in questo capitolo
Esercizi di riepilogo e approfondimento
Esercizi di programmazione
Capitolo 7 - Array e vettori
Obiettivi del capitolo
7.1 Array
7.1.1 Dichiarazione e utilizzo di array
7.1.2 Riferimenti ad array
7.1.3 Array e metodi
7.1.4 Array riempiti solo in parte
7.2 Il ciclo for esteso
7.3 Algoritmi fondamentali per l’elaborazione di array
7.3.1 Riempimento
7.3.2 Somma e valore medio
7.3.3 Valore massimo e minimo
7.3.4 Elementi con separatori
7.3.5 Ricerca lineare
7.3.6 Eliminazione di un elemento
7.3.7 Inserimento di un elemento
7.3.8 Scambio di elementi
7.3.9 Copiatura di array
7.3.10 Acquisizione di valori
7.4 Problem Solving: adattamento di algoritmi
7.5 Problem Solving: progettare algoritmi facendo esperimenti
7.6 Array bidimensionali
7.6.1 Dichiarazione di array bidimensionali
7.6.2 Accesso agli elementi
7.6.3 Individuazione degli elementi adiacenti
7.6.4 Accedere a righe e colonne
7.6.5 Dimensioni di un array bidimensionale
7.7 Vettori
7.7.1 Dichiarazione e utilizzo di vettori
7.7.2 Il ciclo for esteso usato con vettori
7.7.3 Copiatura di un vettore
7.7.4 Classi involucro (wrapper) e auto-boxing
7.7.5 Algoritmi per array usati con vettori
7.7.6 Acquisizione di valori in un vettore
7.7.7 Eliminazione di specifici valori
7.7.8 Array o vettore?
7.8 Collaudo regressivo
Riepilogo degli obiettivi di apprendimento
Elementi di libreria presentati in questo capitolo
Esercizi di riepilogo e approfondimento
Esercizi di programmazione
Capitolo 8 - Progettazione di classi
Obiettivi del capitolo
8.1 Individuare le classi
8.2 Progettare buoni metodi
8.2.1 Un’interfaccia pubblica coesa
8.2.2 Minimizzare le dipendenze
8.2.3 Tenere distinti accessi e modifiche
8.2.4 Minimizzare gli effetti collaterali
8.3 Problem Solving: progettare i dati di un oggetto
8.3.1 Gestione di un totale
8.3.2 Conteggio di eventi
8.3.3 Gestione di una raccolta di valori
8.3.4 Gestione delle proprietà di un oggetto
8.3.5 Oggetti con stati diversi
8.3.6 Descrizione della posizione di un oggetto
8.4 Variabili statiche e metodi statici
8.5 Problem Solving: iniziare da un problema più semplice
8.6 Pacchetti
8.6.1 Organizzare classi in pacchetti
8.6.2 Importare pacchetti
8.6.3 Nomi di pacchetto
8.6.4 Pacchetti e file di codice sorgente
8.7 Ambienti per il collaudo di unità
Riepilogo degli obiettivi di apprendimento
Esercizi di riepilogo e approfondimento
Esercizi di programmazione
Capitolo 9 - Ereditarietà
Obiettivi del capitolo
9.1 Gerarchie di ereditarietà
9.2 Realizzare sottoclassi
9.3 Sovrascrivere metodi
9.4 Polimorfismo
9.5 La superclasse universale: Object
9.5.1 Sovrascrivere il metodo toString
9.5.2 Il metodo equals
9.5.3 L’operatore instanceof
Riepilogo degli obiettivi di apprendimento
Esercizi di riepilogo e approfondimento
Esercizi di programmazione
Capitolo 10 - Interfacce
Obiettivi del capitolo
10.1 Uso di interfacce per il riutilizzo di algoritmi
10.1.1 Individuare un tipo interfaccia
10.1.2 Dichiarare un tipo interfaccia
10.1.3 Implementare un tipo interfaccia
10.1.4 Confronto tra ereditarietà e interfacce
10.2 Programmare con le interfacce
10.2.1 Conversione da classe a interfaccia
10.2.2 Invocare metodi con variabili interfaccia
10.2.3 Conversione da interfaccia a classe
10.3 L’interfaccia Comparable
10.4 Usare interfacce di smistamento (callback)
10.5 Classi interne
10.6 Oggetti semplificati
10.7 Gestione di eventi
10.7.1 Ricezione di eventi
10.7.2 Classi interne come ricevitori di eventi
10.8 Costruire applicazioni dotate di pulsanti
10.9 Eventi di temporizzazione
10.10 Eventi del mouse
Riepilogo degli obiettivi di apprendimento
Elementi di libreria presentati in questo capitolo
Esercizi di riepilogo e approfondimento
Esercizi di programmazione
Capitolo 11 - Ingresso/uscita e gestione delle eccezioni
Obiettivi del capitolo
11.1 Leggere e scrivere fi le di testo
11.2 Acquisire e scrivere testi
11.2.1 Acquisire parole
11.2.2 Acquisire caratteri
11.2.3 Classificare caratteri
11.2.4 Acquisire righe
11.2.5 Analizzare una stringa
11.2.6 Convertire stringhe in numeri
11.2.7 Evitare errori nell’acquisizione di numeri
11.2.8 Acquisire numeri, parole e righe
11.2.9 Impaginare i dati in uscita
11.3 Argomenti sulla riga dei comandi
11.4 Gestire eccezioni
11.4.1 Lanciare eccezioni
11.4.2 Catturare eccezioni
11.4.3 Eccezioni a controllo obbligatorio
11.4.4 Chiudere risorse
11.4.5 Progettare eccezioni
11.5 Applicazione: gestione di errori in ingresso
Riepilogo degli obiettivi di apprendimento
Elementi di libreria presentati in questo capitolo
Esercizi di riepilogo e approfondimento
Esercizi di programmazione
Capitolo 12 - Ricorsione
Obiettivi del capitolo
12.1 Numeri triangolari
12.2 Metodi ausiliari ricorsivi
12.3 L’efficienza della ricorsione
12.4 Permutazioni
12.5 Ricorsione mutua
12.6 Backtracking
Riepilogo degli obiettivi di apprendimento
Esercizi di riepilogo e approfondimento
Esercizi di programmazione
Capitolo 13 - Ordinamento e ricerca
Obiettivi del capitolo
13.1 Ordinamento per selezione
13.2 Prestazioni dell’ordinamento per selezione
13.3 Analisi delle prestazioni dell’ordinamento per selezione
13.4 Ordinamento per fusione (MergeSort)
13.5 Analisi dell’algoritmo di ordinamento per fusione
13.6 Effettuare ricerche
13.6.1 Ricerca lineare
13.6.2 Ricerca binaria
13.7 Problem Solving: stima del tempo di esecuzione di un algoritmo
13.7.1 Tempo lineare
13.7.2 Tempo quadratico
13.7.3 Lo schema triangolare
13.7.4 Tempo logaritmico
13.8 Ordinamento e ricerca nella libreria Java
13.8.1 Ordinamento
13.8.2 Ricerca binaria
13.8.3 Confronto di oggetti
Riepilogo degli obiettivi di apprendimento
Elementi di libreria presentati in questo capitolo
Esercizi di riepilogo e approfondimento
Esercizi di programmazione
Capitolo 14 - Java Collections Framework
Obiettivi del capitolo
14.1 Una panoramica del Collections Framework
14.2 Liste concatenate
14.2.1 La struttura delle liste concatenate
14.2.2 La classe LinkedList del Java Collections Framework
14.2.3 Iteratori per liste
14.3 Insiemi
14.3.1 Scegliere un’implementazione di insieme
14.3.2 Lavorare con insiemi
14.4 Mappe
14.5 Pile, code e code prioritarie
14.5.1 Pile
14.5.2 Code
14.5.3 Code prioritarie
14.6 Applicazioni di pile e code
14.6.1 Accoppiamento delle parentesi
14.6.2 Valutazione di espressioni RPN
14.6.3 Valutazione di espressioni algebriche
14.6.4 Backtracking
Riepilogo degli obiettivi di apprendimento
Elementi di libreria presentati in questo capitolo
Esercizi di riepilogo e approfondimento
Esercizi di programmazione
Appendice A - Il sottoinsieme Basic Latin di Unicode
Appendice B - Linguaggio Java: operatori
Appendice C - Linguaggio Java: parole riservate
Appendice D - Sistemi di numerazione
Glossario
Indice analitico