Anteprima
Vedrai una selezione di 20 pagine su 109
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 1 Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 2
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 6
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 11
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 16
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 21
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 26
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 31
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 36
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 41
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 46
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 51
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 56
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 61
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 66
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 71
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 76
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 81
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 86
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 91
1 su 109
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Utilizzo dei tipi parametrici in Java

public class Esempio<T> {
private T dati;
public void setDati(T nuovoValore) {
dati = nuovoValore; }
public T getDati( ) {
return dati; }}
Si noti la presenza delle parentesi angolari intorno a <T> nell'intestazione della classe.
Inoltre per convenzione, i tipi parametrici iniziano con una lettera maiuscola.
Quando si scrive una classe o un metodo che utilizza un tipo parametrico, si può utilizzare tale parametro in quasi qualsiasi punto in cui si può utilizzare un tipo classe. Non si può utilizzare per creare un nuovo oggetto o quando si alloca memoria per un array.

NO! Dati = new T( );
NO! nomeArray = new T[20];
SI! T[ ] nomeArray;
SI! Perché non è usato come tipo parametrico ma come nome di costruttore
NO! T[ ] a = new T[10];

Una definizione di classe che utilizza un tipo parametrico viene memorizzata in un file compilato come qualsiasi altra classe. Una volta compilata occorre specificare il tipo di classe che costituisce il tipo.


parametrico.NomeClasse<tipobase> nomeOggetto = new NomeClasse<tipobase>( );
Esempio<String> sc = new Esempio<String>( );
sc.setDati(“Ciao”);
ArrayList è una classe parametrica. classe specializzata
Quando si definisce il tipo base, non è più una classe generica ma una che
si può usare per definire oggetti come le classi normali.
Analogamente si può definire un'interfaccia generica, mentre i tipi enumerativi non possono
essere generici.

Es.

public class Coppia<T> {
    private T primo;
    private T secondo;

    le dichiarazioni dei costruttori non includono

    public Coppia( ) { 
        il tipo parametrico tra < >
        primo = null;
        secondo = null;
    }

    public Coppia(T primoElemento, T secondoElemento) {
        primo = primoElemento;
        secondo = secondoElemento;
    }

    public void setPrimo (T nuovoPrimo) {
        primo = nuovoPrimo;
    }

    public void setSecondo (T nuovoSecondo) {
        secondo = nuovoSecondo;
    }

    public T getPrimo( ) {
        return primo;
    }
}

Uso della classe Coppia

import

```html

java.import.Scanner;
public class CoppiaGenericaDemo {
    public static void main (String args[ ]) {
        Coppia<String> coppiaSegreta = new Coppia<String>(“Buona”,”Giornata);
        Scanner tastiera = new Scanner(system.in);
        System.out.println(“Inserire due parole”);
        String parola1 = tastiera.next( );
        String parola2 = tastiera.next( );
        Coppia<String> coppiaDiInput = new Coppia<String>(parola1,parola2);
        …
    }
}

Un tipo parametrico può essere utilizzato come parametro per un costruttore, ma l'intestazione
del costruttore non include il tipo farà metrico tra parentesi angolari:

public Coppia(T primoElemento, T secondoElemento)

Quando sei stanze una classe parametrica specificando un tipo da sostituire a quello parametrico,
tale tipo deve essere indicato tra parentesi angolari dopo il nome del costruttore, come nel
seguente esempio:

Coppia<String> coppiaSegreta = new Coppia<String> (“Buona”,

```

“Giornata”);

Quando si crea un oggetto di una classe che è un tipo parametrico, non si può sostituire il tipo parametrico con un tipo primitivo.

ArrayList<int> unaLista = new ArrayList<int> (20);

Non si può avere un oggetto di tipo ma se ne può avere uno di tipo Coppia<int>, che grazie alla conversione automatica (boxing) può essere utilizzato con Coppia<Integer>, valori di tipo .int

Le definizioni di array come la seguente non sono ammesse: NO!

Coppia<String>[ ] a = new Coppia<String>[10];

11.2.2 Vincoli su tipi parametrici

Si supponga di voler aggiungere un metodo che costituisca il massimo tra i due valori nella coppia ordinata. Si potrebbe aggiungere alla classe coppia la definizione del seguente metodo:

public T massimo( ) {

if (primo.compareTo(secondo) <= 0)

return primo;

else return secondo;

Il metodo è richiesto in ogni classe che implementi l’interfaccia compareTo Comparable.

Questa è

un'interfaccia della libreria standard di Java e richiede la presenza del solo metodo: ```java public int compareTo(Object altro) ``` Quando si definisce una classe che implementa l'interfaccia, è necessario definire il metodo `compareTo` in modo che restituisca: - un numero negativo se l'oggetto sul quale è stato chiamato il metodo viene prima del parametro `altro` - zero se l'oggetto sul quale è stato chiamato è uguale al parametro `altro` - un numero positivo se l'oggetto sul quale è stato chiamato viene dopo il parametro `altro` Tutto questo funziona solo se il tipo sostituito al parametro rispetta l'interfaccia `T, Comparable`, ma Java consente di inserire qualunque tipo al posto del tipo parametrico `T`. In Java è possibile esprimere restrizioni sui possibili tipi sostituibili a un tipo parametrico. Per garantire che si possono sostituire solo classi che implementino l'interfaccia, si inizia la definizione della classe come segue: ```java public class MyClass> { // ... } ```class="Coppia">La parte <T extends Comparable> è chiamata vincolo sul tipo parametrico. Se si cerca di sostituire a un tipo che non implementa l'interfaccia Comparable, si otterrà un errore in fase di compilazione. N.B. È necessario utilizzare la parola chiave "extends" e non "implements". Un vincolo su un tipo può essere anche espresso in termini di una classe, nel qual caso solo le classi che discendono da quella specificata possono essere sostituite al tipo parametrico. public class UnaClasseGenerica<T extends Impiegato> { // Codice della classe } In un vincolo si possono specificare più interfacce ed al più una classe. Inoltre, quest'ultima viene specificata per prima. public class NomeClasse<T extends ClasseBase & Interfaccia1 … &InterfacciaN> { // Codice della classe } public class MiaClasse<T extends Impiegato & Comparable> { // Codice della classe } 11.2.3 Metodi generici Esattamente come una classe generica, i metodi generici sono dotati di parametri tipo. Un metodo

generico può essere un metodo di una classe regolare o generica. Quando lo si dichiara, il parametro tipo viene posto dopo i modificatori (es. public, static) prima del tipo di ritorno.

public static <T> void nomeMetodo(argomenti);

public static <T> void swap(T[ ] array, int i, int j);

Quando si chiama un metodo generico, non è necessario specificare il parametro tipo, ma se lo si vuole fare si può fare prima del nome del metodo:

Arrays.<tipo>nomeMetodo(parametri);

Arrays.<String>swap(friends, 0, 1);

CAPITOLO 12. ECCEZIONI

Un modo per scrivere programmi consiste nel presupporre che durante l'esecuzione non si presentino situazioni anomale. Una volta che il programma funziona correttamente, si aggiunge il codice che gestisce i casi eccezionali.

Java fornisce gli strumenti per dividere un programma in due sezioni: quella che gestisce il normale funzionamento e quella che gestisce il caso eccezionale.

Un'eccezione (exception) è un oggetto

Che segnala l'accadere di un evento anomalo durante l'esecuzione di un programma. Il processo di creazione di questo oggetto è chiamato eccezione. Il codice che rileva e si occupa dell'eccezione si dice che gestisce l'eccezione. Un metodo può segnalare la presenza di un problema "sollevando" (throw) un'eccezione. Il vantaggio fondamentale della gestione delle eccezioni è che disaccoppia i processi di rilevamento e di gestione degli errori. Questo avviene mediante l'utilizzo del gruppo di tre istruzioni: try-throw-catch.

Il blocco try:

try {
    codice da provare
    eventuale_generazione_di_eccezione
    altro codice
}

È il blocco "prova" e contiene il codice che viene eseguito nelle situazioni normali. Nel caso qualcosa andasse storto, si vuole lanciare un'eccezione, che è un modo per indicare che sono sorti dei problemi.

import java.util.Scanner;

public class PrendiLatteConEccezioni {
    public static void
main(String[] args) {
    Scanner tastiera = new Scanner(system.in);
    try {
        System.out.println("Inserire numero ciambelle:");
        int conteggioCiambelle = tastiera.nextInt();
        System.out.println("Inserire numero bicchieri:dilatte:");
        int conteggioLatte = tastiera.nextInt();
        if (conteggioLatte < 1)
            bloccotry throw new Exception("Eccezione: Niente latte!");
        double ciambellePerBicchiere = conteggioCiambelle / (double) conteggioLatte;
        System.out.println(conteggioCiambelle + " ciambelle.");
        System.out.println(conteggioLatte + " bicchieri di latte.");
        System.out.println("Hai " + ciambellePerBicchiere + " ciambelle per ogni bicchiere di latte.");
    } catch (Exception e) {
        blocco System.out.println(e.getMessage());
    } catch System.out.println("Vai a comprare del latte.");
}
System.out.println("Fine programma.");
}}
(lanciare).throw L'oggetto eccezione viene costruito con un messaggio di debug. Quando viene eseguita un'istruzione il normale corso di esecuzione viene throw, immediatamente interrotto, viene creato un nuovo oggetto della classe predefinita Exception mediante l'espressione: e lancia l'oggetto creato. throw new Exception("Eccezione: Niente latte!"); throw new Exception("Messaggio"); Questa istruzione non specifica solamente un'azione che viene eseguita e subito dopodimenticata. Crea un oggetto che contiene un messaggio. Quando viene lanciata una eccezione, l'esecuzione del codice all'interno del blocco viene try arrestata e viene eseguita un'altra porzione di codice, chiamata blocco catch (catturare l'eccezione). Questa parte somiglia alla definizione di un metodo dotato di un parametro. Per questo motivo, nonostante non sia un metodo, l'identificativo viene chiamato parametro del blocco catch. Esso fornisce un nome.

all'eccezione è catturata. È possibile considerarlo come il nome dell'oggetto eccezione lanciato. Ogni oggetto eccezione è un metodo chiamato e agetMessagemeno che non lo si ridefinisca, questo metodo restituisce la stringa fornita al costruttore come argomento in fase di creazione dell'oggetto eccezione. Nell'esempio restituisce: "Eccezione: Niente latte!" nomeEccezione.getMessage(); Al termine dell'esecuzione del codice del blocco catch, il programma prosegue con il codice postale esterno dell'ultimo blocco non ritorna al blocco catch, try.

Dettagli
Publisher
A.A. 2021-2022
109 pagine
SSD Ingegneria industriale e dell'informazione ING-INF/05 Sistemi di elaborazione delle informazioni

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Auxiele18 di informazioni apprese con la frequenza delle lezioni di Programmazione ad oggetti - Java e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Politecnico di Torino o del prof Bruno Giorgio.