Generics. L9 Linguaggi Progr.II Unina 2
|
|
- Tommasa Corso
- 6 anni fa
- Visualizzazioni
Transcript
1 Classi parametriche
2 Generics Introdotti con JAVA 5 (2004), anche se si tratta di una delle prime specifiche di java (1999) Generic Programming > scrivere codice che può essere riutilizzato per oggetti di diverso tipo in maniera sicura. L9 Linguaggi Progr.II Unina 2
3 ArrayList Prima di JAVA 5 generic programming era prodotto dall ereditarietà Esempio costruzione di una classe generica ArrayList public class ArrayList { public Object get(int i) {... public void add(object o) { private Object[] elementdata; L9 Linguaggi Progr.II Unina 3
4 In questo modo pero si deve fare il cast per ottenere un oggetto, e non c è nessuno controllo dei tipi di oggetto inseriti nell'arraylist ArrayList files = new ArrayList(); files.add(new File( pippo")); String filename = (String) names.get(0); errore non in compilazione ma in esecuzione! L9 Linguaggi Progr.II Unina 4
5 JAVA 5 -> tipi parametrici E possibile specificare con un parametro di tipo l elemento : ArrayList<String> files = new ArrayList<String>(); In questo modo il codice e più leggibile e i conflitti si scoprono a tempo di compilazione. Non c e bisogno di casting per ottenere gli oggetti dell array list String filename = files.get(0); files.add(new File("...")); // errore di // compilazione L9 Linguaggi Progr.II Unina 5
6 La programmazione generica, classi parametriche e metodi parametrici Le classi parametriche possono essere utilizzate cosi come sono (come classi container evolute), oppure per usi più evoluti si può utilizzare la programmazione generica con oggetti complessi, utilizzando le wildcard Il nome generics può essere ingannevole in quanto si riferisce in realtà ad una regolamentazione nell uso di tipi generici rispetto le prime implementazioni L9 Linguaggi Progr.II Unina 6
7 Classe parametrica Una classe parametrica ha una o più variabili di tipo (racchiuse tra <> ) public class Pair<T> { public Pair() { first = null; second = null; public Pair(T first, T second) { this.first = first; this.second = second; public T getfirst() { return first; public T getsecond() { return second; public void setfirst(t newvalue) { first = newvalue; public void setsecond(t newvalue) { second = newvalue; private T first; private T second; L9 Linguaggi Progr.II Unina 7
8 Utilizzo classi parametriche Le classi parametriche evitano il ricorso del cast: Pair p = new Pair( prima, seconda ); String a = a.getfirst(); Il tipo String si comporta come il parametro di tipo attuale, che sostituisce il parametro di tipo formale, come avviene per le variabili L9 Linguaggi Progr.II Unina 8
9 Convezione per i nomi delle variabili di tipo <E> Elementi di collezioni K,V (Key, value), elementi per tabelle T (U,S,...) qualsiasi tipo Analogia con i template del C++ Sintatticamente si deve specificare la parola template, ci sono diverse differenze (es Boost) template <class T1, class T2> struct pair { typedef T1 first_type; typedef T2 second_type; T1 first; T2 second; pair() : first(t1()), second(t2()) { pair(const T1& x, const T2& y) : first(x), second(y) { template <class U, class V> pair (const pair<u,v> &p) : first(p.first), second(p.second) { L9 Linguaggi Progr.II Unina 9
10 Metodi parametrici E possibile specificare le variabili di tipo anche per un singolo metodo di una classe class ArrayAlg { public static <T> T getmiddle(t[] a) { return a[a.length / 2]); Invocazione String[] names = { "John", "Q.", "Public" ; String middle = ArrayAlg.<String>getMiddle(names); Oppure semplicemente (ok a compilazione e esecuzione) String middle = ArrayAlg.getMiddle(names); I metodi parametrici possono appartenere ad una classe NON parametrica o parametrica L9 Linguaggi Progr.II Unina 10
11 Nell'invocazione dei metodi parametrici non è obbligatorio specificare il tipo, il compilatore applica un algoritmo type inference simile a quello dell'assegnazione dei tipi del type system. String[] names = { "John", "Q.", "Public" ; String middle = ArrayAlg.getMiddle(names); In questo caso l'agoritmo type inference è in grado di determinare come tipo più specifico String. L9 Linguaggi Progr.II Unina 11
12 Da Java 5 diverse classi di Java sono diventate parametriche. Il codice pregresso generalmente continua a funzionare grazie alla type inference, con messaggi di WARNING L9 Linguaggi Progr.II Unina 12
13 Costruttori parametrici Anche i costruttori possono essere parametrici, come un qualsiasi altro metodo public class A<T> { public <U> A(T x, U y) { In questo esempio A utilizza come tipo parametrico oltre che T, anche un parametro ti tipo U L9 Linguaggi Progr.II Unina 13
14 Parametri di tipo ristretti Può essere necessario richiedere alcune condizioni sui tipi utilizzabili dai generics. Esempio class ArrayAlg { public static <T> T min(t[] a) { if (a == null a.length == 0) return null; T smallest = a[0]; for (int i = 1; i < a.length; i++) if (smallest.compareto(a[i]) > 0) smallest = a[i]; return smallest; Si deve richiedere che il tipo T generico abbia il metodo compareto L9 Linguaggi Progr.II Unina 14
15 La soluzione generic è quella di restringere il tipo T alle classi derivate da un interfaccia Comparable (una interfaccia standard col solo metodo compareto) public static <T extends Comparable> T min(t[] a) L interfaccia Comparable è un tipo generico essa stessa. L9 Linguaggi Progr.II Unina 15
16 Tipi ristretti Sintassi generica <T extends BoundingType> BoundingType può essere una classe o una interfaccia E possibile richiedere restrizioni multiple T extends Comparable & Serializable (al più una può essere una classe che deve trovarsi però al primo posto) ES L9 Linguaggi Progr.II Unina 16
17 JVM e generics LA JVM non gestisce i tipi generici, ma solo classi ordinarie. In presenza di un generic il compilatore rimuove la parametrizzazione (come prima di JAVA5), ed in fase di compilazione effettua automaticamente il casting Il meccanismo del type reference può fallire anche in presenza di una soluzione, oppure puo' fornire la soluzione errata (non è corretto né L9 Linguaggi Progr.II Unina 17 completo)
18 Implementazione dei generics e type inference I generics sono implementati con un meccanismo di riscrittura del codice (raw type e type erasure) da parte del compilatore. Il risultato è quello di ottenere delle classi ordinarie. Nella definizione ai tipi generici vengono sostituiti, a tempo di compilazione con i tipi raw, che corrisponde al tipo ristretto se presente, o al tipo object. ESEMPIO Pair L9 Linguaggi Progr.II Unina 18
19 public class Pair { public Pair(Object first, Object second) { this.first = first; this.second = second; public Object getfirst() { return first; public Object getsecond() { return second; public void setfirst(object newvalue) { first = newvalue; public void setsecond(object newvalue) { second = newvalue; private Object first; private Object second; L9 Linguaggi Progr.II Unina 19
20 Invocazione dei generics Nelle istruzioni di invocazioni dei metodi generici, il compilatore inserisce automaticamente istruzioni di cast in corrispondenza del tipo. Pair<Employee> staff2 =...; Employee employee1 = (employee)staff2.getfirst(); L9 Linguaggi Progr.II Unina 20
21 Implementazione metodi generici: conseguenze ESEMPIO INTERVALLO DI DATE class DateInterval extends Pair<Date> { public void setsecond(date second) { if (second.compareto(getfirst()) >= 0) super.setsecond(second);... L9 Linguaggi Progr.II Unina 21
22 Implementazione dei metodi generici public static <T extends Comparable> T min(t[] a) RAW TYPE public static Comparable min(comparable[] a) Bridge method In alcuni casi la cancellazione del tipo generico ha come conseguenza la creazione di metodi bridge ES L9 Linguaggi Progr.II Unina 22
23 class DateInterval extends Pair<Date> { public void setsecond(date second) { if (second.compareto(getfirst()) >= 0) super.setsecond(second);... Si richiede ovviamente che la seconda data sia maggiore della prima La cancellazione trasforma la classe DateInterval a: class DateInterval extends Pair // after erasure { public void setsecond(date second) { Ovviamente esiste anche il metodo setsecond derivato da pair public void setsecond(object newvalue) { second = newvalue; L9 Linguaggi Progr.II Unina 23
24 Cosa accade nella sequenza di istruzioni? DateInterval interval = new DateInterval(...); Pair<Date> pair = interval; // OK--assignment to superclass pair.setsecond(adate); Il compilatore crea automaticamente un bridge method per per conservare la peculiarità del metodo della classe che estende la classe parametrica, dopo la type erasure. Il metodo Bridge con il cast assicura che in ovverriden venga invocato il metodo della sottoclasse public void setsecond(object second) { this.setsecond((date) second); L9 Linguaggi Progr.II Unina 24
25 Generic: restrizioni nei tipi Ci sono alcune restrizione nell uso dei generics, dovute principalmente ai problemi di cancellazione TIPI PRIMITIVI Non si possono usare i tipi primitivi in una variabile di tipo: NO pair<double>, MA pair<double> La ragione è la type erasure. La classe pair,dopo la cancellazione del tipo, ha tipo riferimento Object, e non può ospitare tipi primitivi (in questo caso double). L9 Linguaggi Progr.II Unina 25
26 Operatore istanceof (a instanceof Pair<String>) <-> (a instanceof Pair ) Nella JVM il confronto avviene tramite il riferimento non tipato if (a instanceof Pair<T>) T viene ignorato Cast Pair<String> p = (Pair<String>) a; Nel caso di cast il compilatore emette un WARNING can only test that a is a Pair che ricorda che che il cast non include il tipo parametrico, ma solo il raw type. Allo stesso modo il metodo getclass restituisce il tipo raw Pair<String> stringpair =...; Pair<Employee> employeepair =...; if (stringpair.getclass() == employeepair.getclass()) // UGUALI! L9 Linguaggi Progr.II Unina 26
27 Eccezioni Non si possono sollevare eccezione ne catturare eccezioni di una generic class, ne avere eccezioni parametriche. public class Problem<T> extends Exception { /* */ ERROR--can't extend Throwable Non si possono usare le variabili di tipo una clausola catch. public static <T extends Throwable> void dowork(class<t> t) { try { do work catch (T e) // ERROR--can't catch type variable { Logger.global.info(...) L9 Linguaggi Progr.II Unina 27
28 Si può usare una variabile di tipo che però estende Trowable public static <T extends Throwable> void dowork(t t) throws T /* OK! */ { try { do work catch (Throwable realcause) { t.initcause(realcause); throw t; L9 Linguaggi Progr.II Unina 28
29 Array Non si possono dichiarare array di tipi parametrizzati Pair<String>[] table = new Pair<String>(10); // ERRORE Dopo la type erasure, il tipo di table è Pair[], che ovviamente è convertibile in Object[] Object[] objarray = table; Per creare associazioni di tipi parametrizzati si può usare la collection ArrayList: ArrayList<Pair<String>> L9 Linguaggi Progr.II Unina 29
30 Istanziare i tipi genenirici I tipi generici non possono essere istanziati Pair<T> constructor -> public Pair() { first = new T(); second = new T(); // ERROR La Type erasure cambierebbe T in Object, l errore previene questo meccanismo public <T> T[] minmax(t[] a) { T[] mm = new T[2];... // ERROR Si costruirebbe così un array di Object Gli oggetti generici possono essere creati con il meccanismo della riflessione (Class.newInstance Array.newInstance). L9 Linguaggi Progr.II Unina 30
31 Metodi Statici di classi parametriche Non si possono riferire variabili di tipo in metodi statici public class Singleton<T> { public static T getsingleinstance() // ERROR { if (singleinstance == null) construct new instance of T return singleinstance; private static T singleinstance; // ERROR Se fosse possibile, si avrebbe un pattern Singleton universale, da istanziare secondo le esigenze (es Singleton<Random> per condividere un generatore di numeri casuali). Con la type erasure si avrebbe però solo la classe Singleton, ed un solo membro singleinstance. L9 Linguaggi Progr.II Unina 31
32 La Conflitti type erasure da può cancellazione introdurre dei conflitti tipi generici public class ClassP<T> extends ClassNoP { public int method(t value) {... Se la classe ClassNoP ha anche essa un method(object o), avremmo int method(string) // da ClassP<T> int method(object) // ereditata da ClassNoP Mentre La type erasure del metodo parametrico int method(t) produce il metodo int method(object) Rimedi: rinominare il method oppure assicurare l'ovveride con la dichiarazione public class ClassP<T> extends ClassNoP <T> L9 Linguaggi Progr.II Unina 32
33 Le specifiche di Java sui generics riportano la seguente regola: "To support translation by erasure, we impose the restriction that a class or type variable may not at the same time be a subtype of two interface types which are different parameterizations of the same interface." In questo modo è illegale il costrutto: class Calendar implements Comparable<Calendar> {... class GregorianCalendar extends Calendar implements Comparable<GregorianCalendar> {... // ERROR La versione non parametrica è invece legale class Employee implements Comparable {... class Manager extends Employee implements Comparable {... L9 Linguaggi Progr.II Unina 33
Generics. L8 Linguaggi prog. II Unina 2
Classi parametriche Generics Introdotti con JAVA 5 (2004), anche se si tratta di una delle prime specifiche di java (1999) Generic Programming > scrivere codice che può essere riutilizzato per oggetti
DettagliCenni su programmazione con tipi generici (generics)
Cenni su programmazione con tipi generici (generics) Tipi generici (generics) Programmazione generica: Creazione di costrutti che possono essere utilizzati con tipi di dati diversi Es. ArrayList,
DettagliJAVA GENERICS. Angelo Di Iorio Università di Bologna
JAVA GENERICS Angelo Di Iorio Università di Bologna Tipi parametrici In diversi casi è utile definire classi che operano su tipi di dato diverso e implementano un comportamento comune e indipendente dal
DettagliProgrammazione ad oggetti
DAIS Univ. Ca' Foscari Venezia Programmazione ad oggetti Samuel Rota Bulò Programmazione polimorfa Immaginiamo di voler creare una classe Stack. Il funzionamento di uno stack può essere definito indipendentemente
DettagliRisoluzione dei metodi
Risoluzione dei metodi Static Binding La risoluzione dei metodi è il meccanismo che Java adopera per stabilire quale metodo viene invocato, considerando le classi a disposizione La risoluzione dei metodi
DettagliConoscere l uso delle collezioni in Java. Conoscere il concetto di Generics (programmazione
1 Conoscere l uso delle collezioni in Java Comprendere le principali caratteristiche nelle varie classi di Collection disponibili Saper individuare quali classi di Collection usare in casi specifici Conoscere
DettagliProgrammazione. ( a.k.a. Generics )
Programmazione Parametrica ( a.k.a. Generics ) Programmazione parametrica: introduzione Generics e relationi di sottotipo wildcards generics e vincoli Implementazione di classi e metodi parametrici Supporto
DettagliProgrammazione Parametrica ( a.k.a. Generics )
Programmazione Parametrica ( a.k.a. Generics ) Programmazione parametrica: introduzione Generics e relationi di sottotipo wildcards generics e vincoli Implementazione di classi e metodi parametrici Supporto
DettagliPolimorfismo parametrico vs polimorfismo per inclusione
Polimorfismo parametrico vs polimorfismo per inclusione Esercizio Definire il tipo di dato Stack con operazioni Push( element ) Pop() Non forzare una specifica implementazione Non forzare un tipo specifico
DettagliCorso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)
Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I) Ing. Gianluca Caminiti Sommario ( OOP ) Programmazione Object-Oriented Incapsulamento, Ereditarietà, Polimorfismo Richiami
DettagliProgrammazione Java Avanzata Programmazione Object- Oriented in Java
Programmazione Java Avanzata Programmazione Object- Oriented in Java Ing. Gianluca Caminiti Testi di Riferimento (Java) Cay Horstmann Concetti di informatica e fondamenti di Java Apogeo, 2007 (Versione
DettagliConcetti Base Encapsulation ed Ereditarietà Programmare con l Ereditarietà. Java: Ereditarietà. Damiano Macedonio
Dipartimento di Informatica, Università degli Studi di Verona Corso di Programmazione per Bioformatica Introduzione Ereditarietà in Sintesi È uno dei concetti chiave della programmazione orientata agli
DettagliJAVA - I/O System. Il JAVA considera tutte i flussi da e verso l esterno, come stream di byte. Questi possono essere di ingresso o di uscita:
JAVA - I/O System Il JAVA considera tutte i flussi da e verso l esterno, come stream di byte. Questi possono essere di ingresso o di uscita: 1. InputStream: Flusso di byte in ingresso. Con questa classe
DettagliCorso di Algoritmi e Strutture Dati con Laboratorio. Java Collections Framework (I parte)
Corso di Algoritmi e Strutture Dati con Laboratorio Java Collections Framework (I parte) L infrastruttura JCF è una raccolta di interfacce e classi, tra loro correlate, appartenenti al pacchetto java.util.
Dettagli19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
19 - Eccezioni Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso
DettagliRichiami Java e Arrays
Richiami Java e Arrays concetti base G.T. 1 casting G.T. 1.3.3 e 2.5 uso array G.T. 3.1 lista semplice G.T. 3.2 1 Concetti base Oggetto istanza (di una classe) classe (tipo di un oggetto) variabili di
DettagliOCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO
CENTRO STUDI ULISSE Via Buccino, n. 22 - C.a.p. 84018 - Scafati (SA) Tel. Fax. 081.19970299-339.2365416-349.4152010 E-mail: info@centrostudiulisse.it - www.centrostudiulisse.it OCA JAVA 7 SE PROGRAMMER
DettagliImplementare un'interfaccia
Le interfacce Un metodo astratto è un metodo senza corpo, con un ";" dopo l'intestazione. Una interfaccia (interface) in Java ha una struttura simile a una classe, ma può contenere SOLO costanti e metodi
DettagliInsegnamento di Laboratorio di algoritmi e strutture dati
Insegnamento di Laboratorio di algoritmi e strutture dati Roberto Posenato ver. 0.6, 31/01/2008 1 / 25 Si comincia... 1 Esigenza... Definizione Tipi di eccezioni Sollevare eccezioni Gestire le eccezioni
DettagliProgrammazione II. Lezione 23. Daniele Sgandurra 28/1/2011.
Programmazione II Lezione 23 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 28/1/2011 1/20 Programmazione II Lezione 23 28/1/2011 Sommario 1 2/20 Programmazione II Lezione 23 28/1/2011 Parte I 3/20 Programmazione
DettagliOCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO
CENTRO STUDI ULISSE Via Buccino, n. 22 - C.a.p. 84018 - Scafati (SA) Tel. Fax. 081.19970299-339.2365416-349.4152010 E-mail: info@centrostudiulisse.it - www.centrostudiulisse.it OCA JAVA 7 SE PROGRAMMER
DettagliCapitolo 16. Programmazione generica. Cay S. Horstmann Concetti di informatica e fondamenti di Java quarta edizione
Capitolo 16 Programmazione generica Cay S. Horstmann Concetti di informatica e fondamenti di Java quarta edizione Obiettivi del capitolo Capire gli obiettivi della programmazione generica Essere in grado
DettagliIl Linguaggio Java. Le interfacce
Il Linguaggio Java Le interfacce Ordinamento dei conti PROBLEMA: si vogliono ordinare i libretti di risparmio (SavingsAccount) in base al loro tasso di interesse REQUISITO: La classe dovrebbe essere ordinabile,
DettagliLaboratorio di reti I
Laboratorio di reti I Stefano Brocchi brocchi@dsi.unifi.it 13 ottobre, 2009 Stefano Brocchi Laboratorio di reti I 13 ottobre, 2009 1 / 27 Introduzione Obiettivi del corso Aspetti di programmazione Java
DettagliProgrammazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi:
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 22 settembre 2014 TEMPO DISPONIBILE: 2 ore Negli
DettagliCapitolo 7 Un primo sguardo agli oggetti Schema e valori Elementi di classe e d istanza
I Sommario Prefazione xiii Capitolo 1 Introduzione alla programmazione 1 1.1 Hardware e software......................... 1 1.2 La programmazione......................... 4 1.2.1 I paradigmi di programmazione...............
DettagliProgrammazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi
DettagliLe eccezioni in Java
Eccezioni 1 Le eccezioni in Java i tipi di eccezione sono particolari classi che contengono solo il costruttore ci possono essere più costruttori overloaded sono definite in moduli separati da quelli che
DettagliLa classe Object. L2-Linguaggi di Programmazione II-unina 1
La classe Object L2-Linguaggi di Programmazione II-unina 1 JAVA è dotata di una classe speciale, una classe cosmica, denominata Object Qualsiasi altra classe deriva da Object Object Una variabile di tipo
DettagliProgrammazione a oggetti
Programmazione a oggetti Quanti oggetti, tra di loro parlando, fanno programmi. Pilu Crescenzi piluc@dsi.unifi.it Università di Firenze Programmazione a oggetti p.1/32 Cosa è un oggetto Una scatola software
DettagliRiassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1.
OO in Java: classi astratte, interfacce, classi interne Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro mizzaro@dimi.uniud.it Programmazione,
DettagliInizializzare oggetti
Inizializzare oggetti Uso della Classe Software per TLC - AA 2008/2009 1 Costruttori e polimorfismo Uso della Classe Un codice migliore Software per TLC - AA 2008/2009 2 Costruttori ed Ereditarietà Output:
DettagliProgrammazione a Oggetti Lezione 11. Eccezioni e Packages
Programmazione a Oggetti Lezione 11 Eccezioni e Packages Sommario Eccezioni Sollevamento Cattura Trattamento Packages e visibilità Eccezioni I programmi spesso si trovano ad operare in condizioni anomale:
DettagliCollezioni, mappe e iteratori (a cura del Prof. Marco Patella)
, mappe e iteratori (a cura del Prof. Marco Patella) 1 Introduzione al Java Collections Framework Una collezione (o contenitore) consente di organizzare e gestire un gruppo di oggetti collezioni (vere
DettagliLe eccezioni in Java
Eccezioni 1 Le eccezioni in Java i tipi di eccezione sono particolari classi che contengono solo il costruttore ci possono essere più costruttori overloaded sono definite in moduli separati da quelli che
DettagliEsempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e Polimorfismo
Esempi al calcolatore su: 1) 2) Subtyping e Polimorfismo 1 Esempio 1: 2 Introduzione Java prevede due automatismi legati ai costruttori: Se una classe non ha costruttori viene creato automaticamente il
DettagliGESTIONE DEGLI ERRORI
GESTIONE DEGLI ERRORI Spesso vi sono istruzioni critiche, che in certi casi possono produrre errori L approccio classico consiste nell inserire controlli (if else..) per cercare di intercettare a priori
DettagliGESTIONE DEGLI ERRORI
GESTIONE DEGLI ERRORI Spesso vi sono istruzioni critiche, che in certi casi possono produrre errori L approccio classico consiste nell inserire controlli (if else..) per cercare di intercettare a priori
DettagliEsempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo
Esempi al calcolatore su: 1) 2) Subtyping e polimorfismo 1 Esempio 1: 2 Introduzione Java prevede due automatismi legati ai costruttori: Se una classe non ha costruttori viene creato automaticamente il
DettagliNON ABBIAMO ANCORA CORRETTO LE PROVETTE!!!
NON ABBIAMO ANCORA CORRETTO LE PROVETTE!!! OO in Java: classi astratte, interfacce, classi interne Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/
DettagliLa classe java.lang.object
La classe java.lang.object In Java: Gerarchia di ereditarietà semplice Ogni classe ha una sola super-classe Se non viene definita esplicitamente una super-classe, il compilatore usa la classe predefinita
DettagliGerarchia delle classi Classi astratte Interfacce (Eccezioni) Laboratorio di Programmazione - Esercitazio 1
Gerarchia delle classi Classi astratte Interfacce (Eccezioni) Laboratorio di Programmazione - Esercitazio 1 Gerarchia delle classi Una sottoclasse eredita metodi, variabili, etc. dalla superclasse... Per
DettagliIntroduzione a Java. Giovanni Pardini. Dipartimento di Informatica Università di Pisa. 4 Java. Sommario. Iteratori.
Introduzione a Java 4 Giovanni Pardini pardinig@di.unipi.it Dipartimento di Informatica Università di Pisa 13 dicembre 2009 1 2 3 4 1 2 3 4 Un iteratore permette di iterare, in modo astratto, sugli elementi
Dettagli{4, 4, 2, 9, 13} {2, 2, 9, 13, 0} {0, 4, 2, 9, 13} {2, 9, 13, 0, 0}
16181 Nome Cognome A domande a risposta multipla con n scelte, la risposta corretta vale (n-1)/n*difficoltàdomanda, la risposta errata -1/n*difficoltà domanda, la risposta non data. Eseguendo il frammento
DettagliProgrammazione Orientata agli Oggetti in Linguaggio Java
Programmazione Orientata agli Oggetti in Linguaggio Java Ereditarietà e Polimorfismo: Polimorfismo - d Regole Sintattiche e Semantiche versione 1.2 Questo lavoro è concesso in uso secondo i termini di
DettagliParte I Java. Metodologie di Programmaziona Secondo Appello, 14/2/2006 1
Metodologie di Programmaziona 05 06 Secondo Appello, 14/2/2006 1 Parte I Java Considerate le seguenti definizioni di classe. class T { class S extends T { class A { public void print(string s) { System.out.println(s);
DettagliOCA JAVA 8 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO
CENTRO STUDI ULISSE Via Buccino, n. 22 - C.a.p. 84018 - Scafati (SA) Tel. Fax. 081.19970299-339.2365416-349.4152010 E-mail: info@centrostudiulisse.it - www.centrostudiulisse.it OCA JAVA 8 SE PROGRAMMER
DettagliProgrammazione Java Struttura di una classe, Costruttore, Riferimento this
Programmazione Java Struttura di una classe, Costruttore, Riferimento this romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp Roadmap > Struttura di una classe > Costruttore > Riferimento
DettagliProgrammazione ad Oggetti. Java Parte II
Programmazione ad Oggetti Java Parte II Overview Caratteristiche lessicali Il primo programma Java 1 Commenti /* Commento tradizionale, eventualmente su più linee, non nidificato */ // Commento su di una
DettagliEsempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e Polimorfismo
Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e Polimorfismo 1 Esempio 1: Costruttori ed ereditarietà Costruttori ed ereditarietà 2 Introduzione Java prevede due automatismi legati
DettagliCapitolo 5. Array e collezioni. c 2005 Pearson Education Italia Capitolo 5-1 / 61
Capitolo 5 Array e collezioni c 2005 Pearson Education Italia Capitolo 5-1 / 61 Sommario: Array e collezioni 1 Array Array di oggetti Lunghezza di un array Accesso agli elementi di un array Array e cicli
DettagliEreditarietà (ultima)
Ereditarietà (ultima) Classi astratte Un ibrido tra classi e interfacce Hanno alcuni metodi implementati normalmente, altri astratti Un metodo astratto non ha implementazione abstract class AccountTransaction...
DettagliEreditarietà (ultima)
Ereditarietà (ultima) Classi astratte Un ibrido tra classi e interfacce Hanno alcuni metodi implementati normalmente, altri astratti Un metodo astratto non ha implementazione abstract class AccountTransaction
DettagliEsonero del corso di Programmazione a Oggetti
Esonero del corso di Programmazione a Oggetti Roma, 1 dicembre 2005 Considerate le seguenti definizioni di classi e interfacce in Java: interface Fumetto{ void esclama(); void utile(); class Personaggio
DettagliI L IN I GU G AGG G I G O
JAVA IL LINGUAGGIO Tipi e variabili Ogni valore nel linguaggio ha un tipo Ogni variabile deve essere dichiarata ed associata ad un tipo: String greeting = "Hello, World!"; PrintStream printer = System.out;
DettagliIl linguaggio Java. Le eccezioni
Il linguaggio Java Le eccezioni Eccezioni Definizione: evento eccezionale che si verifica durante l esecuzione di un programma e che ne altera il normale flusso di esecuzione Situazioni che causano eccezioni
DettagliJAVA IL LINGUAGGIO. Ogni valore nel linguaggio ha un tipo Ogni variabile deve essere dichiarata ed associata ad un tipo:
JAVA IL LINGUAGGIO Tipi e variabili Ogni valore nel linguaggio ha un tipo Ogni variabile deve essere dichiarata ed associata ad un tipo: String greeting = "Hello, World!"; PrintStream printer = System.out;
Dettaglipublic BankAccount() { balance = 0; } public BankAccount(double initialbalance) { balance = initialbalance; }
Il Linguaggio Java Le interfacce La classe BankAccount public class BankAccount { public BankAccount() { balance = 0; public BankAccount(double initialbalance) { balance = initialbalance; public void deposit(double
DettagliCorso di Linguaggi di Programmazione
Corso di Linguaggi di Programmazione Lezione 19 Alberto Ceselli alberto.ceselli@unimi.it Dipartimento di Informatica Università degli Studi di Milano 14 Maggio 2013 Idea Programma = Algoritmi + Strutture
DettagliLPR 2005/2006 Lezione 7. paradigma di interazione domanda/risposta remote procedure call RMI (Remote Method Invocation): API JAVA esercizio
LPR 2005/2006 Lezione 7 paradigma di interazione domanda/risposta remote procedure call RMI (Remote Method Invocation): API JAVA esercizio PARADIGMA DI INTERAZIONE A DOMANDA/RISPOSTA Paradigma di interazione
DettagliLaurea in Informatica. "Programmazione Distribuita" - Prof. Scarano. A.A Università di Salerno 1. Organizzazione della lezione
Lezione 6 Ereditarietà Vittorio Corso di Programmazione Distribuita Laurea di I livello in Informatica Università degli Studi di Salerno 2 La progettazione OOP: suggerimenti Mantenere sempre, sempre, sempre
DettagliLe eccezioni in Java
Le eccezioni in Java G. Grossi 17 gennaio 2007 Indice 1 Le eccezioni Gerarchia eccezioni Le eccezioni Object Throwable Error Exception Controllate Non controllate RunTimeException Indice Le eccezioni 1
DettagliProgrammazione Java Struttura di una classe, Costruttore, Riferimento this
Programmazione Java Struttura di una classe, Costruttore, Riferimento this Davide Di Ruscio Dipartimento di Informatica Università degli Studi dell Aquila diruscio@di.univaq.it. Sommario 2 2» Struttura
DettagliJava generics PR
Java generics 1 Java: Interface e astrazione interface ListOfNumbers { boolean add(number elt); Number get(int index); interface ListOfIntegers { boolean add(integer elt); Integer get(int index); e ListOfStrings
DettagliCorso di Fondamenti di Informatica I
Corso di Fondamenti di Informatica I Generics in Java Fabio Patrizi, Silvia Bonomi Dipartimento di Ingegneria Informatica, Automatica e Gestionale Facoltà di Ingegneria dell Informazione, Informatica e
DettagliSTRUTTURE DINAMICHE. (slide: A. Baratè L.A. Ludovico) Programmazione per la Musica Adriano Baratè
STRUTTURE DINAMICHE (slide: A. Baratè L.A. Ludovico) Programmazione per la Musica Adriano Baratè DIFFERENZE RISPETTO AD ARRAY Finora le collezioni di dati sono state dichiarate come array (di stringhe,
DettagliEsempi in Java di program.ne O-O
Esempi in Java di program.ne O-O Ereditarietà Polimorfismo statico e dinamico Esercitazione laboratorio Interfaccia Comparable e Comparator 1 Gerarchia di ereditarietà Persona IS_A Docente Studente Tecnico
DettagliIntroduzione Generics Iteratori. Collezioni in Java. Dr. Giulio Pellitta. 13 aprile 2011
13 aprile 2011 Cos è una collezione? Gerarchia delle collezioni Introduzione Una collezione è semplicemente un oggetto che raggruppa più oggetti (detti elementi della collezione) in una singola unità.
DettagliParadigma a oggetti. Programmazione orientata agli oggetti. Programmazione orientata agli oggetti Paradigma a oggetti 1 / 30
Paradigma a oggetti Programmazione orientata agli oggetti Programmazione orientata agli oggetti Paradigma a oggetti 1 / 30 Programmazione ad oggetti. Si estendono i tipi di dati astratti che permettono:
DettagliProgrammazione ad oggetti. Paradigma a oggetti. Esempio. Esempio L estensione del tipo di dato comporta la ridefinizione del codice
Programmazione ad oggetti. Paradigma a oggetti Programmazione orientata agli oggetti Si estendono i tipi di dati astratti che permettono: information hiding e incapsulamento nascondo la rappresentazione
DettagliProgrammazione Java Variabili membro, Metodi La parola chiave final
Programmazione Java Variabili membro, Metodi La parola chiave final Davide Di Ruscio Dipartimento di Informatica Università degli Studi dell Aquila diruscio@di.univaq.it. Sommario 2 2» Variabili membro»
DettagliEsempio 2: Subtyping
Esempio 2: Subtyping 22 Subclassing e subtyping Fino ad ora abbiamo trattato l ereditarietà come strumento che consente il riuso flessibile di classi già esistenti mediante l aggiunta o la ridefinizione
DettagliEsercizio. Strutture Dati
Esercizio Si scriva un metodo public Position sibling(position v) che preso in input un nodo v restituisca il fratello di v. Il metodo dovrà lanciare una BoundaryViolationException nel caso in cui
DettagliIL CONCETTO DI CLASSE
IL CONCETTO DI CLASSE Una CLASSE riunisce le proprietà di: componente software: può essere dotata di suoi propri dati / operazioni moduli: riunisce dati e relative operazioni, fornendo idonei meccanismi
DettagliFONDAMENTI DI INFORMATICA C Linguaggio Java: Eccezioni
Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria CORSO DI FONDAMENTI DI INFORMATICA C Linguaggio Java: Eccezioni Prof. Zambonelli, Ing. Cabri, Ing. Denti, Ing. Andrea Aime Zambonelli,
DettagliOLTRE LE CLASSI OLTRE LE CLASSI
OLTRE LE CLASSI Nella sua parte non statica, una classe fornisce la definizione di un ADT parte visibile esternamente (public) implementazione dati privati, protetti, o visibili nel package metodi privati,
DettagliEccezioni predefinite
Eccezioni predefinite Java mette a disposizione molte eccezioni già confezionate, che descrivono la maggioranza dei problemi che possono verificarsi a run-time. Ognuna di queste è una classe. Tutte queste
DettagliProgrammazione I - corso B a.a prof. Viviana Bono
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 2009-10 prof. Viviana Bono Blocco 12 Riepilogo e complementi sui tipi Ripasso del sistema di tipi
DettagliRTTI Run-time type identification
RTTI Run-time type identification Come determinare il tipo di un oggetto durante l'esecuzione RTTI 1 Ereditarietà Forma Linea Rettangolo Cerchio interface Forma { class Linea implements Forma { void ;
DettagliRETI DI CALCOLATORI Linguaggio Java: Eccezioni
Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria Reggio Emilia CORSO DI RETI DI CALCOLATORI Linguaggio Java: Eccezioni Prof. Franco Zambonelli Lucidi realizzati in collaborazione
DettagliEsonero del corso di Programmazione a Oggetti
Esonero del corso di Programmazione a Oggetti Roma, 26 novembre 2008 Considerate le seguenti definizioni di classi e interfacce in Java: class P {public static void print(string s){system.out.println(s);
DettagliCosa sono i Generics?
Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it - lezione 13 - Generics in Java 1 Cosa
DettagliArrayList. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi132 Sesto San Giovanni
ArrayList Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi132 Sesto San Giovanni ArrayList Sotto diversi aspetti un ArrayList può essere considerato come un array migliore. I Miglioramenti sono
DettagliUn approccio possibile sarebbe creare un oggetto con un metodo adeguato per scandire collezioni o stampare i dati dell oggetto:
Visitor 152 23. Visitor (GoF pag. 331) 23.1. Descrizione Rappresenta una operazione da essere eseguita in una collezione di elementi di una struttura. L operazione può essere modificata senza alterare
DettagliCloneNotSupportedException clone() Object clone() protected native Object clone() throws CloneNotSupportedException this
Clonazione Importante esempio di eccezione controllata è CloneNotSupportedException che può essere lanciata dal metodo nativo clone() della classe Object. La dichiarazione di clone() è la seguente: protected
DettagliSTRUTTURE DATI: OLTRE GLI ARRAY LISTE
STRUTTURE DATI: OLTRE GLI ARRAY le strutture dati progettate per ospitare una collezione di elementi, sono variazioni di array Ma l'array ha dimensione fissa anche in Java determinata a priori, in linguaggi
DettagliProblema:garantire a compile time la coerenza dei dati di una collezione
Generics in Java type-safe Problema:garantire a compile time la coerenza dei dati di una collezione Il problema, noto come type-safe, richiede la capacità di usare strutture ed algoritmi generali specializzandoli
DettagliCommenti per documentare il codice (doc comments) I commenti speciali devono essere delimitati da /**... */.
Linguaggi Corso di Laurea Ingegneria Informatica (M-Z) A.A. 2006-2007 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it Documentazione in Java 1 Javadoc Terminology
Dettagli8. Java: Eccezioni e Thread
8. Java: Eccezioni e Thread Vittorio Scarano Algoritmi e Strutture Dati: Sistemi Distribuiti Corso di Laurea in Informatica Università degli Studi di Salerno Organizzazione della lezione Le eccezioni motivazioni
DettagliIL LINGUAGGIO JAVA. Introduzione alla sintassi di Java La sintassi formalizza le regole sintattiche per scrivere frasi ben formate
Fondamenti di Informatica IL LINGUAGGIO JAVA Sintassi, Semantica, Input, Tipi Elementari e Istruzione Condizionale 1 Introduzione alla sintassi di Java La sintassi formalizza le regole sintattiche per
DettagliASD: Sistemi Distribuiti (Prof. Scarano) 24/04/2002
Organizzazione della lezione 8. Java: Eccezioni e Thread Vittorio Scarano Algoritmi e Strutture Dati: Sistemi Distribuiti Corso di Laurea in Informatica Università degli Studi di Salerno Le eccezioni come
DettagliProgrammazione ad Oggetti
Programmazione ad Oggetti Java Eccezioni Eccezioni in breve Un eccezione è un oggetto che descrive una situazione anomala o di errore L eccezioni vengono lanciate da una parte di un programma e possono
DettagliLe basi del linguaggio Java
Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una
DettagliRicerca e ordinamento su array di oggetti. Corso di Programmazione 2 Esercitazione 5
Ricerca e ordinamento su array di oggetti Corso di Programmazione 2 Esercitazione 5 Sommario Ricercare in array di oggetti Interfaccia comparable Ordinare array di oggetti Problema Come ordinare, ricercare
Dettagli18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
18 - Vettori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it Corso di
DettagliSubtype Polymorphism. Conversioni di tipo. Conversioni di tipo. Subtyping. Conversioni di tipo. Interfacce e subtype polimorfismo
Subtype Polymorphism Interfacce e subtype polimorfismo Tipi, sottotipi e conversioni di tipo Polimorfismo e dinamic dispatch Conversioni di tipo Variabile: locazione con un tipo associato Tipo della variabile
DettagliAgent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Ingegneria del software A
Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Ingegneria del software A Input/output (in Java) Michele Tomaiuolo Eccezione Un eccezione è
DettagliPrincipi di Progettazione del Software a.a
Principi di Progettazione del Software a.a. 2017-2018 Fondamenti di Java Ing. Obiettivi della lezione Introduzione alla programmazione Object Oriented Ereditarietà Polimorfismo Interfacce Eccezioni 2 1
DettagliUniversità Ca Foscari DAIS. Programmazione ad Oggetti. Esame del modulo 1
Università Ca Foscari DAIS Programmazione ad Oggetti Esame del modulo 1 Nome: Matricola: Samuel Rota Bulò, a.a. 2012/2013 Programmazione ad Oggetti a.a. 2012/2013 Esame del modulo 1 Nome: Samuel Rota Bulò
DettagliDal libro di Savitch & Carrano
Dal libro di Savitch & Carrano Un eccezione (exception) è un oggetto che segnala l accadere di un evento anomalo durante l esecuzione di un metodo. Il processo di creazione di quest oggetto (cioè di generazione
Dettagli