¿Cómo implementar la abstracción de datos en Java?

Publicado: 2022-05-17

Abstracción, polimorfismo, encapsulación y herencia son los cuatro elementos básicos de la programación orientada a objetos. Uno de ellos, la Abstracción de Datos, será discutido en detalle en el siguiente artículo. También aprenderemos cómo realizar la abstracción de datos en Java.

Tabla de contenido

¿Qué es la abstracción de datos?

La abstracción de datos es el rasgo característico en el que solo se muestran al usuario los detalles más importantes. El usuario se mantiene inconsciente de los detalles triviales o no esenciales. Por ejemplo, un automóvil se considera como un todo en lugar de sus distintas partes. La práctica de identificar solo los atributos necesarios de un elemento y descartar la información superflua se conoce como abstracción de datos.

En términos simples, la abstracción de datos muestra elementos importantes para el usuario mientras mantiene ocultos los elementos insignificantes.

Usamos la palabra clave "abstract" para implementar la abstracción con la ayuda de clases e interfaces. Podemos tener métodos abstractos y concretos en clases abstractas.

¿Qué son las clases abstractas?

En la programación orientada a objetos, una clase abstracta es una clase que declara uno o más métodos abstractos. La única distinción entre las clases de Java abstractas y regulares es que las clases abstractas contienen la palabra clave abstracta, mientras que las clases de Java regulares no la contienen. Para la declaración de una clase abstracta, usamos la palabra clave abstract antes de su nombre de clase. Puede haber métodos tanto abstractos como concretos en las clases. Sin embargo, los métodos abstractos no pueden estar presentes en clases regulares. Una clase con al menos un método abstracto se denomina clase abstracta.

Su sintaxis es:

clase pública abstracta Name_of_Class

{

public abstract Name_of_Method();

}

Un ejemplo de implementación de una clase abstracta es:

//nombramiento de clase abstracto

clase abstracta DemoClass

{

//nombramiento de método abstracto

disp vacío abstracto ();

}

//procediendo con la clase abstracta

clase pública MainClass extiende DemoClass

{

//definiendo el cuerpo del método de la clase abstracta

visualización vacía ()

{

System.out.println(“Método abstracto llamado”);

}

public static void main(String[] args)

{

MainClass obj = new MainClass ();

// invocando el método abstracto

obj.display();

}

}

Para enumerar puntualmente:

  • Una clase debe definirse como abstracta si tiene al menos un método abstracto.
  • Una clase que ha sido declarada abstracta no puede ser instanciada.
  • Debe heredar una clase abstracta de otra clase y proporcionar implementaciones para que sus métodos abstractos la utilicen.
  • Debe proporcionar implementaciones para todos los métodos abstractos en una clase abstracta si la hereda.

¿Qué son los métodos abstractos?

Un método abstracto solo tiene la declaración del método y no tiene implementación. Un método abstracto puede ser representado por un método sin un cuerpo propio. Los métodos abstractos deben declararse exclusivamente dentro de clases abstractas.

Si desea que una clase tenga un método pero que la implementación real de ese método esté determinada por las clases secundarias, designe el método como un resumen en la clase principal.

Ventajas de la abstracción de datos en la programación orientada a objetos

  • En la Programación Orientada a Objetos, la abstracción reduce la complejidad del diseño del programa y el proceso de su implementación en el software.
  • La principal ventaja de implementar la abstracción en la programación de Java es que los usuarios pueden organizar fácilmente las clases en función de las similitudes, como los hermanos, y por lo tanto, la herencia de datos y la migración de datos se vuelven fáciles y factibles.
  • La herencia es posible. Por ejemplo:

/* Nombre del archivo: DemoAbstract.java */

Resumen de demostración de clase pública {

public static void main(String [] args) {

/* lo siguiente no se puede escribir e iniciar errores */

empleado e = nuevo empleado ("Peter D.", "Hartford, CT", 35);

System.out.println(“\n Use la referencia del empleado y llame a MailCheck–“);

e.mailCheck();

}

}

Esto muestra el siguiente error:

Employee.java:46: Employee es abstracto; no se puede instanciar

empleado e = nuevo empleado ("Peter D.", "Hartford, CT", 35);

^

1 error

Entonces usamos el uso de la clase abstracta como:

/* Nombre del archivo: empleado.java */

empleado público de clase abstracta {

cadena privada N;

Agregar cadena privada;

numero int privado;

empleado publico(String N, String Add, int Num) {

System.out.println(“Construyendo un empleado”);

este.nombre = N;

esta dirección = Agregar;

este.numero = Num;

}

público doble cálculo_pago() {

System.out.println(“Dentro del empleado compute_pay”);

devolver 0.0;

}

correo vacío público () {

System.out.println(“Enviar un cheque por correo a ” + este.nombre + ” ” + esta.dirección);

}

Cadena pública a Cadena () {

return N + ” ” + Sumar + ” ” + N;

}

Cadena pública getNombre() {

devolver N;

}

public String getAddress() {

volver Agregar;

}

public void setAddress(String nuevaDirección) {

Añadir = nueva dirección;

}

public int obtenerNumero() {

número de retorno;

}

}

¿Cuándo usamos clases abstractas o métodos abstractos?

Cuando consideramos el ejemplo general de "formas", podemos imaginar que se usa en referencia a un sistema de diseño asistido por computadora o para una simulación de un videojuego. El tipo fundamental al que se hace referencia aquí es una "forma", y cada forma tiene sus propios atributos de color, tamaño, etc. Clases específicas de formas: círculo, cuadrado, triángulo, etc., se derivan (heredan) de esto, cada una de las cuales pueden tener propiedades y comportamientos extra únicos. Ciertas formas, por ejemplo, pueden ser simétricas, mientras que otras no lo son. Tanto las similitudes como las claras diferencias entre las formas están incorporadas en la jerarquía de tipos.

Por lo tanto, la forma puede ser análoga a una clase abstracta, mientras que los diferentes tipos de formas se pueden denotar como clases concretas.

Aquí hay un escenario de la vida real para explicar las clases abstractas:

// Programa Java para demostrar Abstracción

forma de clase abstracta {

Color de la cuerda;

área doble abstracta ();

Cadena abstracta pública toString();

// la clase abstracta puede tener el constructor

forma pública (color de la cadena)

{

System.out.println(“Constructor de forma llamado”);

este.color = color;

}

// este es un método concreto

public String getColor() { devolver color; }

}

clase Círculo extiende forma {

doble r;

círculo público (color de la cadena, doble (r)

{

// llamando al constructor de formas

súper (color);

System.out.println(“Constructor de círculo llamado”);

esto.r = r;

}

@Anular área doble()

{

devuelve Math.PI * Math.pow(r, 2);

}

@Anular la cadena pública a la cadena ()

{

devuelve "El color del círculo es" + super.getColor()

+ “y el área es: ” + área();

}

}

clase Rectángulo extiende forma {

longitud doble;

doble ancho;

Rectángulo público (color de la cadena, longitud doble,

doble ancho)

{

// llamando al constructor de formas

súper (color);

System.out.println(“Constructor de rectángulo llamado”);

this.longitud = longitud;

este.ancho = ancho;

}

@Override double area() { longitud de retorno * ancho; }

@Anular la cadena pública a la cadena ()

{

devuelve "El color del rectángulo es" + super.getcolor()

+ “y el área es: ” + área();

}

}

Prueba de clase pública {

public static void main(String[] args)

{

Forma s1 = nuevo Círculo ("Rojo", 2.2);

Forma s2 = nuevo Rectángulo ("Amarillo", 2, 4);

System.out.println(s1.toString());

Sistema.salida.println(s2.toString());

}

}

Este segmento de código es una versión modificada del que se muestra aquí .

Un fragmento de código de un programa donde se utiliza la abstracción de datos en Java:

// Abstracción en Java

clase abstracta ElecBill

{

//método abstracto

compBill de flotación abstracta ();

}

class Comm extiende ElecBill

{

flotar compBill() {

volver 1,00*100;

}

}

clase Doméstica extiende ElecBill

{

flotar compBill() {

devolver 0,50*75;

}

}

Conclusión

La abstracción de datos es un aspecto importante de la programación orientada a objetos. Para lenguajes como Java, la abstracción y otros conceptos de OOP como herencia, encapsulación y polimorfismo juegan un papel crucial en la escritura de programas eficientes.

Si desea aprender los OOP en profundidad y adquirir habilidades de programación de primera clase, le recomendamos unirse a la Certificación PG vinculada al trabajo de upGrad en ingeniería de software, que está diseñada para ayudar a los estudiantes a adquirir habilidades en Java, OODAP, DSA, HTML5, CSS3. , JavaScript, MERN, AWS, bases de datos SQL y NoSQL, Spring Boot, etc. El curso de 5 meses cubre dos especializaciones: MERN Stack Specialization y Cloud-Native Specialization y brinda acceso a sesiones de asesoramiento profesional de upGrad 360°.

Aprenda cursos de desarrollo de software en línea de las mejores universidades del mundo. Obtenga Programas PG Ejecutivos, Programas de Certificado Avanzado o Programas de Maestría para acelerar su carrera.

¿Qué es el polimorfismo? ¿En qué se diferencia de la abstracción de datos?

El polimorfismo es una generalización, similar a la abstracción de datos, pero ocurre en tiempo de ejecución. Si existe un mecanismo para acceder a una colección de tipos de objetos distintos en los que no se pueden distinguir unos de otros, son polimórficos. Entonces, incluso si no son idénticos, todos los objetos dentro tienen la misma apariencia y sensación. El objetivo es reducir drásticamente la codificación. En lugar de escribir todas las numerosas permutaciones para cada tipo individual, puedes escribir una solución universal.

¿Cuáles son las diferencias entre la encapsulación y la abstracción de datos?

ENCAPSULACIÓN - 1. La encapsulación oculta datos (información), mientras que la abstracción oculta detalles (ocultación de implementación). 2. La abstracción de la Programación Orientada a Objetos resuelve problemas a nivel de diseño. 3. Por motivos de seguridad, el encapsulamiento implica ocultar la información interna o la mecánica de cómo un objeto realiza algo. ABSTRACCIÓN: 1. Mientras que la encapsulación une los datos y los métodos que operan en ellos, la abstracción de datos se ocupa de exponer la interfaz de usuario y oscurecer los detalles de implementación. 2. Se resuelve a nivel de implementación mediante encapsulación. 3. En Java, la abstracción de datos le permite concentrarse en lo que debe incluir el objeto de información.

¿Cuáles son las características distintivas entre la interfaz y la clase abstracta?

Interfaz - 1. Solo los métodos abstractos se encuentran a sí mismos como parte de la interfaz. 2. Se admiten herencias múltiples. 3. No puede ofrecer la implementación de la clase abstracta. 4. Solo se permiten métodos abstractos públicos en una interfaz. 5. Solo se puede usar una variable final estática pública en la interfaz. Clase abstracta - 1. Los métodos abstractos y no abstractos se pueden encontrar en una clase abstracta. 2. No se admiten herencias múltiples. 3. Es capaz de implementar la interfaz. 4. Los métodos públicos abstractos y protegidos son posibles en una clase abstracta. 5. Con cualquier especificador de acceso, una clase abstracta puede tener variables finales, estáticas o finales estáticas.