Notation

Interface fonctionnelles : IF

Expression Lambda : EL

I. Les interfaces

Une interface est une classe qui permet de représenter des fonctionnalités mais sans les définir. C’est une sorte de class 100% abstraite MAIS une interface ne contient pas d’attributs.

Une interface est donc une coquille vide dont on peut se demander quelle est son utilité.

Les interfaces sont généralement utilisées pour représenter un traitement générique, donc indépendant du type d’instance manipulée. Par exemple le tri, on peut trier n’importe quel ensemble d’objets à partir du moment que l’on a une relation d’ordre entre ces objets. C’est à dire qu’on sait si un objet est “avant/après” une autre.

Pour représenter le caractère d’un objet triable et la possibilité de trier, on crée une interface.

Son nom représente le caractère que l’on veut exploiter et le méthodes sont les traitement possibles permettant d’implementer la fonctionnalité voulue de façon générique.

interface Triable {
	/* renvoie : < 0 si this est avant t
	 *         : = 0 si ils sont égaux
	 *         : > 0 si this est après t
	 */
	public int comparer(Triable t); 
}

On peut donc écrire un algo de trie qui se base sur un ensemble d’objet triables

class Tri {
	public static void bubbleSort(List<Triable> lst) {
		boolean swap = true; int lim = lst.size(); Triable t1, t2;
		while(swap == true) {
			swap = false;
			for(int i = 0; i < lim-1; i++) {
				t1 = list.get(i); t2 = list.get(i+1);
				if(t1.comaprer(t2) > 0) {
					lst.set(i, t2); lst.set(i+1, t1);
					swap = true;
				}
				lim-=1;
			}
		}
	}
}

En supposant que l’on veuille trier des Bananes par taille

class Banane implements Triable {
	double longueur;
	...
	
	int comparer(Triable t) {
		if(t instanceof Banane) {
			Banane b = (Banane)t;
			return longueur - b.longueur;
		}
		return 0;
	}
}

II. Interfaces fonctionnelles

1. Définition

Une IF est une interface avec une seule méthode à définir. Cependant elle peut également contenir des méthodes par défaut, qui ont un code.