¡Suscríbete a mi canal de Youtube!

▷ ABSTRACCIÓN en JAVA

Abstracción en Java

Antes de iniciar este artículo te recomiendo tener claros los conceptos de Herencia, Polimorfismo e Interfaces en Java para lo cual te voy a pedir de favor que si no estas familiarizado con los temas, hagas clic en los enlaces para que puedas revisar los artículos y comprender mejor los conceptos que te daré a continuación.
 
Primero, debemos definir que algo "abstracto", en términos coloquiales, es un aquella característica o cualidad de un objeto de la vida real que resulte difícil o complicado de entender, es decir, que sea poco concreto o detallado de la información que queremos obtener de dicho objeto. En el caso de la programación en Java podemos decir que la descripción se ajusta perfectamente, en este caso al código de nuestro programa.

Para ampliar los términos, la abstracción en Java tiene las siguientes características:
  1. Debe ser utilizada junto con la herencia. 
  2. La clase base es la que tendrá dicha característica, para lo cual la definiremos como clase abstracta.
  3. Una clase abstracta no se puede instanciar, es decir, no se pueden crear objetos de ella, ya que solo servirá para definir algunos procesos de las clases derivadas.
  4. La abstracción también se puede dar en métodos llamados métodos abstractos, los cuales solo se toman como prototipos de funciones que se implementarán en las clases derivadas (Más o menos como la implementación de interfaces).
  5. La abstracción se puede usar a su vez con la implementación.
Puede haber confusión con el uso de la abstracción y la implementación, así que te enunciaré las principales diferencias en la siguiente tabla:
 
Abstracción
Interfaces
Debe utilizar forzosamente con herencia.No es necesario utilizarlas con herencia.
Se hace de forma directa desde la clase base a las clases derivadas
Sirven para simular la herencia múltiple.
Los métodos abstractos se implementan en clases hijosSe pueden aplicar en una o varias clases derivadas o no.
Una clase abstracta no se puede instanciar.
Una clase implementada si se puede instanciar.
 
A continuación veremos un ejemplo de codificación utilizando la abstracción en la clase base Animal e implementando sus métodos abstractos en sus clases derivadas Perro y Gato, también tendremos una implementación de interfaces para visualizar como trabaja todo en conjunto.

Clase Animal

package abstraccion;

public abstract class Animal implements Terrestre
{
protected String nombre, raza, color, tamano;
public Animal(String nombre, String raza, String color, String tamano)
{
this.nombre=nombre;
this.raza=raza;
this.color=color;
this.tamano=tamano;
}
public void imprimeDatos()
{
System.out.println("El nombre es: "+nombre);
System.out.println("La raza es: "+raza);
System.out.println("El color es: "+color);
System.out.println("El tamaño es: "+tamano);
}
public abstract void imprimeInformacion();

}
 

Clase Perro

package abstraccion;

public class Perro extends Animal
{
private final String marca_croquetas;
public Perro(String nombre, String raza, String color, String tamano, String marca_croquetas)
{
super(nombre, raza, color, tamano);
this.marca_croquetas=marca_croquetas;
}

@Override
public void imprimeInformacion()
{
System.out.println("Mi marca favorita de croquetas es: "+marca_croquetas);
}

@Override
public void imprimeTipo()
{
System.out.println("Soy un perro y soy de tipo: "+TIPO);
}
}

Clase Gato

package abstraccion;

public class Gato extends Animal
{
private final String marca_arena;
public Gato(String nombre, String raza, String color, String tamano, String marca_arena)
{
super(nombre, raza, color, tamano);
this.marca_arena=marca_arena;
}

@Override
public void imprimeInformacion()
{
System.out.println("Mi marca favorita de arena es: "+marca_arena);
}

@Override
public void imprimeTipo()
{
System.out.println("Soy un gato y soy de tipo: "+TIPO);
}
}

Interfaz Terrestre

package abstraccion;

public interface Terrestre
{
public String TIPO="Terrestre";
public void imprimeTipo();
}
También se debe de codificar la clase main llamada Abstraccion que permitirá la ejecución del programa.

Clase Abstraccion

package abstraccion;

public class Abstraccion
{
public static void main(String[] args)
{

//Declaramos un objeto de la clase Perro y usamos sus métodos (Heredado y Abstracto).
Perro p=new Perro("Firulais","Pastor Aleman","Cafe","Grande","El perro feliz");
p.imprimeDatos();
p.imprimeTipo();
p.imprimeInformacion();

//Declaramos un objeto de la clase Gato y usamos sus métodos (Heredado y Abstracto).
Gato g=new Gato("Bolita de Nieve","Persa","Blanco","Peque","Pulcrogato");
g.imprimeDatos();
g.imprimeTipo();
g.imprimeInformacion();
}

}
En resumen la actracción nos puede servir para aligerar la carga de código en la herencia y permitir la reutilización de código de forma fácil en las clases derivadas mediante la cláusula @Override como se ha visto en otros artículos de este blog.
 
En el siguiente video te explico un poco más a detalle el ejemplo anterior y su codificación paso a paso.
 

No te olvides darle LIKE y SUSCRIBIRTE al blog y a mi canal si te gustó el video. Si gustas realizar una DONACIÓN para ayudarme a mejorar el canal y mi contenido, puedes hacerlo mediante el botón ❤$GRACIAS ubicado en la parte posterior del video en YouTube o visitando el enlace https://linktr.ee/ezavalar y haciendo clic en el botón Donaciones.

Comentarios

Seguidores del blog

Suscríbete al blog

Recibe mis nuevas publicaciones por email: