Anuncios Google

Abstracción, interfaces y paquetes

Tutoriales Avanzados Homebrew

Para acabar con el tema de la programación orientada a objetos, explicaré los conceptos más avanzados de Java, los cuales nos permiten mejorar aún más nuestra organización, además de utilizar recursos externos a nuestro proyecto e incluso construir piezas de software reutilizables, tanto por nosotros mismos en un futuro como por terceros.

Abstracción:

Los métodos abstractos no son más que métodos no implementados. Es decir, el método mover de la clase Fantasma del tutorial anterior, sería un método abstracto ya que no está implementado en la clase padre. Las clases abstractas no pueden ser instanciadas (es decir, que no se pueden crear objetos de clases abstractas), por lo que obligamos a que los métodos deban ser implementados en las subclases. Toda clase que contenga un método abstracto, es una clase abstracta. Una clase/método abstracto se declara con la palabra reservada abstract:

abstract class Fantasma{
  abstract void mover ();
} 

Si la clase no tubiese el modificador abstract, daría un error de compilación. Como ya hemos dicho, no se pueden crear objetos de una clase abstracta, aunque se pueden crear clases heredadas de una clase abstracta, que a su vez pueden ser abstractas, o implementar los métodos de la clase padre.

 

Interfaces:

Las interfaces son algo muy similar a las clases abstractas. Una interfaz indica un conjunto de funciones que deben ser implementadas por la clase. Un ejemplo de interfaz es:

public interface Dibujable{
  public abstract void draw ();
}

Para indicar que una clase implementa una interfaz se usa la palabra reservada implements:

public class Rectángulo implements Dibujable{
  public void draw (){
    /*dibujar*/
  }
}

La diferencia esencial entre una interfaz y una clase abstracta es que la primera solo incluye métodos sin implementar (y opcionalmente constantes) mientras que la segunda puede incluir variables, métodos implementados, etc.

Las interfaces son útiles cuando queremos indicar los métodos que tienen que implementar una serie de clases, pero no como se implementan. En el ejemplo anterior, indicamos que todo objeto que se quiera dibujar, debe implementar el método draw. Así, si tubiésemos una clase ventana, en lugar de contener una serie de objetos de una clase determinada, por ejemplo

Rectangulo objetos [];

podría contener una serie de objetos que implementen una interfaz:

Dibujable objetos [];

Donde el tipo real de "Objetos" será Rectangulo o cualquier otra clase que implemente la interfaz. A la hora de dibujar los elementos en pantalla, la clase ventana llamaría al método draw de los objetos sin importar de qué clase sean.

Un ejemplo real donde se usan las interfaces es en la creación de hebras. Si queremos que un objeto se ejecute en una hebra separada, la clase debe implementar la interfaz Runnable, en concreto el método run ();. Además, Java nos da la posibilidad de heredar de la clase Thread en lugar de implementar esta interfaz. Como el objetivo de este tutorial no es la creación de hebras, no explicaré los entresijos de la programación paralela. Simplemente diré que tanto la herencia como las interfaces son algo muy usado en Java y a veces imprescindible, como en la construcción de interfaces de usuario.

Paquetes:

Como ya habíamos adelantado, los paquetes no son más que conjuntos de clases que están relacionadas, bien porque forman parte de un mismo proyecto, o bien porque dicho paquete es una biblioteca.

Toda clase debería estar contenida en un paquete. Si una clase pertenece a un paquete P lo indicaremos con package P; que generalmente se coloca en la primera linea del archivo donde está definida la clase. Con esto, todas las clases que indiquen package P conformarán un paquete. Los paquetes pueden contener clases, interfaces, tipos enumerados e incluso otros paquetes. Si un paquete está dentro de otro lo denotaremos con el '.'. Así, por ejemplo, tenemos el paquete "java", el paquete "util" que está dentro de "java" (java.util) y la clase ArrayList que está dentro de "util" (java.util.ArrayList).

Si queremos utilizar las clases de un paquete, podemos escribir el nombre completo del paquete + . + nombre de la clase (como java.util.ArrayList) o importar un paquete al comienzo del archivo con import nombreDelPaquete; y luego utilizar la clase como si perteneciese a nuestro paquete. Notar que, como digimos en anteriores entregas, para poder acceder a las clases de otros paquetes externos, éstas deben ser públicas (si tubiesen el modificador package, por ejemplo, no podríamos acceder a ella).

4.923075
Tu voto: Ninguno Votos totales: 4.9 (13 votos)

Anuncios Google

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de User170294

Gracias, está todo muy bien

Gracias, está todo muy bien explicado.

De todos modos va a tocar releer los tres últimos capítulos de POO para acabar de comprenderlo todo perfecto ;)

Anda que no hay ganas de cogerle el truco al Android como se lo tenía cogido a la PSP.


Imagen de moikop

Excelente

Simplemene excelente. Me han encantado toda la serie de tutoriales que has hecho sobre POO. Un trabajo impecable...

Un saludo crack!!


Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderas trucos para resolver tus dudas antes.

No preguntes por MP, mejor pregunta aquí.

Imagen de joserc87

Gracias.

Muchas gracias Moikop :)

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.