𝔖 Scriptorium
✦   LIBER   ✦

📁

Manuale di Java 9. Programmazione orientata agli oggetti con Java standard edition 9

✍ Scribed by Claudio De Sio Cesari


Publisher
Hoepli
Year
2018
Tongue
Italian
Leaves
884
Category
Library

⬇  Acquire This Volume

No coin nor oath required. For personal study only.

✦ Synopsis


Java non sarà mai più lo stesso! Il Manuale di Java 9 è stato strutturato per soddisfare le aspettative di aspiranti programmatori: nulla è dato per scontato, è possibile imparare a programmare partendo da zero ed entrare nel mondo del lavoro dalla porta principale; di studenti universitari: le precedenti edizioni di quest’opera sono state adottate come libro di testo per diversi corsi in tutte le maggiori università italiane; di programmatori esperti: Java 9 semplifica lo sviluppo, rivoluziona il JDK, introduce nuovi formati per i file e, con i moduli, cambia per sempre il modo in cui pensiamo, progettiamo e distribuiamo il software

✦ Table of Contents


Frontespizio
Copyright
Indice
Prefazione
Parte I - Le basi del linguaggio
Capitolo 1 - Introduzione a Java
1.1 Prerequisiti: concetti informatici di base
1.1.1 Hardware
1.1.2 Software
1.1.3 Linguaggi di programmazione
1.2 Introduzione a Java
1.2.1 Cos’è Java
1.2.2 Caratteristiche del linguaggio Java
1.3 Ambiente di sviluppo
1.3.1 Struttura del JDK
1.3.2 Guida per sviluppare passo dopo passo
1.4 Primo approccio al codice
1.4.1 Analisi del programma HelloWorld
1.4.2 Compilazione ed esecuzione del programma HelloWorld
1.4.3 La nostra interazione con il computer
1.5 Possibili problemi in fase di compilazione ed esecuzione
1.5.1 Possibili messaggi di errore in fase di compilazione
1.5.2 Possibili messaggi relativi alla fase di interpretazione
1.6 Altri ambienti di sviluppo
Riepilogo
Capitolo 2 - Componenti fondamentali di un programma Java
2.1 Cosa signiica creare un programma Java
2.1.1 Programmazione e paradigmi
2.1.2 Le basi della programmazione ad oggetti (OOP)
2.2 Le basi della programmazione object oriented: classi ed oggetti
2.2.1 Osservazione importante sulla classe Punto
2.2.2 Osservazione importante sulla classe TestOggettiPunto
2.2.3 Un’altra osservazione importante
2.3 I metodi in Java
2.3.1 Dichiarazione di un metodo
2.3.2 Chiamata (o invocazione) di un metodo
2.3.3 Varargs
2.4 Le variabili in Java
2.4.1 Dichiarazione di una variabile
2.4.2 Variabili d’istanza
2.4.3 Variabili locali
2.4.4 Parametri formali
2.5 I metodi costruttori
2.5.1 Caratteristiche di un costruttore
2.5.2 Costruttore di default
2.6 Introduzione ai package
2.6.1 Package e import
2.6.2 Gestione dei package manuale
2.7 Altri componenti fondamentali della programmazione Java
2.7.1 Interfacce
2.7.2 Enumerazioni
2.7.3 Annotazioni
2.7.4 Moduli
2.7.5 Inizializzatori
2.7.6 Classi innestate
2.7.7 Espressioni lambda
Riepilogo
Capitolo 3 - Stile di codiica, tipi di dati ed array
3.1 Stile di codiica
3.1.1 Schema Libero
3.1.2 Commenti
3.1.3 Regole per gli identiicatori
3.1.4 Standard e convenzioni per i nomi
3.2 Gestione della memoria
3.2.1 Byte
3.2.2 Sistemi numerici
3.2.3 Complemento a due
3.3 Tipi di dati primitivi
3.3.1 Tipi di dati interi
3.3.1.1 Promozione automatica nelle espressioni
3.3.1.2 Casting
3.3.1.3 Operazioni con interi
3.3.2 Tipi di dati a virgola mobile, casting e promotion
3.3.3 Underscore in tipi di dati numerici
3.3.4 Tipo di dato logico - booleano
3.3.5 Tipo di dato primitivo letterale
3.4 Tipi di dati non primitivi: reference
3.4.1 Passaggio di parametri per valore
3.4.2 Inizializzazione delle variabili d’istanza
3.5 Introduzione alla libreria standard
3.5.1 Il comando import
3.5.2 La classe String
3.5.3 La documentazione della libreria standard di Java
3.5.4 Lo strumento javadoc
3.6 Gli array in Java
3.6.1 Dichiarazione
3.6.2 Creazione
3.6.3 Inizializzazione
3.6.4 Array Multidimensionali
3.6.5 String args[]
Riepilogo
Capitolo 4 - Operatori e Gestione del lusso di esecuzione
4.1 Operatori di base
4.1.1 Operatore d’assegnazione
4.1.2 Operatori aritmetici
4.1.3 Operatori (unari) di pre e post-incremento (e decremento)
4.1.4 Operatori bitwise
4.1.5 Operatori relazionali o di confronto
4.1.6 Operatori logico - booleani
4.1.7 Concatenazione di stringhe con +
4.1.8 Priorità degli operatori
4.2 Costrutti di programmazione semplici
4.2.1 Il costrutto if
4.2.2 Il costrutto while
4.3 Costrutti di programmazione avanzati
4.3.1 Il costrutto for
4.3.2 Il costrutto do
4.3.3 Ciclo for migliorato
4.3.4 Il costrutto switch
4.3.5 L’operatore ternario
4.3.6 break e continue
4.4 Programmare meglio
4.4.1 Approccio alla programmazione
4.4.2 Algoritmo
4.4.3 Introduzione ad UML
Riepilogo
Capitolo 5 - Sviluppare realmente con Java
5.1 JShell
5.1.1 HelloWorld con JShell
5.1.2 JShell e codice Java
5.1.2.1 Esempi pratici
5.1.2.2 Regole JShell
5.1.3 Comandi JShell
5.1.3.1 Comandi esplorativi
5.1.3.2 Comandi esecutivi
5.1.4 Strumenti ausiliari di JShell
5.1.4.1 Variabili implicite
5.1.4.2 Forwarding reference
5.1.4.3 Auto-completamento
5.1.4.4 Il comando /edit
5.1.4.5 Scorciatoie da tastiera (shortcuts)
5.2 Integrated Development Environment (IDE)
5.2.1 Progetto
5.2.2 Editor
5.2.3 Debugger
5.2.4 Integrazioni
5.3 Realtà aziendale
5.3.1 Architettura
5.3.2 Conoscenze
5.3.3 Tipologie di programmi
5.3.4 Ruoli
5.3.5 Metodologia
5.4 Caso di studio
5.4.1 Raccolta requisiti con Use case e scenari
5.4.1.1 Use case diagram
5.4.1.2 Scenari dei casi d’uso
5.4.2 Architettura di alto livello
5.4.3 Key abstraction
5.4.4 Progettazione con diagrammi di interazione
Riepilogo
Parte II - Object Orientation
Capitolo 6 - Incapsulamento e visibilità
6.1 Breve storia della programmazione ad oggetti
6.2 I paradigmi della programmazione ad oggetti
6.2.1 Astrazione
6.2.2 Riuso
6.2.3 UML: Diagramma delle classi
6.3 Incapsulamento
6.3.1 Incapsulamento funzionale
6.3.2 Incapsulamento e riuso
6.3.3 Il reference this
6.3.4 Uso di this con variabili
6.3.5 Uso di this con metodi e costruttori
6.4 Quando utilizzare l’incapsulamento
6.5 Come usare l’incapsulamento
6.6 Gestione dei package
6.6.1 Gestione manuale
6.6.2 Moduli
6.7 Modiicatori d’accesso
6.7.1 Modiicatore public
6.7.2 Modiicatore protected
6.7.3 Nessun modiicatore d’accesso
6.7.4 Modiicatore private
6.8 Il modiicatore static
6.8.1 Metodi statici
6.8.2 Variabili statiche (di classe)
6.8.3 Inizializzatori statici ed inizializzatori d’istanza
6.8.4 Static import
6.8.5 Quando usare static
6.8.6 Design Pattern Singleton
Riepilogo
Capitolo 7 - Ereditarietà ed interfacce
7.1 Ereditarietà
7.1.1 La parola chiave extends
7.2 Il modiicatore final
7.3 La classe Object
7.4 Rapporto ereditarietà-incapsulamento
7.5 Quando utilizzare l’ereditarietà
7.5.1 La relazione “is a”
7.5.2 Ereditarietà e costruttori
7.5.3 La parola chiave super
7.5.4 Ereditarietà e modiicatori
7.5.5 Ereditarietà e inizializzatori
7.5.6 Generalizzazione e specializzazione
7.6 Il modiicatore abstract
7.6.1 Metodi astratti
7.6.2 Classi astratte
7.7 Interfacce
7.7.1 Deinizione classica (pre-Java 8)
7.7.2 Metodi statici
7.7.3 Metodi di default
7.7.4 Interfacce funzionali
7.7.5 Ereditarietà multipla
7.7.5.1 Diamond Problem
7.7.5.2 Conlitto tra un metodo astratto e uno concreto
7.7.5.3 Conlitto tra due metodi astratti
7.7.5.4 Conlitto tra metodi rideiniti
7.7.5.5 Class always wins
7.7.6 Differenze tra interfacce e classi astratte
Riepilogo
Capitolo 8 - Polimorismo
8.1 Polimorismo
8.1.1 Convenzione per i reference
8.2 Polimorismo per metodi
8.2.1 Overload
8.2.2 Varargs
8.2.3 Override
8.2.4 Annotazione sull’override
8.3 Polimorismo per dati
8.3.1 Parametri polimori
8.3.2 Collezioni eterogenee
8.3.3 Casting di oggetti
8.3.4 Invocazione virtuale dei metodi
8.3.5 Esempio d’utilizzo del polimorismo
8.3.6 Polimorismo e interfacce
Riepilogo
Capitolo 9 - Eccezioni ed asserzioni
9.1 Eccezioni, errori ed asserzioni
9.2 Gerarchie e categorizzazioni
9.3 Meccanismo per la gestione delle eccezioni
9.4 Try with resources
9.5 Eccezioni personalizzate e propagazione dell’eccezione
9.5.1 Warnings
9.5.2 Altra regola sull’override
9.6 Introduzione alle asserzioni
9.6.1 Progettazione per contratto
9.6.2 Note per l’esecuzione di programmi che utilizzano la parola assert
9.6.3 Quando usare le asserzioni
9.6.3.1 Consiglio 1
9.6.3.2 Consiglio 2
9.6.3.3 Consiglio 3
9.6.4 Conclusioni
Riepilogo
Conclusioni Parte II
Parte III - Caratteristiche avanzate
Capitolo 10 - Enumerazioni e Tipi Innestati
10.1 Classi innestate: classi interne
10.1.1 Classe innestata: deinizione
10.1.2 Classi innestate: proprietà
10.1.3 Quando usare le classi innestate
10.2 Classi anonime: deinizione
10.2.1 Quando usare le classi innestate
10.3 Tipi Enumerazioni
10.3.1 Ereditarietà e polimorismo con enum
10.3.2 Metodi, variabili, costruttori e tipi innestati in una enumerazione
10.3.3 Quando utilizzare una enum
10.3.4 Enumerazioni innestate (in classi) o enumerazioni membro
10.3.5 Enumerazioni e metodi speciici degli elementi
10.3.6 Switch e enum
Riepilogo
Capitolo 11 - Generics
11.1 Generics e tipi parametro
11.1.1 Generics e collection
11.1.2 Tipi primitivi e autoboxing-autounboxing
11.1.3 Interfaccia Iterator
11.1.4 Interfaccia Map
11.1.5 Deduzione automatica del tipo
11.1.6 Raw type e XLint
11.2 Ereditarietà e tipi generici
11.2.1 Ereditarietà e tipo parametro
11.2.2 Type erasure
11.2.3 Wildcard
11.3 Creare propri tipi generici
11.3.1 Parametri bounded
11.3.2 Wildcard bounded
11.3.3 Metodi generici
11.3.4 Wildcard capture e metodi helper
11.4 Parametri covarianti
11.4.1 Problema dei parametri covarianti
11.4.2 Soluzione con bounded parameter
Riepilogo
Capitolo 12 - La libreria indispensabile: il package java.lang
12.1 La classe Object
12.1.1 Il metodo equals()
12.1.2 Il metodo hashcode()
12.1.3 Il metodo toString()
12.1.4 Il metodo clone()
12.2 La classe System
12.2.1 Input e output
12.2.2 Le properties
12.2.3 Altri metodi di System
12.2.4 Garbage collection
12.3 La classe Runtime
12.4 La classe Class e Reflection
12.4.1 Istanziare un oggetto Class
12.4.2 Class è un tipo generico
12.4.3 Un esempio di relection
12.4.4 Nomi dei parametri dei metodi
12.5 La classe String
12.5.1 Gestione in memoria
12.5.2 Dichiarazione della classe String
12.5.3 I metodi di String
12.5.3.1 char charAt(int index)
12.5.3.2 String concat(String other)
12.5.3.3 int compareTo(String other)
12.5.3.4 boolean endsWith(String suffix)
12.5.3.5 boolean equals(Object ob)
12.5.3.6 boolean equalsIgnoreCase(String s)
12.5.3.7 static String format(String format, Object... args)
12.5.3.8 int indexOf(int ch)
12.5.3.9 int indexOf(int ch, int fromIndex)
12.5.3.10 String intern()
12.5.3.11 static String join(CharSequence delimiter, CharSequence... elements)
12.5.3.12 static join(CharSequence delimiter, Iterable<? extends CharSequence> elements)
12.5.3.13 int lastIndexOf(int ch)
12.5.3.14 int length()
12.5.3.15 String replace(char oldChar, char newChar)
12.5.3.16 String replace(CharSequence target, CharSequence replacement)
12.5.3.17 String replaceAll(String regex, String replacement)
12.5.3.18 String replaceFirst(String regex, String replacement)
12.5.3.19 String[] split(String regex)
12.5.3.20 boolean startsWith(String prefix)
12.5.3.21 boolean startsWith(String prefix, int fromIndex)
12.5.3.22 String substring(int startIndex)
12.5.3.23 String substring(int startIndex, int endIndex)
12.5.3.24 String toLowerCase()
12.5.3.25 String toString()
12.5.3.26 String toUpperCase()
12.5.3.27 String trim()
12.5.3.28 static String valueOf(Object obj)
12.5.4 Compact Strings
12.6 Le classi wrapper
12.6.1 Autoboxing-Autounboxing
12.6.1.1 Gestione in memoria dei tipi primitivi
12.6.1.2 Assegnazione di un valore null al tipo wrapper
12.6.1.3 Costrutti del linguaggio ed operatori relazionali
12.6.1.4 Overload
12.6.2 Altri metodi delle classi wrapper
12.7 La classe Math
12.8 Ordinamento
12.8.1 L’interfaccia Comparable
12.8.2 L’interfaccia Comparator
Riepilogo
Capitolo 13 - Tipi Annotazioni
13.1 Deinizione di annotazione (metadato)
13.1.1 Primo esempio
13.1.2 Tipologie di annotazioni e sintassi
13.1.2.1 Annotazione ordinaria (o completa)
13.1.2.2 Annotazione a valore unico
13.1.2.3 Annotazione marcatrice
13.2 Annotare annotazioni (meta-annotazioni)
13.2.1 Target
13.2.1.1 Type Annotations
13.2.2 Retention
13.2.3 Documented
13.2.4 Inherited
13.2.5 Repeatable
13.3 Annotazioni standard
13.3.1 Override
13.3.2 Deprecated
13.3.3 FunctionalInterface
13.3.4 SuppressWarnings
13.3.5 Native
Riepilogo
Capitolo 14 - Le librerie di utilità: il package java.util e Date-Time API
14.1 Il package java.util
14.1.1 Le classi Properties e Preferences
14.1.2 Internazionalizzazione (i18n)
14.1.2.1 Classe Locale ed internazionalizzazione
14.1.2.2 La classe ResourceBundle
14.1.3 La classe StringTokenizer
14.1.4 Formattazioni di output
14.1.5 Espressioni regolari
14.1.6 Date, orari e valute
14.2 La novità di Java 8: Date-Time API
14.2.1 Standardizzazione dei metodi
14.2.2 Il package java.time
14.2.2.1 La classe Instant
14.2.2.2 Le classi Duration e Period
14.2.2.3 Le enumerazioni DayOfWeek e Month
14.2.2.4 Date classes: LocalDate, YearMonth, MonthYear e Year
14.2.2.5 Le classi LocalTime e LocalDateTime
14.2.2.6 Geolocalizzazione: le classi ZonedDateTime, ZoneId e ZoneOffSet
14.2.3 Il package java.time.format
14.2.4 Il package java.time.temporal
14.2.4.1 L’enumerazione ChronoUnit
14.2.4.2 Temporal Adjusters
14.2.4.3 Temporal Queries
14.2.5 Codice Legacy
Riepilogo
Capitolo 15 - Gestione dei thread
15.1 Introduzione ai thread
15.1.1 Deinizione provvisoria di thread
15.1.2 Cosa signiica multithreading
15.2 La classe Thread e la dimensione temporale
15.2.1 Analisi di ThreadExists
15.2.2 L’interfaccia Runnable e la creazione dei thread
15.2.3 Analisi di ThreadCreation
15.2.4 La classe Thread e la creazione dei thread
15.3 Priorità, scheduler e sistemi operativi
15.3.1 Analisi di ThreadRace
15.3.2 Comportamento Windows (e la maggior parte dei sistemi Linux)
15.3.3 Comportamento Unix
15.3.4 Il modiicatore volatile
15.4 Thread e sincronizzazione
15.4.1 Analisi di Synch
15.4.2 Monitor e lock
15.5 La comunicazione fra thread
15.5.1 Analisi di IdealEconomy
15.6 Concorrenza
15.6.1 Oggetti Immutabili
15.6.2 Tecnologie Java e classi standard ausiliarie
15.6.3 Libreria Java sulla concorrenza
15.6.3.1 Il package java.util.concurrent.locks
15.6.3.2 Il package java.util.concurrent.atomic
15.6.3.3 Interfacce Executors
15.6.3.4 La classe Semaphore
15.6.3.5 La classe CyclicBarrier
Riepilogo
Capitolo 16 - Espressioni Lambda
16.1 Espressioni lambda
16.1.1 Sintassi
16.1.2 Comprendere le espressioni lambda
16.1.3 Espressione Lambda vs Classe Anonima
16.1.3.1 Sinteticità
16.1.3.2 Regole e visibilità
16.1.3.3 Dinamicità
16.1.3.4 Gestione delle eccezioni
16.1.3.5 Quando usare le espressioni lambda
16.2 Reference a metodi
16.2.1 Sintassi
16.2.2 Reference a un metodo statico
16.2.3 Reference a un metodo d’istanza
16.2.4 Reference a un metodo d’istanza di un certo tipo
16.2.5 Reference a un costruttore
16.3 Le interfacce funzionali del package java.util.function
16.3.1 Predicate
16.3.2 Consumer
16.3.3 Supplier
16.3.4 Function
16.3.5 UnaryOperator e composizione di espressioni lambda
Riepilogo
Capitolo 17 - Collections Framework e Stream API
17.1 Introduzione al Framework Collections
17.2 L’interfaccia Collection
17.2.1 Metodi di Collection
17.2.2 Iterare sulle collezioni
17.2.2.1 Ciclo foreach
17.2.2.2 Iteratori
17.2.2.3 Metodo forEach() dell’interfaccia Iterable
17.3 Interfaccia List
17.3.1 Implementazioni di List
17.4 Le interfacce Set e SortedSet
17.4.1 Implementazioni di Set e SortedSet
17.5 Le interfacce Queue e Deque
17.5.1 L’interfaccia BlockingQueue e implementazioni di Queue e Deque
17.6 Le interfacce Map e SortedMap
17.6.1 Implementazioni di Map e SortedMap
17.7 Algoritmi e utilità
17.7.1 Collections
17.7.1.1 Metodi wrapper
17.7.1.2 Metodi sincronizzatori
17.7.1.3 Metodi di convenienza
17.7.2 Arrays
17.7.3 Metodi di convenienza per creare collection immutabili
17.7.3.1 Interfaccia Set
17.7.3.2 Interfaccia Map
17.7.3.3 Interfaccia List
17.8 Introduzione alla libreria Stream API
17.8.1 Deinizioni di Stream e pipeline
17.8.2 Classi Optional
17.8.2.1 Altri metodi or()
17.8.2.2 Metodi get(), filter(), map() e flatMap()
17.8.3 Reduction Operations
17.8.3.1 Metodo reduce()
17.8.3.2 Metodo collect() e la classe Collectors
17.8.4 Stream paralleli e prestazioni
Riepilogo
Capitolo 18 - Input-Output
18.1 Introduzione all’input-output
18.2 Pattern Decorator
18.2.1 Descrizione del pattern
18.2.2 Esempio
18.3 Caratteristiche del package java.io
18.3.1 I Character Stream
18.3.2 I Byte Stream
18.3.3 Le interfacce alla base della gerarchia
18.3.4 Checked exception e chiusura degli stream
18.4 Input e output classici
18.4.1 Lettura di input da tastiera
18.4.2 Gestione dei ile
18.4.3 Serializzazione di oggetti e modiicatore transient
18.4.4 Deep copy
18.5 NIO 2
18.5.1 L’interfaccia Path
18.5.2 La classe Files
Riepilogo
Capitolo 19 - Moduli
19.1 Perché un sistema modulare?
19.1.1 Pro
19.1.2 Contro
19.2 Deinizione di modulo
19.2.1 HelloModularWorld
19.2.2 Nozioni architetturali e di progettazione
19.2.3 Direttive
19.2.3.1 requires
19.2.3.2 exports
19.2.3.3 opens e open (forte incapsulamento)
19.2.3.4 uses e provides to
19.3 Servizi con ServiceLoader
19.3.1 Pattern Factory
19.3.2 Factory modulare
19.3.3 Evoluzione con ServiceLoader
19.3.4 Compilazione ed esecuzione
19.3.5 Metodo provider
19.4 Jar modulare
19.4.1 Strumento jar
19.4.2 Formato jmod
19.5 Migrazione di programmi pre-Java 9
19.5.1 Modulo anonimo
19.5.2 Modulo automatico
19.6 Jlink
Riepilogo
Conclusioni
Indice analitico
Informazioni sul Libro
Circa l’autore


📜 SIMILAR VOLUMES


Dai fondamenti agli oggetti. Corso di pr
✍ Giovanni Pighizzini, Mauro Ferrari 📂 Library 📅 2008 🏛 Pearson 🌐 Italian

Un percorso didattico completo, a partire dalle basi della programmazione per arrivare agli aspetti più evoluti, utilizzando come riferimento il linguaggio Java. Uno degli aspetti più originali è lo schema di presentazione degli argomenti: fin dall'inizio il lettore è stimolato a "pensare a oggetti"

Lezioni di programmazione orientata agli
✍ Christian Nigro, Libero Nigro 📂 Library 📅 2014 🏛 Pitagora 🌐 Italian

Le lezioni contenute in questo volume assumono che l'allievo abbia già seguito un primo corso di Fondamenti di Informatica e dunque abbia già familiarizzato con i concetti fondamentali di algoritmo, calcolatore e risoluzione algoritmica di problemi secondo lo stile procedurale. I primi due capitoli

Lezioni di programmazione orientata agli
✍ Christian Nigro, Libero Nigro 📂 Library 📅 2014 🏛 Pitagora 🌐 Italian

Le lezioni contenute in questo volume assumono che l'allievo abbia già seguito un primo corso di Fondamenti di Informatica e dunque abbia già familiarizzato con i concetti fondamentali di algoritmo, calcolatore e risoluzione algoritmica di problemi secondo lo stile procedurale. I primi due capitoli