jueves, 5 de junio de 2014

Tutorial Java en Linux Basico 9

Interfaces

Antes que comenzar con la entrada,quiero mencionar que ya no había hecho entradas desde hace mucho tiempo por distintas razones,espero que ya pueda volver a escribir entradas,tutoriales con la recurrencia de antes.

Bien en este caso veremos la interfaces de java,no son interfaces gráficas(GUI) si no una implementacion de un tipo del propio lenguaje,así que esta entrada no esta relacionada con las interfaces graficas como Gtk,AWT,etc.

Una interfaz es algo muy raro en Java,mas si tienen como base o vienen de lenguajes como Python,Ruby o Perl,si vienen de C o C++,podríamos decir que es como una cabecera de archivo,pero tampoco,así que olviden lo que saben de esos lenguajes y háganse una idea nueva de esta forma de programar.

Las interfaces en Java sirven para varias cosas,unas de ellas son:

Polimorfismo.

Programación en equipo : Uso de plantillas.

Abstracción.

Herencia: Mas o menos.

Primero que nada debe quedar claro que una interfaz es una clase que no hace nada,sabe que debe hacer pero no sabe como hacerlo,digamos que es un tipo de asesor de clases,los métodos o procedimientos incluidos en las interfaces son abstractos,lo que quiere decir que no hacen nada hasta que se implementen en la clase que los use,para definiros hay que recordar que se escriben así:

abstract void hola(int parametro);

En void es el tipo de función o si es un procedimiento es void.

En hola es el nombre de la función o procedimiento.

en (int parámetro) van los parámetros o los dejamos vació si es que no lleva alguno.

No lleva llaves,ni siquiera vacías.

Bien,una interfaz va en su propio archivo y igual que las clases se llama igual que dicho archivo,es .java:


Vamos usar el ejemplo mas usado(que es el mejor):

Creamos una interfaz Poligono,el cual representa figuras geométricas,la clase tendrá las funciones para sacar la Area y el Perimetro de una figura:


1
2
3
4
5
6
package figuras;

public interface Poligono {
 public abstract void Area();
 public abstract void Perimetro();
}

Vamos a crear tres clases mas,la primera es el main,Figuras.java:


1
2
3
4
5
6
7
package figuras;

public class Figuras {
 public static void main(String args[]) {
  // Codigo
 }
}

La segunda va a ser una abstracción de un cuadrado que implemente la interfaz Polígono y defina las funciones de Área y Perímetro:

Para implementar una interfaz se usa la palabra implements seguida del nombre de la clase o de la clase que herede la clase,si se implementan varias interfaces se usan comas:


1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
package figuras;

public class Cuadro implements Poligono{
 private int lado;
 Cuadro(int lado) {
  this.lado = lado;
 }
 
 public void Area() {
  int area = this.lado * this.lado;
  System.out.println("Area : "+area);
 }

 public void Perimetro() {
  int perimetro = this.lado+this.lado+this.lado+this.lado;
  System.out.println("Perimetro : "+perimetro);
 }

}

Bien como vemos los métodos abstractos ya los esta usando la clase Cuadro,algo muy importante es que los métodos se deben escribir si o si en la clase que los implemente o de lo contrario dará un error,si la clase no los usa pero si los define se puede usar esta sintaxis,por ejemplo :

public void Perimetro() { ; };
Aquí es donde comienza el upcasting,podemos definir un cuadro de la siguiente manera:

La manera normal seria:

Cuadro cuadro = new Cuadro(30);

Pero podemos hacerlo desde la clase heredada(que es una interfaz),subiendo un nivel en la cadena:

Poligono cuadro = new Cuadro(30);

Y no hay ningún problema.

El otro ejemplo que les mencionaba de el uso de interfaces como plantillas es que digamos que un programador encargado de pensar la idea de un programa crea una interfaz que tienen que definir los métodos otros programadores,pero  cada uno lo hará diferente,basado en la necesidad del objeto que debe crear,saben que deben hacer basados en la interfaz,pero les toca implementar el método.

A pequeña escala supongamos que el primer programador tenia que hacer un Cuadro,ya lo hizo y otro tiene que hacer un Rectangulo,lo cual se vería así:


1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
package figuras;

public class Rectangulo implements Poligono {
 int base;
 int altura;
 Rectangulo(int base,int altura) {
  this.base = base;
  this.altura = altura;
 }
 
 public void Area() {
  int area = this.base * this.altura;
  System.out.println("Area : "+area);
 }

 public void Perimetro() {
  int perimetro = (this.base+this.base)+(this.altura+this.altura);
  System.out.println("Perimetro : "+perimetro);

 }

}


Ahora si en la clase principal podemos usarlos:


1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
package figuras;

public class Figuras {
 public static void main(String args[]) {
  Poligono cuadro = new Cuadro(30);
  cuadro.Perimetro();
  cuadro.Area();
  Poligono rectangulo = new Rectangulo(20, 10);
  rectangulo.Area();
  rectangulo.Perimetro();
 }
}


Eso es todo :D.


No hay comentarios.:

Publicar un comentario

Los comentarios serán revisados antes de ser publicados.