Interfície (Java)

Una interfície (interface en anglès) en programació orientada a objectes, i més concretament, en llenguatge Java, és un tipus abstracte útil per definir el conjunt d'operacions i dades realitzable i accessibles sobre un objecte.

Descripció

[modifica]

Quan es defineix una interfície se solen especificar només les funcions sobre l'objecte, sense implementar-ne la lògica. És quan es creen classes que es poden implementar les operacions definides en interfícies. Aquesta pràctica és útil quan es vol focalitzar unes funcionalitats/característiques que són comunes entre diferents classes però que, en canvi, no estan relacionades jeràrquicament.

Exemples

[modifica]

L'objecte de classe "Ocell" i el de classe "Avió" no tenen de cap manera cap relació jeràrquica. El primer pertany al regne animal i el segon és una màquina artificial. Però els dos tenen la capacitat de volar. En java, aquesta realitat es definiria de la següent manera:

 public interface Volar { 
 	public enlairarse(); 
 	public aterrar();
 }


 public class Ocell extends Animal implements Volar {

 	public enlairarse() {
 		/* Programar aquí l'enlairament d'un ocell */
 	}
 	
 	public aterrar() {
 		/* Programar aquí l'aterratge d'un ocell */
 	}

	/* Altres funcionalitats pròpies d'un ocell */
 	public menjar() { };
 	public dormir() { }; 

 }


 public class Avio extends Maquina implements Volar {

 	public enlairarse() {
 		/* Programar aquí l'enlairament d'un avió */
 	}

 	public aterrar() {
 		/* Programar aquí l'aterratge d'un avió */
 	} 

 	/* Altres funcionalitats pròpies d'un avió*/
 	public engegar() { };
 	public aturar() { };

 }


Suposem ara que necessitem utilitzar una classe que tingui la capacitat de volar, independentment de si es tracta d'un avió o d'un ocell. Amb les interfícies java és possible:

 Volar objecteVolador1 = new Avio();
 Volar objecteVolador2 = new Ocell();

 objecteVolador1.enlairarse();
 objecteVolador2.enlairarse();


Els dos objectes, tot i ser de diferent tipus, s'utilitzen de la mateixa manera perquè han estat instanciats sobre la mateixa interfície. La resta de les seves funcionalitats pròpies de la classe no són accessibles.

Ja que cada classe pot tenir múltiples característiques, les classes poden implementar tantes interfícies com es necessiti:

 public class Persona extends Animal implements Enraonar, Caminar, Escriure { /*...*/ };


Vegeu també

[modifica]