Download - Java 8: le nuove-interfacce di Ezio Sperduto
![Page 1: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/1.jpg)
Java 8 le nuove interfacce
Jug Roma
ezio sperduto
![Page 2: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/2.jpg)
Java 8: le nuove interfacce -‐ ezio sperduto
Jug Roma
novità introdo6e da Java 8 > default methods
> metodi sta:ci
![Page 3: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/3.jpg)
Jug Roma
le interfacce pre – Java 8
> contra6o tra programmatori (chi crea una classe e chi la usa)
> :po astra4o
> polimorfismo di :po (ereditarietà mul:pla, classica domanda da colloquio)
Java 8: le nuove interfacce -‐ ezio sperduto
![Page 4: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/4.jpg)
Jug Roma
le interfacce pre – Java 8
Java 8: le nuove interfacce -‐ ezio sperduto
permesso vietato
proto:pi metodi implementazioni
costan: variabili
solo membri pubblici costru6ori
![Page 5: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/5.jpg)
Jug Roma
Java 8: le nuove interfacce -‐ ezio sperduto
default methods: implementazione di default (comportamento), presente già nell’interfaccia
interface Collection{
default void sort(Comparator c){// ordina etc.
}
…}
![Page 6: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/6.jpg)
Jug Roma
Java 8: le nuove interfacce -‐ ezio sperduto
language designer library designer sw designer
![Page 7: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/7.jpg)
Jug Roma
Java 8: le nuove interfacce -‐ ezio sperduto
interfaccia di libreria implementazione programmatore
implementa m.astra6o 1
m.astra6o 2
m.concreto 1
m.concreto 2 Ver.1
![Page 8: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/8.jpg)
Jug Roma
Java 8: le nuove interfacce -‐ ezio sperduto
interfaccia di libreria implementazione programmatore
implementa m.astra6o 1
m.astra6o 2
m.concreto 1
m.concreto 2 Ver.1
interfaccia di libreria implementazione programmatore
implementa m.astra6o 1
m.astra6o 2
m.concreto 1
m.concreto 2 Ver.2
m.astra6o NEW ?????????????
Il programmatore deve modificare la sua implementazione per poter usare la nuova libreria (anche senza aggiungere valore al suo so8ware)
![Page 9: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/9.jpg)
Jug Roma
Java 8: le nuove interfacce -‐ ezio sperduto
interfaccia di libreria implementazione programmatore
implementa m.astra6o 1
m.astra6o 2
m.concreto 1
m.concreto 2 Ver.1
interfaccia di libreria implementazione programmatore
implementa m.astra6o 1
m.astra6o 2
m.concreto 1
m.concreto 2 Ver.2
default method
m.default NEW
Il programmatore beneficia dell’implementazione di default senza alcuna modifica
m.default NEW
![Page 10: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/10.jpg)
Java 8: le nuove interfacce -‐ ezio sperduto
Jug Roma
Kinds Of Compa5bility ü source compa:bility
(compilazione priva di errori)
ü binary compa:bility (linking privo di errori)
ü behavioral compa:bility (escecuzione priva di errori logici)
![Page 11: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/11.jpg)
Java 8: le nuove interfacce -‐ ezio sperduto
Jug Roma
Kinds Of Compa5bility ü source compa:bility NO
(compilazione priva di errori)
ü binary compa:bility OK (linking privo di errori)
ü behavioral compa:bility ? (escecuzione priva di errori logici)
Exception in thread "main" java.lang.AbstractMethodError
error: Ellipse is not abstractand does not override abstract method setRelativeSize(int,int) in Ridimensionabile
![Page 12: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/12.jpg)
Java 8: le nuove interfacce -‐ ezio sperduto
Jug Roma
“Default methods are a new feature added in Java 8 to help evolve APIs in a compatible way”
default void setRelativeSize(int lFatt, int hFatt){
int newLarghezza = getLarghezza() / lFatt;int newAltezza = getAltezza() / hFatt;
setAbsoluteSize(newLarghezza,newAltezza); }
![Page 13: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/13.jpg)
Java 8: le nuove interfacce -‐ ezio sperduto
Jug Roma
interfaces VS abstract classes
sono diventate la stessa cosa? SI e NI!
1. ereditarietà (singola/mul:pla)
2. la classe astra6a definisce lo STATO -‐ campi definiscono la situazione iniziale -‐ metodi d’istanza definiscono comportamento su stato* -‐ costru4ori definiscono l’inizializzazione dell’istanza**
* dunque i default method non sono veri e propri metodi d’istanza? ** costru6ori si, istanziazione no
![Page 14: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/14.jpg)
Java 8: le nuove interfacce -‐ ezio sperduto
Jug Roma
Resolu5on Rules Cosa stampa? interface A{
default void hello(){System.out.println(“sono A”);
}}
interface B{default void hello(){
System.out.println(“sono B”);}
}
class C implements A,B{public static void main(String...args){
new C().hello();}
}
![Page 15: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/15.jpg)
Java 8: le nuove interfacce -‐ ezio sperduto
Jug Roma
Resolu5on Rules
1. la classe vince sempre un metodo dichiarato in classe/superclasse ha priorità su qualunque default method
2. la sub-‐interfaccia vince sulla super-‐interfaccia ha priorità il default method più specifico (se il default method è definito in A e B con la stessa firma, e B estende A, il metodo scelto sarà sempre quello di B)
3. negli altri casi: errore del compilatore! se non ci troviamo in 1. o 2. abbiamo un ambiguità (possiamo evitarla o risolverla manualmente*)
![Page 16: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/16.jpg)
Java 8: le nuove interfacce -‐ ezio sperduto
Jug Roma
Resolu5on Rules
// stesse interfacce A e B di prima
public class D implements A{ }
public class C extends D implements A,B{public static void main(String...args){
new C().hello();}
}
Cosa stampa?
A + void hello()
B + void hello()
D
C
![Page 17: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/17.jpg)
Java 8: le nuove interfacce -‐ ezio sperduto
Jug Roma
Resolu5on Rules
Cosa stampa? La regola 1. indica priorità al metodo della classe. Ma non ci sono metodi “dichiara:” nella classe (non c’è overriding) La regola 2. indica che ha priorità il metodo “più specifico” Dunque stamperà “sono B”
![Page 18: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/18.jpg)
Java 8: le nuove interfacce -‐ ezio sperduto
Jug Roma
Resolu5on Rules
// stesse interfacce A e B di prima
public class C implements A,B{
public static void main(String...args){new C().hello();
}
}
Cosa stampa?
A + void hello()
B + void hello()
C
![Page 19: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/19.jpg)
Java 8: le nuove interfacce -‐ ezio sperduto
Jug Roma
Resolu5on Rules Cosa stampa? Si segue la regola 3. (errore), come scavalcarlo? Risposta: override nella classe, esplicitando il default method preferito
// stesse interfacce A e B di prima
public class C implements A,B{. . .void hello(){
B.super.hello();}
}
![Page 20: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/20.jpg)
Java 8: le nuove interfacce -‐ ezio sperduto
Jug Roma
Resolu5on Rules: Diamond Problem
A + void hello()
B
D
C
![Page 21: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/21.jpg)
Java 8: le nuove interfacce -‐ ezio sperduto
Jug Roma
Resolu5on Rules: Diamond Problem interface A{
default void hello(){System.out.println("sono A");
}}
interface B extends A{}
interface C extends A{}
class D implements B,C{public static void main(String...a){
new D().hello();}
Cosa stampa?
![Page 22: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/22.jpg)
Java 8: le nuove interfacce -‐ ezio sperduto
Jug Roma
Resolu5on Rules: Diamond Problem interface A{
default void hello(){System.out.println("sono A");
}}
interface B extends A{}
interface C extends A{}
class D implements B,C{public static void main(String...a){
new D().hello();}
Cosa stampa?
Unico metodo a disposizione (default). Non ci sono ambiguità: stampa “sono A”. In C++: caso più complesso, ereditarietà mul:pla. Doppia copia del metodo e disambiguazione.
![Page 23: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/23.jpg)
Java 8: le nuove interfacce -‐ ezio sperduto
Jug Roma
Resolu5on Rules: Diamond Problem (v.2) interface A{
default void hello(){System.out.println("sono A");
}}
interface B extends A{void hello();
}
interface C extends A{}
class D implements B,C{public static void main(String...a){
new D().hello();}
Cosa stampa?
![Page 24: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/24.jpg)
Java 8: le nuove interfacce -‐ ezio sperduto
Jug Roma
Resolu5on Rules: Diamond Problem (v.2) interface A{
default void hello(){System.out.println("sono A");
}}
interface B extends A{void hello();
}
interface C extends A{}
class D implements B,C{public static void main(String...a){
new D().hello();}
Cosa stampa?
Compe:zione tra metodo default e metodo astra6o. Regola 2. il metodo più specifico ha priorità. Il metodo astra6o è un override del default. Dunque errore: il compilatore chiederà ridefinizione in D!
![Page 25: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/25.jpg)
Java 8: le nuove interfacce -‐ ezio sperduto
Jug Roma
Default Method: usage paDerns
> opQonal method forzatura nell’implementazione di metodo, boilerplate code (lancio un eccezione su metodo non implementato)
> ereditarietà mulQpla di comportamento ereditando da più interfacce, eredi:amo più default method -‐ proge6azione di interfacce minimiali -‐ composizione di interfacce ortogonali
![Page 26: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/26.jpg)
Java 8: le nuove interfacce -‐ ezio sperduto
Jug Roma
Nuove Interfacce: metodi sta5ci
Pre Java 8: -‐ creare interfaccia e classe accompagnatrice (interfaccia Collection classe Collections)
Con Java 8: -‐ i metodi di u:lità comune sono incorpora: nell’interfaccia stessa, si sviluppa solo 1 :po (le classi precedentemente sviluppate sono mantenute per retrocompa5bilità)
![Page 27: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/27.jpg)
Java 8: le nuove interfacce -‐ ezio sperduto
Jug Roma
Esempi reali interface Collection<E>{
. . .default void sort(Comparator<? super E> c){Collections.sort(this, c); }
}
interface Comparator<T>{. . .static <T extends Comparable<? super T>> Comparator<T> naturalOrder() {
. . .}
}
List<Integer> numbers=Arrays.asList(0,1,1,2,3,5,8,13);numbers.sort(Comparator.naturalOrder());
maggiore riflessività! OOP
(Comparator esempio emblema5co)
![Page 28: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/28.jpg)
Jug Roma
Riferimen: Oracle The Java Tutorials
Java 8 in AcQon Urma, Fusco, MycroO (Manning)
Java 8: le nuove interfacce -‐ ezio sperduto
![Page 29: Java 8: le nuove-interfacce di Ezio Sperduto](https://reader035.vdocuments.pub/reader035/viewer/2022062420/55cc6a1fbb61ebbe048b46d3/html5/thumbnails/29.jpg)
Java 8: le nuove interfacce -‐ ezio sperduto
Jug Roma
Grazie per l’a6enzione! Domande?
Con:nua con . . . “Java 8: λ-‐expression e programmazione funzionale”