Java generics PR
|
|
- Faustino Paoletti
- 5 anni fa
- Visualizzazioni
Transcript
1 Java generics 1
2 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 e // Indispensabile astrarre sui 3pi interface List<E> { boolean add(e n); E get(int index); Usiamo I )pi!!! List<Integer> List<Number> List<String> List<List<String>> 2
3 Parametri e parametri di ;po interface ListOfIntegers { boolean add(integer elt); Integer get(int index); interface List<E> { boolean add(e elt); E get(int index); Dichiarazione del parametro formale Istanziato con una espressione che ha il ;po richiesto (lst.add(7)) Tipo di add: Integer boolean Dichiarazione di un parametro di tipo Istanziabile con un qualunque tipo List<String> 3
4 Variabili di ;po class NewSet<T> implements Set<T> { // non-null, contains no duplicates //... List<T> therep; T lastiteminserted;... Dichiarazione Use Utilizzo 4
5 Dichiarare generici class Name<TypeVar1,, TypeVarN> { interface Name<TypeVar1,, TypeVarN> { o convenzioni standard T per Type, E per Element, K per Key, V per Value, Istanziare una classe generica significa fornire un valore di ;po Name<Type1,, TypeN> 5
6 Istanziare ;pi boolean add1(object elt); boolean add2(number elt); add1(new Date( )); // OK add2(new Date( )); // compile-time error Limite superiore gerarchia interface List1<E extends Object> { interface List2<E extends Number> { List1<Date> // OK, Date è un sottotipo di Object List2<Date> // compile-time error, Date non è // sottotipo di Number 6
7 Visione effeiva dei generici class Name<TypeVar1 extends Type1,, TypeVarN extends TypeN> { o (analogo per le interfacce) o (intuizione: Object è il limite superiore di default nella gerarchia dei ;pi) Istanziazione iden;ca Name<Type1,, TypeN> Ma compile-)me error se il ;po non è un somo;po del limite superiore della gerarchia 7
8 Usiamo le variabili di ;po Si possono effettuare tutte le operazioni compatibili con il limite superiore della gerarchia concettualmente questo corrisponde a forzare una sorta di precondizione sulla istanziazione del tipo class List1<E extends Object> { void m(e arg) { arg.asint( ); // compiler error, E potrebbe // non avere l operazione asint class List2<E extends Number> { void m(e arg) { arg.asint( ); // OK, Number e tutti i suoi // sottotipi supportano asint 8
9 Vincoli di ;po <TypeVar extends SuperType> o upper bound; va bene il supertype o uno dei suoi somo;pi <TypeVar extends ClassA & InterfB & InterfC & > o Mul)ple upper bounds <TypeVar super SubType> o lower bound; va bene il somo;po o uno qualunque dei suoi super;pi Esempio // strutture di ordine su alberi public class TreeSet<T extends Comparable<T>> {... 9
10 Esempio class Utils { static double sumlist(list<number> lst) { double result = 0.0; for (Number n : lst) result += n.doublevalue( ); return result; static Number choose(list<number> lst) { int i =... // numero random < lst.size return lst.get(i); 10
11 Soluzione efficace class Utils { static <T extends Number> Dichiarare double sumlist(list<t> lst) { i vincoli sui tipi double result = 0.0; for (Number n : lst) // anche T andrebbe bene result += n.doublevalue(); return result; Dichiarare static <T> i vincoli sui tipi T choose(list<t> lst) { int i = // random number < lst.size return lst.get(i); 11
12 Metodi generici Metodi che possono usare i ;pi generici delle classi Possono dichiarare anche i loro ;pi generici Le invocazioni di metodi generici devono obbligatoriamente istanziare i parametri di ;po o sta;camente: una forma di inferenza di ;po 12
13 Un esempio public class InsertionSort<T extends Comparable<T>> { public void sort(t[ ] x) { T tmp; for (int i = 1; i < x.length; i++) { // invariant: x[0],...,x[i-1] sorted tmp = x[i]; for (int j = i; j > 0 && x[j-1].compareto(tmp) > 0; j--) x[j] = x[j-1]; x[j] = tmp; 13
14 Generici e la nozione di somo;po Number Integer List<Number>? List<Integer> Integer è un somo;po di Number List<Integer> è un somo;po di List<Number>? 14
15 Quali sono le regole di Java? Se Type2 e Type3 sono differen;, e Type2 è un somo;po di Type3, allora Type1<Type2> non è un somo;po di Type1<Type3> Formalmente: la nozione di somo;po usata in Java è invariante per le classi generiche 15
16 Esempi (da Java) Tipi e somo;pi Ma o Integer è un somo;po di Number o ArrayList<E> è un somo;po di List<E> o List<E> è un somo;po di Collec;on<E> o List<Integer> non è un somo;po di List<Number> 16
17 List<Number> e List<Integer> interface List<T> { boolean add(t elt); T get(int index); Number Integer type List<Number> caramerizzata boolean add(number elt); Number get(int index); type List<Integer> caramerizzata boolean add(integer elt); Integer get(int index); List<Number> non è un super;po di List<Integer> 17
18 Una discussione (per capire anche la ricerca nel semore) interface List<T> { T get(int index); type List<Number> Number get(int index); Number Integer type List<Integer> Integer get(int index); La nozione di somo;po covariante sarebbe correma o List<Integer> somo;po di List<Number> Sfortunatamente Java non adoma questa soluzione 18
19 Allora parliamo anche di contravarianza interface List<T> { boolean add(t elt); type List<Number> boolean add(number elt); Number Integer type List<Integer> boolean add(integer elt); La nozione di somo;po contravariante sarebbe altremanto correma o List<Number> è somo;po di List<Integer> Ma Java... 19
20 Altri aspei List<Integer> e List<Number> non sono correla; dalla nozione di somo;po TuMavia, in diversi casi la nozione di somo;po sui generici funziona come uno se lo aspema anche in Java Esempio: assumiamo che LargeBag extends Bag, allora o LargeBag<Integer> è un somo;po di Bag<Integer> o LargeBag<Number> è un somo;po di Bag<Number> o LargeBag<String> è un somo;po di Bag<String> o 20
21 addall interface Set<E> { // Aggiunge a this tutti gli elementi di c // (che non appartengono a this) void addall(??? c); Quale è il miglior ;po per il parametro formale? o Il più ampio possibile o che permeme di avere implementazioni correme 21
22 addall interface Set<E> { // Aggiunge a this tutti gli elementi di c // (che non appartengono a this) void addall(??? c); Una prima scelta è void addall(set<e> c); Troppo restriivo o un parametro amuale di ;po List<E> non sarebbe permesso, e ciò è spiacevole 22
23 addall interface Set<E> { // Aggiunge a this tutti gli elementi di c // (che non appartengono a this) void addall(??? c); Secondo tenta;vo: void addall(collection<e> c); Troppo restriivo o il parametro amuale di ;po List<Integer> per Set<Number> non va bene anche se addall ha solo bisogno di leggere da c e non di modificarlo!!! o questa è la principale limitazione della nozione di invarianza per i generici in Java 23
24 addall interface Set<E> { // Aggiunge a this tutti gli elementi di c // (che non appartengono a this) void addall(??? c); Proviamo ancora <T extends E> void addall(collection<t> c); Idea buona: un parametro generico ma vincolato o posso avere un parametro amuale di ;po List<Integer> per Set<Number> o addall non può vedere nell implementazione il ;po T, sa solo che è un somo;po di E, e non può modificare la collec;on c 24
25 Altro esempio <T> void copyto(list<t> dst, List<T> src) { for (T t : src) dst.add(t); La soluzione va bene, ma ancora meglio <T1, T2 extends T1> void copyto(list<t1> dst, List<T2> src) { for (T2 t : src) dst.add(t); 25
26 Wildcard Sintassi delle wildcard o? extends Type, somo;po non specificato del ;po Type o? notazione semplificata per? extends Object o? super Type, super;po non specificato del ;po Type wildcard = una variabile di ;po anonima o? ;po non conosciuto o si usano le wildcard quando si usa un ;po esamamente una volta ma non si conosce il nome o l unica cosa che si sa è l unicità del ;po 26
27 Esempi interface Set<E> { void addall(collection<? extends E> c); o maggiormente flessibile rispemo a void addall(collection<e> c); o espressiva come <T extends E> void addall(collection<t> c); 27
28 Producer Extends, Consumer Super Quando si usano le wildcard? o si usa? extends T nei casi in cui si vogliono omenere dei valori (da un produmore di valori) o si usa? super T nei casi in cui si vogliono inserire valori (in un consumatore) o non vanno usate (basta T) quando si omengono e si producono valori <T> void copy(list<? super T> dst, List<? extends T> src); 28
29 ? vs Object? Tipo par;colare anonimo void printall(list<?> lst) { Quale è la differenza tra List<?> e List<Object>? o possiamo istanziare? con un ;po qualunque: Object, String, o List<Object> è più restriivo: List<String> non va bene Quale è la differenza tra List<Foo> e List<? extends Foo> o nel secondo caso il ;po anonimo è un somo;po sconosciuto di Foo 29
30 Raw types Con raw type si indica una classe/interfaccia senza nessun argomento di tipo (legacy code) Vector<Integer> intvec = new Vector<Integer>(); Vector rawvec = new Vector(); // OK Vector<String> stringvec = new Vector<String>(); Vector rawvec = stringvec; // OK 30
31 Inferenza di tipo Inferenza: capacità di controllare una invocazione di metodo e la dichiarazione di metodo associata al fine di determinare il tipo più specifico, in accordo ai vincoli di tipo presenti, che rende il metodo effettivamente invocabile class MyClass<S> { <T> MyClass(T t) {... new MyClass<Integer>("") diamond nota;on MyClass<Integer> myobject = new MyClass<>("") 31
32 Ancora l inferenza di tipo static <T> List<T> emptylist(); metodo in Collec;ons List<String> listone = Collections.<String>emptyList(); List<String> listone = Collections.emptyList(); void processstringlist(list<string> stringlist) {... processstringlist(collections.<string>emptylist()); processstringlist(collections.emptylist()); Java 8 inferisce dal ;po del parametro obbligatorio In Java 7 32
33 Java array Sappiamo bene come operare con gli array in Java Vero? Analizziamo questa classe class Array<T> { public T get(int i) { "op" public T set(t newval, int i) { "op" Domanda: Se Type1 è un somo;po di Type2, quale è la relazione tra Type1[] e Type2[]?? 33
34 Sorpresa! Sappiamo che per i generici la nozione di sottotipo è invariante, pertanto se Type1 è un sottotipo di Type2, allora Type1[] e Type2[] non dovrebbero essere correlati Ma Java è strano, se Type1 è un sottotipo di Type2, allora Type1[] è un sottotipo di Type2[] Java (ma anche C#) ha fatto questa scelta prima dell introduzione dei generici cambiarla ora è un po troppo invasivo per i pigri programmatori Java (commento obbligato per chi fa ricerca sui principi dei linguaggi di programmazione) 34
35 Ci sono anche cose buone Gli inglesi dicono: Programmers do okay stuff LibraryHolding Book void maybeswap(libraryholding[ ] arr) { if(arr[17].duedate( ) < arr[34].duedate( )) // swap arr[17] and arr[34] CD // cliente Book[ ] books = ; maybeswap(books); // usa la covarianza degli array 35
36 Ma può andare male void replace17(libraryholding[ ] arr, LibraryHolding h) { arr[17] = h; LibraryHolding Book CD // il solito cliente Book[] books = ; LibraryHolding thewall = new CD("Pink Floyd", replace17(books, thewall); Book b = books[17]; // contiene un CD b.getchapters( ); // problema!! "The Wall", ); 36
37 Le scelte di Java Il ;po dinamico è un somo;po di quello sta;co o violato nel caso di Book b La scelta di Java o ogni array conosce il suo ;po dinamico (Book[ ]) o modificare a (run-;me) con un un super;po determina ArrayStoreException pertanto replace17 solleva una eccezione o Every Java array-update includes run-)me check ü (dalla specifica della JVM) o Morale: fate amenzione agli array in Java 37
38 Too good to be true: type erasure TuI i ;pi generici sono trasforma; in Object nel processo di compilazione o mo;vo: backward-compa;bility con il codice vecchio o morale: a run;me, tume le istanziazioni generiche hanno lo stesso ;po List<String> lst1 = new ArrayList<String>( ); List<Integer> lst2 = new ArrayList<Integer>( ); lst1.getclass( ) == lst2.getclass( ) // true 38
39 Esempio class Vector<T> { T[] v; int sz; Vector() { v = new T[15]; sz = 0; <U implements Comparer<T>> void sort(u c) { c.compare(v[i], v[j]); Vector<Button> v; v.addelement(new Button()); Button b = v.elementat(0); class Vector { Object[] v; int sz; Vector() { v = new Object[15]; sz = 0; void sort(comparer c) { c.compare(v[i], v[j]); Vector v; v.addelement(new Button()); Button b = (Button)b.elementAt(0); 39
40 Generici e cas;ng List<?> lg = new ArrayList<String>( ); // ok List<String> ls = (List<String>) lg; // warning Dalla documentazione Java: Compiler gives an unchecked warning, since this is something the run-;me system will not check for you Problema public static <T> T badcast(t t, Object o){ return (T) o; // unchecked warning 40
41 equals class Node<E> public boolean equals(object obj) {... if (!(obj instanceof Node<E>)) return false; Node<E> n = (Node<E>) obj; return this.data( ).equals(n.data( )); Erasure: tipo dell argomento non esiste a runtime 41
42 equals class Node<E> public boolean equals(object obj) {... if (!(obj instanceof Node<?>)) return false; Node<E> n = (Node<E>) obj; return this.data( ).equals(n.data( )); Erasure: a runtime non si sa cosa sia E 42
43 Tips (da stackoverflow) Start by wri;ng a concrete instan;a;on o get it correct (tes;ng, reasoning, etc.) o consider wri;ng a second concrete version Generalize it by adding type parameters o think about which types are the same or different o the compiler will help you find errors 43
44 Java Generics (JG) Il compilatore verifica l u;lizzo corremo dei generici I parametri di ;po sono elimina; nel processo di compilazione e il class file risultante dalla compilazione è un normale class file senza poliformismo parametrico 44
45 Considerazioni JG aiutano a migliorare il polimorfismo della soluzione Limite principale: il ;po effeivo è perso a run;me a causa della type erasure TuMe le istanziazioni sono iden;ficate Esistono altre implementazioni dei generici per Java 45
46 Generics e Java Feature System Parameterized types JG/Pizza Bracha, Odersky, Stoutamire, Wadler P + bounds NextGen Cartwright, Steele P + bounds PolyJ Bank, Liskov, Myers P + constraints Agesen, Freund, Mitchell P + bounds Generic CLR Kennedy, Syme P + bounds Polymorphic methods P P O O P Type checking at point of definition P P P O P Non-reference instantiations O O P P P Exact run-time types O P? P P Polymorphic virtual methods O P O O P Type parameter 46 variance O P O O O
47 Una an3cipazione di programmazione avanzata 47
48 Generic C# Kennedy and Syme have extended CLR to support parametric types (the same proposal has been made for PolyJ by Cartwright and Steele) The verifier, JIT and loader have been changed When the program needs an instan;a;on of a generic type the loader generates the appropriate type The JIT can share implementa;on of reference instan;a;ons (Stack<String> has essen;ally the same code of Stack<Object>) 48
49 Generic C# compiler GC# compiler implements a JG like nota;on for parametric types Bounds are the same as in JG NO type-inference on generic methods: the type must be specified in the call Exact run;me types are granted by CLR so virtual generic methods are allowed All type constructors can be parameterized: struct, classes, interfaces and delegates 49
50 Esempio using System; namespace n { public class Foo<T> { T[] v; Foo() { v = new T[15]; public static void Main(string[] args) { Foo<string> f = new Foo<string>(); f.v[0] = "Hello"; string h = f.v[0]; Console.Write(h);.field private!0[] v.method private hidebysig specialname rtspecialname instance void.ctor() cil managed {.maxstack 2 ldarg.0 call instance void [mscorlib]system.object::.ct or() ldarg.0 ldc.i4.s 15 newarr!0 stfld!0[] class n.foo<! 0>::v ret // end of method Foo::.ctor 50
PROGRAMMAZIONE Java Generics
PROGRAMMAZIONE 2 13. 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
Java 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
JAVA GENERICS. Java Interface e astrazione. CSE 331 Au
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
Java 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
14. Java generics. Java Interface e astrazione. CSE 331 Au AA
AA 2014-2015 14. 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
JAVA GENERICS. Verso i (pi generici in Java: un esempio
JAVA GENERICS 1 Verso i (pi generici in Java: un esempio interface ListOfNumbers { boolean add(number elt); Number get(int index); interface ListOfIntegers { boolean add(integer elt); Integer get(int index);
AA Java generics
AA 2016-2017 13. Java generics 1 Java Interface e astrazine interface ListOfNumbers { blean add(number elt); Number get(int index); interface ListOfIntegers { blean add(integer elt); Integer get(int index);
AA Java generics
AA 2015-2016 14. Java generics 1 Java Interface e astrazine interface ListOfNumbers { blean add(number elt); Number get(int index); interface ListOfIntegers { blean add(integer elt); Integer get(int index);
Cenni 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,
Conoscere 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
Cosa 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
Generics in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A
Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it Generics in Java 1 Cosa sono i Generics?
Cosa sono i Generics?
Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2008-2009 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it - lezione 22 - Generics in Java 1 Cosa
Il linguaggio Java: aggiunte in Java 1.5
.. Il linguaggio Java: aggiunte in Java 1.5 Una breve presentazione GENERICI Java 1.5 introduce i generici: classi che hanno un parametro di tipo. Nelle versioni precedenti a Java 1.5 si può definire:
Programmazione. ( 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
Programmazione 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
Concetti 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
Introduzione 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à.
JAVA 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
Programmazione 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
Java Generics. Sunto di quanto letto nel libro Java Generics and Collections di Maurice Naftalin & Philip Wadler O'REILLY
Java Generics Sunto di quanto letto nel libro Java Generics and Collections di Maurice Naftalin & Philip Wadler O'REILLY Le Novità I GENERICI sono (forse) la modifica più corposa fra quelle inserite nella
Astrazioni Polimorfe e Tipi Generici
Astrazioni Polimorfe e Tipi Generici Polimorfismo Dal Greco molte forme Una variabile polimorfa può riferirsi a oggetti di classi diverse Un metodo polimorfo può avere parametri di tipi diversi Un tipo
Linguaggi di programmazione II AA 2010/2011 Esercitazione 2
Linguaggi di programmazione II AA 2010/2011 Esercitazione 2 1) Scrivere l'output del seguente programma Java public class Bean private String str; Bean(String str ) this.str = str; public String tostring()
Collezioni, 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
Programmazione 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
Implementare 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
Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals()
Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals() Ereditarietà (Inheritance) RIASSUMIAMO DALLA SCORSA
Polimorfismo per Genericità in Java
Polimorfismo per Genericità in Java Corso di Linguaggi di Programmazione ad Oggetti 1 A.A. 2003/04 A cura di Polimorfismo Polimorfismo Ad-Hoc: Overloading Un metodo può essere sovraccaricato per manifestare
Programmazione 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
Overloading - Overriding
1 Overloading - Overriding Overloading: Funzioni con uguale nome e diversa firma possono coesistere. move(int dx, int dy) move(int dx, int dy, int dz) Overriding: Ridefinizione di una funzione in una sottoclasse
Capitolo 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
18 - 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
Map<K,V> ESERCITAZIONE. Dalla documentazione Java 02/04/15
ESERCITAZIONE Map Dalla documentazione Java o public interface Map o An object that maps keys to values. A map cannot contain duplicate keys; each key can map to at most one value. o h-ps://docs.oracle.com/javase/8/docs/api/java/
Polimorfismo 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
Corso 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
ArrayList. 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
Programmazione Parametrica ( a.k.a. Generics )
Programmazione Parametrica ( a.k.a. Generics ) Introduzione ai meccanismi e concetti della programmazione parametrica Generics e relationi di sottotipo wildcards generics e vincoli Implemendaizone di classi
Java vs Ocaml. Una prima analisi
Java vs Ocaml Una prima analisi Alcune cara6eris7che di Java richiedono una conoscenza de6agliata delle librerie Sistemi di supporto forniscono mol7 strumen7 per programmare con Java (Ecplise è un esempio
Gerarchie e polimorfismo: liste
Gerarchie e polimorfismo: liste 1 Generalizzare le liste di interi List lista di oggetti non modificabile vorremo poi definire un sottotipo versione ordinata 2 List classe astratta usate i sottotipi per
Generics. L9 Linguaggi Progr.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
Richiami 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
Determinazione del tipo
1 Determinazione del tipo Point NamedPoint public static void main(string a[]){ Point p; // leggi k if (k==1) p=new Point(2,2); else p=new NamedPoint(3,3, A ); // p.getname(); SBAGLIATO! if (p instanceof
Esempi 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
Riuso di classi. Ereditarietà. Ereditarietà. Spesso si ha bisogno di classi simili
Riuso di classi Spesso si ha bisogno di classi simili Si vuole cioè riusare classi esistenti per implementare attributi e metodi leggermente diversi Non è pratico copiare la classe originaria e modificarne
PROGRAMMAZIONE 2 Gerarchie di 9pi: implementazioni mul9ple e principio di sos9tuzione
PROGRAMMAZIONE 2 Gerarchie di 9pi: implementazioni mul9ple e principio di sos9tuzione 1 Implementazioni mul3ple Il 3po superiore della gerarchia definisce una famiglia di 3pi tale per cui o tu= i membri
Subtype 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
Esempio su strutture dati dinamiche: ArrayList
Esempio su strutture dati dinamiche: ArrayList 1 ArrayList Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione
Introduzione C++ Il compilatore. La compilazione in g++ Introduzione a C, C++ e Java. C++ C Java 1977 C 1986 C++ Compilatori Librerie Usare oggetti
Introduzione a C, C++ e Java Introduzione C++ Compilatori Librerie Usare oggetti 1977 C 1986 C++ a better C con estensioni agli oggetti oggi uno standard industriale 1994 Java C ++ -- C++ C Java programmazione
Ereditarietà. Ereditarietà. Ereditarietà. Ereditarietà
L ereditarietà è il meccanismo attraverso cui viene implementata la relazione di specializzazione (is-a). L ereditarietà è il meccanismo attraverso cui una classe (derivata) eredita da un altra classe
Introduzione C++ Compilatori Librerie Usare oggetti
Introduzione C++ Compilatori Librerie Usare oggetti Introduzione a C, C++ e Java 1977 C 1986 C++ a better C con estensioni agli oggetti oggi uno standard industriale 1994 Java C ++ -- C++ C Java programmazione
Riassunto: 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,
Astrazioni sui dati : Specifica di Tipi di Dato Astratti in Java
Astrazioni sui dati : Specifica di Tipi di Dato Astratti in Java 1 Specifica ed Implementazione di Tipi di Dato Astratti in Java cos è un tipo di dato astratto specifica di tipi di dati astratti un tipo
Introduzione C++ Compilatori Librerie Usare oggetti. Introduzione a C, C++ e Java
Introduzione C++ Compilatori Librerie Usare oggetti Introduzione a C, C++ e Java 1977 C 1986 C++ a better C con estensioni agli oggetti oggi uno standard industriale 1994 Java C ++ -- C++ C Java programmazione
Capitolo 1. Introduzione. Cay S. Horstmann Concetti di informatica e fondamenti di Java
Capitolo 1 Introduzione Cay S. Horstmann Concetti di informatica e fondamenti di Java Obiettivi del capitolo Comprendere la distinzione fra linguaggi macchina e linguaggi di programmazione di alto livello
PROGRAMMAZIONE 2 5. Dynamic dispatch
PROGRAMMAZIONE 2 5. Dynamic dispatch PR2 2017-2018 1 Cosa significa? La dichiarazione di una variabile non determina in maniera univoca il >po dell oggeao che la variabile riferisce Cerchiamo di capire
Esonero 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
Esempio su strutture dati dinamiche: ArrayList
Esempio su strutture dati dinamiche: ArrayList Fondamenti di Informatica L-B 1 ArrayList Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito
Metodi di una Collection
Java Collections Introduzione Una java collection (a volte chiamata anche container) è un oggetto che raggruppa più elementi dello stesso tipo in una singola unità. Tipicamente è utilizzata per raggruppare
Corso 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
Generics & Collections
Generics & Collections Ingegneria del software Jody Marca jody.marca@polimi.it I Generics 2 I Generics rendono possibile definire tipi parametrici tramite classi ed interfacce che gestiscono tipi generici
A review of some Java basics. Java pass-by-value and List<> references
A review of some Java basics Java pass-by-value and List references Java is always pass-by-value Java is always pass-by-value. Unfortunately, they decided to call the location of an object a reference.
Java Virtual Machine (JVM)
Java Virtual Machine (JVM) JVM: una visione di insieme JVM: interprete del bytecode 1 Stru;ura Ogni istanza della JVM e cara;erizzata Area per memorizzare le tabelle dei metodi Heap Un insieme di stack
Corso di Progettazione del Software
T. Mancini & M. Scannapieco S.JOO.3 Java: le classi Object e Class February 2, 2008 p. 1/12 Università degli Studi di Roma La Sapienza Facoltà di Ingegneria Corso di Laurea in Ingegneria Gestionale Corso
Esonero 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
Programmazione a Oggetti. Polimorfismo e Tipi Generici
Programmazione a Oggetti Polimorfismo e Tipi Generici Polimorfismo Abilità di una funzione di eseguire il suo task su argomenti di tipi diversi Dipende di solito, dal fatto che la funzione non ha necessità
INFORMATICA III Parte B -Progettazione e Algoritmi
INFORMATICA III Parte B -Progettazione e Algoritmi Implementazione di codice algoritmico in Java Patrizia Scandurra patrizia.scandurra@unibg.it Università degli Studi di Bergamo a.a. 2010-11 Stessa interfaccia,
Introduzione 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
Corso 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
Capitolo 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...............
PROGRAMMAZIONE Gerarchie di :pi: implementazioni mul:ple e principio di sos:tuzione
PROGRAMMAZIONE 2 12. Gerarchie di :pi: implementazioni mul:ple e principio di sos:tuzione 1 Implementazioni mul/ple Il /po superiore della gerarchia definisce una famiglia di /pi tale per cui o tu9 i membri
Programmazione 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
PROGRAMMAZIONE 2 4. Un modello operazionale per Java
PROGRAMMAZIONE 2 4. Un modello operazionale per Java PR2 2017-2018 1 Liste in Java (à la OCaML) class Cons implements StringList { private String head; private StringList tail; public Cons (String h, StringList
Esempio su strutture dati dinamiche: ArrayList
Esempio su strutture dati dinamiche: ArrayList 1 ArrayList Gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione e rimane immutato.
19 - 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
24 - Possibili approfondimenti
24 - Possibili approfondimenti 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
Le interfacce nella OOP ad ereditarietà singola
Le interfacce nella OOP ad ereditarietà singola Cosa è un interfaccia? Implementing an interface allows a class to become more formal about the behavior it promises to provide. Interfaces form a contract
La 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
Esercitazione di lunedì - TUTTE LE MATRICOLE -
1 Esercitazione di lunedì - TUTTE LE MATRICOLE - 2 Pre-esercitazione - Prova a fare il primo esercizio guidato in modo da riprendere le fila del discorso fatto a lezione su come strutturare un progetto.
PROGRAMMING BY CONTRACT
PROGRAMMING BY CONTRACT Cosa vogliamo ottenere Implementare il sistema giusto validation Implementare il sistema correttamentre verification PR2 affronta il secondo aspetto: come creare del software che
Capitolo 6. Uso della gerarchia. c 2005 Pearson Education Italia Capitolo 6-1 / 125
Capitolo 6 Uso della gerarchia c 2005 Pearson Education Italia Capitolo 6-1 / 125 Sommario: Uso della gerarchia 1 Notazione UML per le classi 2 Introduzione alla gerarchia 3 Gerarchia e tipi La gerarchia
Ricerca 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
Esempio 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
La 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
Programmazione 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
OCA 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
Parte 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);
A.A. 2006/2007 Laurea di Ingegneria Informatica. Fondamenti di C++ Horstmann Capitolo 3: Oggetti Revisione Prof. M. Angelaccio
A.A. 2006/2007 Laurea di Ingegneria Informatica Fondamenti di C++ Horstmann Capitolo 3: Oggetti Revisione Prof. M. Angelaccio Obbiettivi Acquisire familiarità con la nozione di oggetto Apprendere le proprietà
Esempi 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
Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05
Strutture dati Il che cosa e il come Il che cosa ed il come Struttura dati: descrive come sono organizzati i dati e come sono realizzate le operazioni su di essi (cioe come si accede ai dati) Specifica
Le 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
PROGRAMMAZIONE 2 4. Java: un modello operazionale
PROGRAMMAZIONE 2 4. Java: un modello operazionale PR2 2018-2019 1 Abstract Stack Machine Abstract Stack Machine: modello computazionale per Java che permette di descrivere la nozione di stato modificabile
Corso di Linguaggi di Programmazione
Corso di Linguaggi di Programmazione Lezione 10 Alberto Ceselli ceselli@dti.unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 27 Marzo 2007 (2) Features richieste al
Classi Anonime In Java. Java. Espressioni Lambda. Implementazione Interfaccia
Java I nuovi paradigmi e linguaggi tendono a semplificare il lavoro del programmatore, nascondendo dentro le librerie (o i costrutti del linguaggio) parte della programmazione precedentemente necessaria