Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe ›...

73
Interfaces and Lambda Expressions Prof. Michele Loreti Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie Prof. Michele Loreti Interfaces and Lambda Expressions 115 / 143

Transcript of Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe ›...

Page 1: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Interfaces and Lambda Expressions

Prof. Michele Loreti

Programmazione AvanzataCorso di Laurea in Informatica (L31)Scuola di Scienze e Tecnologie

Prof. Michele Loreti Interfaces and Lambda Expressions 115 / 143

Page 2: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Interfaces and Lambda expressions

Interfaces are a key feature of object-oriented programming. . .

. . . they specify what should be done

. . . without having to provide an implementation.

Recently functional programming has risen in importance because it is wellsuited for concurrent and event-driven programming.

Java integrates aspects of functional programming in the object-orientedapproach.

Prof. Michele Loreti Interfaces and Lambda Expressions 116 / 143

Page 3: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Interfaces and Lambda expressions

Interfaces are a key feature of object-oriented programming. . .

. . . they specify what should be done

. . . without having to provide an implementation.

Recently functional programming has risen in importance because it is wellsuited for concurrent and event-driven programming.

Java integrates aspects of functional programming in the object-orientedapproach.

Prof. Michele Loreti Interfaces and Lambda Expressions 116 / 143

Page 4: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Interfaces and Lambda expressions

Interfaces are a key feature of object-oriented programming. . .

. . . they specify what should be done

. . . without having to provide an implementation.

Recently functional programming has risen in importance because it is wellsuited for concurrent and event-driven programming.

Java integrates aspects of functional programming in the object-orientedapproach.

Prof. Michele Loreti Interfaces and Lambda Expressions 116 / 143

Page 5: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Interfaces and Lambda expressions

Interfaces are a key feature of object-oriented programming. . .

. . . they specify what should be done

. . . without having to provide an implementation.

Recently functional programming has risen in importance because it is wellsuited for concurrent and event-driven programming.

Java integrates aspects of functional programming in the object-orientedapproach.

Prof. Michele Loreti Interfaces and Lambda Expressions 116 / 143

Page 6: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Interfaces and Lambda expressions

Interfaces are a key feature of object-oriented programming. . .

. . . they specify what should be done

. . . without having to provide an implementation.

Recently functional programming has risen in importance because it is wellsuited for concurrent and event-driven programming.

Java integrates aspects of functional programming in the object-orientedapproach.

Prof. Michele Loreti Interfaces and Lambda Expressions 116 / 143

Page 7: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Interaces

An interface is a mechanism for spelling out a contract between twoparties:

� the supplier of a service;

� the classes that want their objects to be usable with the service.

Example: Consider a service that works on sequences of integers,reporting the average of the first n values:

p u b l i c s t a t i c d o u b l e a v e r a g e ( I n t S e q u e n c e seq , i n t n )

Such sequence can take many forms!

Prof. Michele Loreti Interfaces and Lambda Expressions 117 / 143

Page 8: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Interaces

An interface is a mechanism for spelling out a contract between twoparties:

� the supplier of a service;

� the classes that want their objects to be usable with the service.

Example: Consider a service that works on sequences of integers,reporting the average of the first n values:

p u b l i c s t a t i c d o u b l e a v e r a g e ( I n t S e q u e n c e seq , i n t n )

Such sequence can take many forms!

Prof. Michele Loreti Interfaces and Lambda Expressions 117 / 143

Page 9: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Interaces

An interface is a mechanism for spelling out a contract between twoparties:

� the supplier of a service;

� the classes that want their objects to be usable with the service.

Example: Consider a service that works on sequences of integers,reporting the average of the first n values:

p u b l i c s t a t i c d o u b l e a v e r a g e ( I n t S e q u e n c e seq , i n t n )

Such sequence can take many forms!

Prof. Michele Loreti Interfaces and Lambda Expressions 117 / 143

Page 10: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Interaces

An interface is a mechanism for spelling out a contract between twoparties:

� the supplier of a service;

� the classes that want their objects to be usable with the service.

Example: Consider a service that works on sequences of integers,reporting the average of the first n values:

p u b l i c s t a t i c d o u b l e a v e r a g e ( I n t S e q u e n c e seq , i n t n )

Such sequence can take many forms!

Prof. Michele Loreti Interfaces and Lambda Expressions 117 / 143

Page 11: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Interaces

An interface is a mechanism for spelling out a contract between twoparties:

� the supplier of a service;

� the classes that want their objects to be usable with the service.

Example: Consider a service that works on sequences of integers,reporting the average of the first n values:

p u b l i c s t a t i c d o u b l e a v e r a g e ( I n t S e q u e n c e seq , i n t n )

Such sequence can take many forms!

Prof. Michele Loreti Interfaces and Lambda Expressions 117 / 143

Page 12: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Interfaces at work

For a sequence of integers we have to consider, at least, two methods:

� test if there is another element in the list;

� get the next element.

These informal descriptions allow us to derive the following interface:

p u b l i c i n t e r f a c e I n t S e q u e n c e {b o o l e a n hasNext ( ) ;i n t n e x t ( ) ;

}

Prof. Michele Loreti Interfaces and Lambda Expressions 118 / 143

Page 13: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Interfaces at work

For a sequence of integers we have to consider, at least, two methods:

� test if there is another element in the list;

� get the next element.

These informal descriptions allow us to derive the following interface:

p u b l i c i n t e r f a c e I n t S e q u e n c e {b o o l e a n hasNext ( ) ;i n t n e x t ( ) ;

}

Prof. Michele Loreti Interfaces and Lambda Expressions 118 / 143

Page 14: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Interfaces at work

For a sequence of integers we have to consider, at least, two methods:

� test if there is another element in the list;

� get the next element.

These informal descriptions allow us to derive the following interface:

p u b l i c i n t e r f a c e I n t S e q u e n c e {b o o l e a n hasNext ( ) ;i n t n e x t ( ) ;

}

Prof. Michele Loreti Interfaces and Lambda Expressions 118 / 143

Page 15: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Interfaces at work

For a sequence of integers we have to consider, at least, two methods:

� test if there is another element in the list;

� get the next element.

These informal descriptions allow us to derive the following interface:

p u b l i c i n t e r f a c e I n t S e q u e n c e {b o o l e a n hasNext ( ) ;i n t n e x t ( ) ;

}

Prof. Michele Loreti Interfaces and Lambda Expressions 118 / 143

Page 16: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Interfaces at work

This interface allow us to implement method average:

p u b l i c s t a t i c d o u b l e a v e r a g e ( I n t S e q u e n c e seq , i n t n ) {i n t count = 0 ;d o u b l e sum = 0 ;w h i l e ( seq . hasNext ( ) && count<n ) {

count++;sum += seq . n e x t ( ) ;

}r e t u r n count == 0 ? 0 : sum/ count ;

}

We don’t know the exact implementation of IntSequence!

Prof. Michele Loreti Interfaces and Lambda Expressions 119 / 143

Page 17: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Interfaces at work

This interface allow us to implement method average:

p u b l i c s t a t i c d o u b l e a v e r a g e ( I n t S e q u e n c e seq , i n t n ) {i n t count = 0 ;d o u b l e sum = 0 ;w h i l e ( seq . hasNext ( ) && count<n ) {

count++;sum += seq . n e x t ( ) ;

}r e t u r n count == 0 ? 0 : sum/ count ;

}

We don’t know the exact implementation of IntSequence!

Prof. Michele Loreti Interfaces and Lambda Expressions 119 / 143

Page 18: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Interfaces at work

This interface allow us to implement method average:

p u b l i c s t a t i c d o u b l e a v e r a g e ( I n t S e q u e n c e seq , i n t n ) {i n t count = 0 ;d o u b l e sum = 0 ;w h i l e ( seq . hasNext ( ) && count<n ) {

count++;sum += seq . n e x t ( ) ;

}r e t u r n count == 0 ? 0 : sum/ count ;

}

We don’t know the exact implementation of IntSequence!

Prof. Michele Loreti Interfaces and Lambda Expressions 119 / 143

Page 19: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Implementing an Interface

The classes that want to be usable with the average method mustimplement the IntSequence interface

p u b l i c c l a s s SquareSequence implements I n t S e q u e n c e {

p r i v a t e i n t i =0;

p u b l i c b o o l e a n hasNext ( ) {r e t u r n t r u e ;

}

p u b l i c i n t n e x t ( ) {i ++;

r e t u r n i ∗ i ;}

}

Prof. Michele Loreti Interfaces and Lambda Expressions 120 / 143

Page 20: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Implementing an Interface

The classes that want to be usable with the average method mustimplement the IntSequence interface

p u b l i c c l a s s SquareSequence implements I n t S e q u e n c e {

p r i v a t e i n t i =0;

p u b l i c b o o l e a n hasNext ( ) {r e t u r n t r u e ;

}

p u b l i c i n t n e x t ( ) {i ++;

r e t u r n i ∗ i ;}

}

Prof. Michele Loreti Interfaces and Lambda Expressions 120 / 143

Page 21: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Example: Fibonacci Sequence

p u b l i c c l a s s F i b o n a c c i S e q u e n c e implements I n t S e q u e n c e {

p r i v a t e i n t a = 1 ;p r i v a t e i n t b = 1 ;

p u b l i c b o o l e a n hasNext ( ) {r e t u r n t r u e ;

}

p u b l i c i n t n e x t ( ) {i n t r e s = a ;a = b ;b = r e s+a ;r e t u r n r e s ;

}

}

Prof. Michele Loreti Interfaces and Lambda Expressions 121 / 143

Page 22: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Example: Digit Sequence

p u b l i c c l a s s D i g i t S e q u e n c e implements I n t S e q u e n c e {p r i v a t e i n t number ;p u b l i c D i g i t S e q u e n c e ( i n t number ) {

t h i s . number = number ;}p u b l i c b o o l e a n hasNext ( ) {

r e t u r n t h i s . number != 0 ;}p u b l i c i n t n e x t ( ) {

i n t r e s u l t = t h i s . number % 1 0 ;t h i s . number /= 1 0 ;r e t u r n r e s u l t ;

}p u b l i c i n t r e s t ( ) {

r e t u r n t h i s . number ;}

}

Prof. Michele Loreti Interfaces and Lambda Expressions 122 / 143

Page 23: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Interface type

Let us consider the following portion of code:

I n t S e q u e n c e seq = new D i g i t S e q u e n c e (19876) ;d o u b l e avg = U t i l . a v e r a g e ( seq , 100) ;

The type of variable seq is IntSequence!

Terminology: S is a supertype of T (the subtype) when any value of T

can be assigned to a variable of type S (without cast).

Occasionally, you may need to convert a variable of supertype in a specificsubtype with the cast operation! It is dangerous and in general Wrong!

If really needed use instanceof to checlk the correctness of the operation.

Prof. Michele Loreti Interfaces and Lambda Expressions 123 / 143

Page 24: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Interface type

Let us consider the following portion of code:

I n t S e q u e n c e seq = new D i g i t S e q u e n c e (19876) ;d o u b l e avg = U t i l . a v e r a g e ( seq , 100) ;

The type of variable seq is IntSequence!

Terminology: S is a supertype of T (the subtype) when any value of T

can be assigned to a variable of type S (without cast).

Occasionally, you may need to convert a variable of supertype in a specificsubtype with the cast operation! It is dangerous and in general Wrong!

If really needed use instanceof to checlk the correctness of the operation.

Prof. Michele Loreti Interfaces and Lambda Expressions 123 / 143

Page 25: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Interface type

Let us consider the following portion of code:

I n t S e q u e n c e seq = new D i g i t S e q u e n c e (19876) ;d o u b l e avg = U t i l . a v e r a g e ( seq , 100) ;

The type of variable seq is IntSequence!

Terminology: S is a supertype of T (the subtype) when any value of T

can be assigned to a variable of type S (without cast).

Occasionally, you may need to convert a variable of supertype in a specificsubtype with the cast operation! It is dangerous and in general Wrong!

If really needed use instanceof to checlk the correctness of the operation.

Prof. Michele Loreti Interfaces and Lambda Expressions 123 / 143

Page 26: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Interface type

Let us consider the following portion of code:

I n t S e q u e n c e seq = new D i g i t S e q u e n c e (19876) ;d o u b l e avg = U t i l . a v e r a g e ( seq , 100) ;

The type of variable seq is IntSequence!

Terminology: S is a supertype of T (the subtype) when any value of T

can be assigned to a variable of type S (without cast).

Occasionally, you may need to convert a variable of supertype in a specificsubtype with the cast operation!

It is dangerous and in general Wrong!

If really needed use instanceof to checlk the correctness of the operation.

Prof. Michele Loreti Interfaces and Lambda Expressions 123 / 143

Page 27: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Interface type

Let us consider the following portion of code:

I n t S e q u e n c e seq = new D i g i t S e q u e n c e (19876) ;d o u b l e avg = U t i l . a v e r a g e ( seq , 100) ;

The type of variable seq is IntSequence!

Terminology: S is a supertype of T (the subtype) when any value of T

can be assigned to a variable of type S (without cast).

Occasionally, you may need to convert a variable of supertype in a specificsubtype with the cast operation! It is dangerous and in general Wrong!

If really needed use instanceof to checlk the correctness of the operation.

Prof. Michele Loreti Interfaces and Lambda Expressions 123 / 143

Page 28: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Interface type

Let us consider the following portion of code:

I n t S e q u e n c e seq = new D i g i t S e q u e n c e (19876) ;d o u b l e avg = U t i l . a v e r a g e ( seq , 100) ;

The type of variable seq is IntSequence!

Terminology: S is a supertype of T (the subtype) when any value of T

can be assigned to a variable of type S (without cast).

Occasionally, you may need to convert a variable of supertype in a specificsubtype with the cast operation! It is dangerous and in general Wrong!

If really needed use instanceof to checlk the correctness of the operation.

Prof. Michele Loreti Interfaces and Lambda Expressions 123 / 143

Page 29: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Extending Interfaces

An interface can extend another, requiring or providing additional methodson top of the original ones.

Example:

p u b l i c i n t e r f a c e C l o s e a b l e {v o i d c l o s e ( ) ;

}

p u b l i c i n t e r f a c e Channel e x t e n d s C l o s e a b l e {b o o l e a n isOpen ( ) ;

}

Prof. Michele Loreti Interfaces and Lambda Expressions 124 / 143

Page 30: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Extending Interfaces

An interface can extend another, requiring or providing additional methodson top of the original ones.

Example:

p u b l i c i n t e r f a c e C l o s e a b l e {v o i d c l o s e ( ) ;

}

p u b l i c i n t e r f a c e Channel e x t e n d s C l o s e a b l e {b o o l e a n isOpen ( ) ;

}

Prof. Michele Loreti Interfaces and Lambda Expressions 124 / 143

Page 31: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Extending Interfaces

An interface can extend another, requiring or providing additional methodson top of the original ones.

Example:

p u b l i c i n t e r f a c e C l o s e a b l e {v o i d c l o s e ( ) ;

}

p u b l i c i n t e r f a c e Channel e x t e n d s C l o s e a b l e {b o o l e a n isOpen ( ) ;

}

Prof. Michele Loreti Interfaces and Lambda Expressions 124 / 143

Page 32: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Implementing Multiple Interfaces

A class can implement any number of interfaces.

All the methods defined in all the implemented interfaces must beprovided.

Warning: handle possible clash of names!

Prof. Michele Loreti Interfaces and Lambda Expressions 125 / 143

Page 33: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Implementing Multiple Interfaces

A class can implement any number of interfaces.

All the methods defined in all the implemented interfaces must beprovided.

Warning: handle possible clash of names!

Prof. Michele Loreti Interfaces and Lambda Expressions 125 / 143

Page 34: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Implementing Multiple Interfaces

A class can implement any number of interfaces.

All the methods defined in all the implemented interfaces must beprovided.

Warning: handle possible clash of names!

Prof. Michele Loreti Interfaces and Lambda Expressions 125 / 143

Page 35: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Constants

An interface can contain definitions of constants.

Each field defined in the interface is automatically considered aspublic static final .

These fields can be accessed via the standard . notation.

Example:

SwingConstants .NORTH

Prof. Michele Loreti Interfaces and Lambda Expressions 126 / 143

Page 36: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Constants

An interface can contain definitions of constants.

Each field defined in the interface is automatically considered aspublic static final .

These fields can be accessed via the standard . notation.

Example:

SwingConstants .NORTH

Prof. Michele Loreti Interfaces and Lambda Expressions 126 / 143

Page 37: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Constants

An interface can contain definitions of constants.

Each field defined in the interface is automatically considered aspublic static final .

These fields can be accessed via the standard . notation.

Example:

SwingConstants .NORTH

Prof. Michele Loreti Interfaces and Lambda Expressions 126 / 143

Page 38: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Constants

An interface can contain definitions of constants.

Each field defined in the interface is automatically considered aspublic static final .

These fields can be accessed via the standard . notation.

Example:

SwingConstants .NORTH

Prof. Michele Loreti Interfaces and Lambda Expressions 126 / 143

Page 39: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Methods in the Interface

In the previous versions of Java all methods in an interface was abstract(that is without body).

In the latest version of Java an interface can contain three kinds ofmethods with a concrete implementation:

� static;

� default;

� private methods.

Prof. Michele Loreti Interfaces and Lambda Expressions 127 / 143

Page 40: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Methods in the Interface

In the previous versions of Java all methods in an interface was abstract(that is without body).

In the latest version of Java an interface can contain three kinds ofmethods with a concrete implementation:

� static;

� default;

� private methods.

Prof. Michele Loreti Interfaces and Lambda Expressions 127 / 143

Page 41: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Methods in the Interface

In the previous versions of Java all methods in an interface was abstract(that is without body).

In the latest version of Java an interface can contain three kinds ofmethods with a concrete implementation:

� static;

� default;

� private methods.

Prof. Michele Loreti Interfaces and Lambda Expressions 127 / 143

Page 42: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Methods in the Interface

In the previous versions of Java all methods in an interface was abstract(that is without body).

In the latest version of Java an interface can contain three kinds ofmethods with a concrete implementation:

� static;

� default;

� private methods.

Prof. Michele Loreti Interfaces and Lambda Expressions 127 / 143

Page 43: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Static Methods

It may be convenient to equip interfaces with static methods (like thefactory methods) that provide generic functionalities for a given type.

p u b l i c i n t e r f a c e I n t S e q u e n c e {

. . .

s t a t i c I n t S e q u e n c e d i g i t s O f ( i n t n ) {r e t u r n new D i g i t S e q u e n c e ( n ) ;

}

}

Prof. Michele Loreti Interfaces and Lambda Expressions 128 / 143

Page 44: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Default Methods

Starting from Java 1.9, we can provide a default implementation for anyinterface method:

p u b l i c i n t e r f a c e I n t S e q u e n c e {d e f a u l t b o o l e a n hasNext ( ) { r e t u r n t r u e ; }i n t n e x t ( ) ;. . .

}

A class implementing an interface can choose to override or not thedefault implementation.

The use of default methods is particularly useful for interface evolutions!

Prof. Michele Loreti Interfaces and Lambda Expressions 129 / 143

Page 45: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Default Methods

Starting from Java 1.9, we can provide a default implementation for anyinterface method:

p u b l i c i n t e r f a c e I n t S e q u e n c e {d e f a u l t b o o l e a n hasNext ( ) { r e t u r n t r u e ; }i n t n e x t ( ) ;. . .

}

A class implementing an interface can choose to override or not thedefault implementation.

The use of default methods is particularly useful for interface evolutions!

Prof. Michele Loreti Interfaces and Lambda Expressions 129 / 143

Page 46: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Default Methods

Starting from Java 1.9, we can provide a default implementation for anyinterface method:

p u b l i c i n t e r f a c e I n t S e q u e n c e {d e f a u l t b o o l e a n hasNext ( ) { r e t u r n t r u e ; }i n t n e x t ( ) ;. . .

}

A class implementing an interface can choose to override or not thedefault implementation.

The use of default methods is particularly useful for interface evolutions!

Prof. Michele Loreti Interfaces and Lambda Expressions 129 / 143

Page 47: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Default Methods

Starting from Java 1.9, we can provide a default implementation for anyinterface method:

p u b l i c i n t e r f a c e I n t S e q u e n c e {d e f a u l t b o o l e a n hasNext ( ) { r e t u r n t r u e ; }i n t n e x t ( ) ;. . .

}

A class implementing an interface can choose to override or not thedefault implementation.

The use of default methods is particularly useful for interface evolutions!

Prof. Michele Loreti Interfaces and Lambda Expressions 129 / 143

Page 48: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Resolving default methods conflict

Let us consider the following interfaces:

p u b l i c i n t e r f a c e Person {S t r i n g getName ( ) ;d e f a u l t i n t g e t I d ( ) { r e t u r n 0 ; }

}

p u b l i c i n t e r f a c e I d e n t i f i e d {d e f a u l t i n t g e t I d ( ) { r e t u r n Math . abs ( hashCode ( ) ) ; }

}

Consider now the class Employee defined as follows:

p u b l i c c l a s s Employee implements Person , I d e n t i f i e d {. . .

}

There is a conflict that we have to resolve by providing animplementation of getId.

Prof. Michele Loreti Interfaces and Lambda Expressions 130 / 143

Page 49: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Resolving default methods conflict

Let us consider the following interfaces:

p u b l i c i n t e r f a c e Person {S t r i n g getName ( ) ;d e f a u l t i n t g e t I d ( ) { r e t u r n 0 ; }

}

p u b l i c i n t e r f a c e I d e n t i f i e d {d e f a u l t i n t g e t I d ( ) { r e t u r n Math . abs ( hashCode ( ) ) ; }

}

Consider now the class Employee defined as follows:

p u b l i c c l a s s Employee implements Person , I d e n t i f i e d {. . .

}

There is a conflict that we have to resolve by providing animplementation of getId.

Prof. Michele Loreti Interfaces and Lambda Expressions 130 / 143

Page 50: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Resolving default methods conflict

Let us consider the following interfaces:

p u b l i c i n t e r f a c e Person {S t r i n g getName ( ) ;d e f a u l t i n t g e t I d ( ) { r e t u r n 0 ; }

}

p u b l i c i n t e r f a c e I d e n t i f i e d {d e f a u l t i n t g e t I d ( ) { r e t u r n Math . abs ( hashCode ( ) ) ; }

}

Consider now the class Employee defined as follows:

p u b l i c c l a s s Employee implements Person , I d e n t i f i e d {. . .

}

There is a conflict that we have to resolve by providing animplementation of getId.

Prof. Michele Loreti Interfaces and Lambda Expressions 130 / 143

Page 51: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Private methods

An interface can also contain private methods.

These can be static or not, and can be used only by other methods definedin the interface.

These private methods typically implement utility features and their useshould be limited.

Prof. Michele Loreti Interfaces and Lambda Expressions 131 / 143

Page 52: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Private methods

An interface can also contain private methods.

These can be static or not, and can be used only by other methods definedin the interface.

These private methods typically implement utility features and their useshould be limited.

Prof. Michele Loreti Interfaces and Lambda Expressions 131 / 143

Page 53: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Private methods

An interface can also contain private methods.

These can be static or not, and can be used only by other methods definedin the interface.

These private methods typically implement utility features and their useshould be limited.

Prof. Michele Loreti Interfaces and Lambda Expressions 131 / 143

Page 54: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Examples. . .

Many interfaces are provided within Java API:

� Comparable<T>;

� Comparator<T>;

� Runnable;

� EventHandler<T>.

Prof. Michele Loreti Interfaces and Lambda Expressions 132 / 143

Page 55: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Examples. . .

Many interfaces are provided within Java API:

� Comparable<T>;

� Comparator<T>;

� Runnable;

� EventHandler<T>.

Prof. Michele Loreti Interfaces and Lambda Expressions 132 / 143

Page 56: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Examples. . .

Many interfaces are provided within Java API:

� Comparable<T>;

� Comparator<T>;

� Runnable;

� EventHandler<T>.

Prof. Michele Loreti Interfaces and Lambda Expressions 132 / 143

Page 57: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Examples. . .

Many interfaces are provided within Java API:

� Comparable<T>;

� Comparator<T>;

� Runnable;

� EventHandler<T>.

Prof. Michele Loreti Interfaces and Lambda Expressions 132 / 143

Page 58: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Lambda Expressions

A lambda expression is a block of code that you can pass around so it canbe executed later, once or multiple time.

It can be defined as a sequenceof parameters followed by a an expression

( S t r i n g f i r s t , S t r i n g second )−> f i r s t . l e n g t h ( )−second . l e n g t h ( )

or a block:

( S t r i n g f i r s t , S t r i n g second ) −> {i n t d i f f e r e n c e = f i r s t . l e n g t h ( )−second . l e n g t h ( ) ;i f ( d i f f e r e n c e <0) r e t u r n −1;e l s e i f ( d i f f e r e n c e >0) r e t u r n 1 ;e l s e r e t u r n 0 ;

}

Prof. Michele Loreti Interfaces and Lambda Expressions 133 / 143

Page 59: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Lambda Expressions

A lambda expression is a block of code that you can pass around so it canbe executed later, once or multiple time. It can be defined as a sequenceof parameters followed by a an expression

( S t r i n g f i r s t , S t r i n g second )−> f i r s t . l e n g t h ( )−second . l e n g t h ( )

or a block:

( S t r i n g f i r s t , S t r i n g second ) −> {i n t d i f f e r e n c e = f i r s t . l e n g t h ( )−second . l e n g t h ( ) ;i f ( d i f f e r e n c e <0) r e t u r n −1;e l s e i f ( d i f f e r e n c e >0) r e t u r n 1 ;e l s e r e t u r n 0 ;

}

Prof. Michele Loreti Interfaces and Lambda Expressions 133 / 143

Page 60: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Lambda Expressions

A lambda expression is a block of code that you can pass around so it canbe executed later, once or multiple time. It can be defined as a sequenceof parameters followed by a an expression

( S t r i n g f i r s t , S t r i n g second )−> f i r s t . l e n g t h ( )−second . l e n g t h ( )

or a block:

( S t r i n g f i r s t , S t r i n g second ) −> {i n t d i f f e r e n c e = f i r s t . l e n g t h ( )−second . l e n g t h ( ) ;i f ( d i f f e r e n c e <0) r e t u r n −1;e l s e i f ( d i f f e r e n c e >0) r e t u r n 1 ;e l s e r e t u r n 0 ;

}

Prof. Michele Loreti Interfaces and Lambda Expressions 133 / 143

Page 61: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Functional Interfaces

Lambda expressions are compatible with Functional Interfaces.

These are interfaces that contains a single abstract method.

We can use a lambda expression (with the appropriate type) when afunctional interface is expected:

A r r a y s . s o r t ( anArray , ( x , y ) −> x . l e n g t h ( )−y . l e n g t h ( ) ) ;

The type of parameters can be inferred!

Prof. Michele Loreti Interfaces and Lambda Expressions 134 / 143

Page 62: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Functional Interfaces

Lambda expressions are compatible with Functional Interfaces.

These are interfaces that contains a single abstract method.

We can use a lambda expression (with the appropriate type) when afunctional interface is expected:

A r r a y s . s o r t ( anArray , ( x , y ) −> x . l e n g t h ( )−y . l e n g t h ( ) ) ;

The type of parameters can be inferred!

Prof. Michele Loreti Interfaces and Lambda Expressions 134 / 143

Page 63: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Functional Interfaces

Lambda expressions are compatible with Functional Interfaces.

These are interfaces that contains a single abstract method.

We can use a lambda expression (with the appropriate type) when afunctional interface is expected:

A r r a y s . s o r t ( anArray , ( x , y ) −> x . l e n g t h ( )−y . l e n g t h ( ) ) ;

The type of parameters can be inferred!

Prof. Michele Loreti Interfaces and Lambda Expressions 134 / 143

Page 64: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Functional Interfaces

Lambda expressions are compatible with Functional Interfaces.

These are interfaces that contains a single abstract method.

We can use a lambda expression (with the appropriate type) when afunctional interface is expected:

A r r a y s . s o r t ( anArray , ( x , y ) −> x . l e n g t h ( )−y . l e n g t h ( ) ) ;

The type of parameters can be inferred!

Prof. Michele Loreti Interfaces and Lambda Expressions 134 / 143

Page 65: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Method References

Suppose that we want to sort strings regardless of letter case. We couldcall:

A r r a y s . s o r t ( s t r i n g s , ( x , y ) −> x . compareToIgnoreCase ( y ) ) ;

Alternatively, we can pass directly the method reference:

A r r a y s . s o r t ( s t r i n g s , S t r i n g : : compareToIgnoreCase ) ;

There are many examples of use:

� list .remove(Objects:: isNull )

� list .forEach(System.out:: println )

Prof. Michele Loreti Interfaces and Lambda Expressions 135 / 143

Page 66: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Method References

Suppose that we want to sort strings regardless of letter case. We couldcall:

A r r a y s . s o r t ( s t r i n g s , ( x , y ) −> x . compareToIgnoreCase ( y ) ) ;

Alternatively, we can pass directly the method reference:

A r r a y s . s o r t ( s t r i n g s , S t r i n g : : compareToIgnoreCase ) ;

There are many examples of use:

� list .remove(Objects:: isNull )

� list .forEach(System.out:: println )

Prof. Michele Loreti Interfaces and Lambda Expressions 135 / 143

Page 67: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Method References

Suppose that we want to sort strings regardless of letter case. We couldcall:

A r r a y s . s o r t ( s t r i n g s , ( x , y ) −> x . compareToIgnoreCase ( y ) ) ;

Alternatively, we can pass directly the method reference:

A r r a y s . s o r t ( s t r i n g s , S t r i n g : : compareToIgnoreCase ) ;

There are many examples of use:

� list .remove(Objects:: isNull )

� list .forEach(System.out:: println )

Prof. Michele Loreti Interfaces and Lambda Expressions 135 / 143

Page 68: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Method References

Suppose that we want to sort strings regardless of letter case. We couldcall:

A r r a y s . s o r t ( s t r i n g s , ( x , y ) −> x . compareToIgnoreCase ( y ) ) ;

Alternatively, we can pass directly the method reference:

A r r a y s . s o r t ( s t r i n g s , S t r i n g : : compareToIgnoreCase ) ;

There are many examples of use:

� list .remove(Objects:: isNull )

� list .forEach(System.out:: println )

Prof. Michele Loreti Interfaces and Lambda Expressions 135 / 143

Page 69: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Method References

There are three variations for method references:

� Class :: instanceMethod

� Class :: staticMethod

� object :: instanceMethod

� Class :: new

Prof. Michele Loreti Interfaces and Lambda Expressions 136 / 143

Page 70: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Scope of a Lambda Expression

A lambda expression has the same scope as a nested block

This means that a lambda expression can access to all the names definedin the enclosing scope.

Example:

p u b l i c c l a s s AClass {p r i v a t e i n t v a l u e = 0 ;

p u b l i c v o i d s e t V a l u e ( i n t v a l u e ) {t h i s . v a l u e = v a l u e ;

}

p u b l i c Funct ion<I n t e g e r , I n t e g e r > getLambda ( ) {r e t u r n ( x ) −> t h i s . v a l u e+x ;

}}

Prof. Michele Loreti Interfaces and Lambda Expressions 137 / 143

Page 71: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Scope of a Lambda Expression

A lambda expression has the same scope as a nested block

This means that a lambda expression can access to all the names definedin the enclosing scope.

Example:

p u b l i c c l a s s AClass {p r i v a t e i n t v a l u e = 0 ;

p u b l i c v o i d s e t V a l u e ( i n t v a l u e ) {t h i s . v a l u e = v a l u e ;

}

p u b l i c Funct ion<I n t e g e r , I n t e g e r > getLambda ( ) {r e t u r n ( x ) −> t h i s . v a l u e+x ;

}}

Prof. Michele Loreti Interfaces and Lambda Expressions 137 / 143

Page 72: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

Scope of a Lambda Expression

A lambda expression has the same scope as a nested block

This means that a lambda expression can access to all the names definedin the enclosing scope.

Example:

p u b l i c c l a s s AClass {p r i v a t e i n t v a l u e = 0 ;

p u b l i c v o i d s e t V a l u e ( i n t v a l u e ) {t h i s . v a l u e = v a l u e ;

}

p u b l i c Funct ion<I n t e g e r , I n t e g e r > getLambda ( ) {r e t u r n ( x ) −> t h i s . v a l u e+x ;

}}

Prof. Michele Loreti Interfaces and Lambda Expressions 137 / 143

Page 73: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie

To be continued. . .

Prof. Michele Loreti Interfaces and Lambda Expressions 138 / 143