miércoles, 3 de mayo de 2017

Que es una Interfaz en Java

¿Qué es Interfaz?
Como interfaz designamos, en informática, la conexión física y funcional que se establece entre dos aparatos, dispositivos o sistemas que funcionan independientemente uno del otro. En este sentido, la comunicación entre un ser humano y una computadora se realiza por medio de una interfaz.

La palabra interfaz, como tal, proviene del inglés interface, que significa ‘superficie de contacto’.

La interfaz es el mecanismo o herramienta que posibilita esta comunicación mediante la representación de un conjunto de objetos, iconos y elementos gráficos que vienen a funcionar como metáforas o símbolos de las acciones o tareas que el usuario puede realizar en la computadora. Por ejemplo, introducir datos en una hoja en blanco, enviar un documento a la papelera, modificar un archivo, cerrar un programa.

En computación, existen básicamente dos tipos de interfaces:
  • La interfaz física: constituida por objetos que nos permiten introducir datos y manipular la computadora, como el ratón o el teclado, que vendrían a funcionar como prótesis o extensiones de nuestro cuerpo.
  • La interfaz gráfica: también conocida como GUI (Graphic User Interface), que permite al ser humano interactuar con el computador mediante una serie de elementos gráficos (ventanas, iconos, entre otros).


Interfaz de usuario
Como interfaz de usuario se designa el medio del que se vale una persona para comunicarse con una máquina, dispositivo o computadora. Suelen ser amigables e intuitivos, por lo que son fáciles de entender y utilizar para un usuario. Comprende elementos como los menús, ventanas, teclado, ratón, sonidos de alerta, es decir, todos aquellos canales por medio de los cuales se establece una comunicación efectiva entre el ser humano y la máquina.

Interfaz gráfica de usuario
Como interfaz gráfica de usuario, también conocida como GUI (según las siglas en inglés de Graphic User Interface), se conoce el programa informático que emplea un conjunto de imágenes y objetos en un entorno gráfico de simulación para representar todas las acciones disponibles para el usuario en la interfaz. A este sistema se lo denomina WYSIWYG (What You See Is What You Get, es decir: “lo que ves es lo que obtienes”).
La finalidad de la interfaz gráfica de usuario es ofrecer a las personas un entorno visual amigable e intuitivo que les facilite la comunicación con el sistema operativo, la máquina o la computadora. Ejemplos de interfaces gráficas de usuario serían los entornos de escritorio de sistemas operativos como Windows, GNU/Linux o Mac OS.

Para explicar el concepto de interface nos valdremos de un ejemplo: 
Supongamos que al crear un programa creamos una ciudad. Para crear la ciudad no partimos de cero: disponemos de edificios prefabricados (las clases del API de Java). Pero también disponemos de algo más: de normas de urbanismo ya definidas (las interfaces del API de Java). Cada norma vamos a decir que es una interface: nos dice qué debemos cumplir para que al construir un edificio (clase) se pueda calificar con un nombre determinado. Supongamos una norma denominada “Edificio a dos aguas”, cuyo contenido incluye:
  • El edificio habrá de tener cuatro paredes.
  • El edificio habrá de tener un tejado formado por dos planos.
  • Otras especificaciones.


Si al construir un edificio se cumplen las condiciones de las normas de urbanismo, el ayuntamiento nos permite que en la publicidad y escrituras del edificio conste que se trata de un edificio a dos aguas. Si no cumplimos las especificaciones, no podemos usar esa denominación. Por ejemplo, estaría prohibido que un edificio con forma de pentágono y cinco paredes se denominara “Edificio a dos aguas”. Por el contrario, sería posible denominar edificio a dos aguas a una capilla que cumpla la norma, también a una vivienda unifamiliar que la cumpla, o a una biblioteca que la cumpla. 

Ahora bien lo trasladamos a Java. Consideremos la interface “List” que equivale a nuestra norma, cuyo contenido incluye:
  • La clase habrá de tener un método cuya signatura sea get(int index) que devuelva el objeto de la lista en la posición especificada por el entero index.
  • La clase habrá de tener un método cuya signatura sea isEmpty() que devuelva un valor booleano true si la lista no contiene objetos o false en caso contrario.
  • Otras especificaciones. 



Si una clase cumple y declara que cumple las especificaciones de la interfaz, decimos que esa clase implementa la interfaz. Si no cumple las especificaciones, no la implementa. Para implementar la interfaz la clase ha de incluir todos los métodos que defina la interfaz. Por ejemplo, una clase que no incluya el método get(int index) no cumplirá la especificación y por tanto no podrá decirse que implemente la interfaz List. 

Veamos ahora cómo empieza la documentación de esta interface del API de Java:

java.util
Interface List<E>

All Superinterfaces:

Collection<E>, Iterable<E>

All Known Implementing Classes:

AbstractList, AbstractSequentialList, ArrayList, AttributeList, LinkedList, RoleList, Stack, Vector

Una interface puede tener “normas” superiores, a las que denominamos “Superinterfaces”, y “normas” inferiores, a las que denominamos “Subinterfaces”, de acuerdo con una jerarquía. A su vez, una interface puede tener clases que la implementan. Por ejemplo en el caso de List, esta interface está implementada por las clases ArrayList, LinkedList, Stack y otras. Todas las clases que implementan una interface podemos decir que tienen algo en común. De esta manera, todas las clases del API de Java están organizadas.