logo

Abstracción en Java

Abstracción en Java es el proceso en el que solo mostramos detalles/funcionalidades esenciales al usuario. Los detalles de implementación no esenciales no se muestran al usuario.

En este artículo, aprenderemos sobre la abstracción y lo que significa abstracto.

Ejemplo sencillo para entender la abstracción:

Control remoto de televisión es un excelente ejemplo de abstraccion . Simplifica la interacción con un televisor al ocultar la complejidad detrás de botones y símbolos simples, haciéndola fácil sin necesidad de comprender los detalles técnicos de cómo funciona el televisor.



¿Qué es la abstracción en Java?

En Java, la abstracción se logra mediante interfaces y clases abstractas . Podemos lograr un 100% de abstracción utilizando interfaces.

La abstracción de datos también puede definirse como el proceso de identificar sólo las características requeridas de un objeto ignorando los detalles irrelevantes. Las propiedades y comportamientos de un objeto lo diferencian de otros objetos de tipo similar y también ayudan a clasificar/agrupar los objetos.

Ejemplo de abstracción de la vida real:

Considere un ejemplo de la vida real de un hombre conduciendo un automóvil. El hombre sólo sabe que al presionar el acelerador aumentará la velocidad de un automóvil o que al aplicar los frenos se detendrá el automóvil, pero no sabe cómo al presionar el acelerador la velocidad en realidad aumenta, no conoce el mecanismo interno del automóvil. o la implantación del acelerador, frenos, etc en el coche. Esto es lo que es la abstracción.

Clases abstractas de Java y métodos abstractos de Java

  1. Una clase abstracta es una clase que se declara con una palabra clave abstracta.
  2. Un método abstracto es un método que se declara sin implementación.
  3. Una clase abstracta puede tener o no todos los métodos abstractos. Algunos de ellos pueden ser métodos concretos.
  4. Un resumen definido por un método siempre debe redefinirse en la subclase, lo que hace que primordial obligatorio o hacer que la subclase en sí sea abstracta.
  5. Cualquier clase que contenga uno o más métodos abstractos también debe declararse con una palabra clave abstracta.
  6. No puede haber ningún objeto de una clase abstracta. Es decir, no se puede crear una instancia directa de una clase abstracta con el nuevo operador .
  7. Una clase abstracta puede tener constructores parametrizados y el constructor predeterminado siempre está presente en una clase abstracta.

Algoritmo para implementar la abstracción en Java

  1. Determinar las clases o interfaces que formarán parte de la abstracción.
  2. Cree una clase o interfaz abstracta que defina los comportamientos y propiedades comunes de estas clases.
  3. Defina métodos abstractos dentro de la clase o interfaz abstracta que no tengan ningún detalle de implementación.
  4. Implementar clases concretas que extiendan la clase abstracta o implementen la interfaz.
  5. Anule los métodos abstractos en las clases concretas para proporcionar sus implementaciones específicas.
  6. Utilice las clases concretas para implementar la lógica del programa.

¿Cuándo utilizar clases abstractas y métodos abstractos?

Hay situaciones en las que querremos definir una superclase que declare la estructura de una abstracción determinada sin proporcionar una implementación completa de cada método. A veces querremos crear una superclase que solo defina una forma de generalización que será compartida por todas sus subclases, dejando que cada subclase complete los detalles.

Consideremos un ejemplo de forma clásica, quizás utilizada en un sistema de diseño asistido por computadora o en una simulación de juego. El tipo base es la forma y cada forma tiene un color, tamaño, etc. A partir de esto, se derivan (heredados) tipos específicos de formas: círculo, cuadrado, triángulo, etc., cada una de las cuales puede tener características y comportamientos adicionales. Por ejemplo, se pueden voltear ciertas formas. Algunos comportamientos pueden ser diferentes, como cuando desea calcular el área de una forma. La jerarquía de tipos encarna tanto las similitudes como las diferencias entre las formas.

Clase abstracta en Java

Ejemplo de abstracción de Java

Ejemplo 1:

Java


personaje en cuerda



// Java program to illustrate the> // concept of Abstraction> abstract> class> Shape {> >String color;> > >// these are abstract methods> >abstract> double> area();> >public> abstract> String toString();> > >// abstract class can have the constructor> >public> Shape(String color)> >{> >System.out.println(>'Shape constructor called'>);> >this>.color = color;> >}> > >// this is a concrete method> >public> String getColor() {>return> color; }> }> class> Circle>extends> Shape {> >double> radius;> > >public> Circle(String color,>double> radius)> >{> > >// calling Shape constructor> >super>(color);> >System.out.println(>'Circle constructor called'>);> >this>.radius = radius;> >}> > >@Override> double> area()> >{> >return> Math.PI * Math.pow(radius,>2>);> >}> > >@Override> public> String toString()> >{> >return> 'Circle color is '> +>super>.getColor()> >+>'and area is : '> + area();> >}> }> class> Rectangle>extends> Shape {> > >double> length;> >double> width;> > >public> Rectangle(String color,>double> length,> >double> width)> >{> >// calling Shape constructor> >super>(color);> >System.out.println(>'Rectangle constructor called'>);> >this>.length = length;> >this>.width = width;> >}> > >@Override> double> area() {>return> length * width; }> > >@Override> public> String toString()> >{> >return> 'Rectangle color is '> +>super>.getColor()> >+>'and area is : '> + area();> >}> }> public> class> Test {> >public> static> void> main(String[] args)> >{> >Shape s1 =>new> Circle(>'Red'>,>2.2>);> >Shape s2 =>new> Rectangle(>'Yellow'>,>2>,>4>);> > >System.out.println(s1.toString());> >System.out.println(s2.toString());> >}> }>

>

escaneo java.siguientecadena
>

Producción

Shape constructor called Circle constructor called Shape constructor called Rectangle constructor called Circle color is Redand area is : 15.205308443374602 Rectangle color is Yellowand area is : 8.0>

Ejemplo 2:

Java




// Java Program to implement> // Java Abstraction> > // Abstract Class declared> abstract> class> Animal {> >private> String name;> > >public> Animal(String name) {>this>.name = name; }> > >public> abstract> void> makeSound();> > >public> String getName() {>return> name; }> }> > // Abstracted class> class> Dog>extends> Animal {> >public> Dog(String name) {>super>(name); }> > >public> void> makeSound()> >{> >System.out.println(getName() +>' barks'>);> >}> }> > // Abstracted class> class> Cat>extends> Animal {> >public> Cat(String name) {>super>(name); }> > >public> void> makeSound()> >{> >System.out.println(getName() +>' meows'>);> >}> }> > // Driver Class> public> class> AbstractionExample {> >// Main Function> >public> static> void> main(String[] args)> >{> >Animal myDog =>new> Dog(>'Buddy'>);> >Animal myCat =>new> Cat(>'Fluffy'>);> > >myDog.makeSound();> >myCat.makeSound();> >}> }>

>

pd.merge
>

Producción

Buddy barks Fluffy meows>

Explicación del programa Java anterior:

Este código define una clase abstracta Animal con un método abstracto makeSound(). Las clases Dog y Cat amplían Animal e implementan el método makeSound(). El método main() crea instancias de Dog y Cat y llama al método makeSound() en ellas.

Esto demuestra el concepto de abstracción en Java, donde definimos una plantilla para una clase (en este caso Animal), pero dejamos que la implementación de ciertos métodos sea definida por subclases (en este caso makeSound()).

Interfaz

Las interfaces son otro método para implementar la abstracción en Java. La diferencia clave es que, al usar interfaces, podemos lograr un 100% de abstracción en las clases de Java. En Java o cualquier otro lenguaje, las interfaces incluyen métodos y variables pero carecen de un cuerpo de método. Además de la abstracción, las interfaces también se pueden utilizar para implementar interfaces en Java.

Implementación: Para implementar un interfaz usamos la palabra clave implementa con clase.

Java




// Define an interface named Shape> interface> Shape {> >double> calculateArea();>// Abstract method for> >// calculating the area> }> > // Implement the interface in a class named Circle> class> Circle>implements> Shape {> >private> double> radius;> > >// Constructor for Circle> >public> Circle(>double> radius) {>this>.radius = radius; }> > >// Implementing the abstract method from the Shape> >// interface> >public> double> calculateArea()> >{> >return> Math.PI * radius * radius;> >}> }> > // Implement the interface in a class named Rectangle> class> Rectangle>implements> Shape {> >private> double> length;> >private> double> width;> > >// Constructor for Rectangle> >public> Rectangle(>double> length,>double> width)> >{> >this>.length = length;> >this>.width = width;> >}> > >// Implementing the abstract method from the Shape> >// interface> >public> double> calculateArea() {>return> length * width; }> }> > // Main class to test the program> public> class> Main {> >public> static> void> main(String[] args)> >{> >// Creating instances of Circle and Rectangle> >Circle myCircle =>new> Circle(>5.0>);> >Rectangle myRectangle =>new> Rectangle(>4.0>,>6.0>);> > >// Calculating and printing the areas> >System.out.println(>'Area of Circle: '> >+ myCircle.calculateArea());> >System.out.println(>'Area of Rectangle: '> >+ myRectangle.calculateArea());> >}> }>

>

>

Producción

Area of Circle: 78.53981633974483 Area of Rectangle: 24.0>

Ventajas de la abstracción

Estas son algunas de las ventajas de la abstracción:

  1. Reduce la complejidad de ver las cosas.
  2. Evita la duplicación de código y aumenta la reutilización.
  3. Ayuda a aumentar la seguridad de una aplicación o programa, ya que solo se proporcionan al usuario los detalles esenciales.
  4. Mejora la mantenibilidad de la aplicación.
  5. Mejora la modularidad de la aplicación.
  6. La mejora será muy fácil porque sin afectar a los usuarios finales podemos realizar cualquier tipo de cambios en nuestro sistema interno.
  7. Mejora la reutilización y mantenibilidad del código.
  8. Oculta los detalles de implementación y expone solo información relevante.
  9. Proporciona una interfaz clara y sencilla al usuario.
  10. Aumenta la seguridad al impedir el acceso a los detalles internos de la clase.
  11. Apoya la modularidad, ya que los sistemas complejos se pueden dividir en partes más pequeñas y manejables.
  12. La abstracción proporciona una forma de ocultar al usuario la complejidad de los detalles de implementación, lo que facilita su comprensión y uso.
  13. La abstracción permite flexibilidad en la implementación de un programa, ya que se pueden realizar cambios en los detalles de implementación subyacentes sin afectar la interfaz de usuario.
  14. La abstracción permite la modularidad y la separación de preocupaciones, lo que hace que el código sea más fácil de mantener y de depurar.

Desventajas de la abstracción en Java

Estas son las principales desventajas de la abstracción en Java:

comentario multilínea de powershell
  1. La abstracción puede hacer que sea más difícil comprender cómo funciona el sistema.
  2. Puede generar una mayor complejidad, especialmente si no se usa correctamente.
  3. Esto puede limitar la flexibilidad de la implementación.
  4. La abstracción puede agregar complejidad innecesaria al código si no se usa adecuadamente, lo que lleva a un mayor tiempo y esfuerzo de desarrollo.
  5. La abstracción puede dificultar la depuración y la comprensión del código, especialmente para aquellos que no están familiarizados con las capas de abstracción y los detalles de implementación.
  6. El uso excesivo de la abstracción puede resultar en una disminución del rendimiento debido a las capas adicionales de código y la dirección indirecta.

Lea también:

Abstracción en Java – Preguntas frecuentes

P1. ¿Por qué usamos abstracto?

Una razón clave por la que utilizamos conceptos abstractos es para simplificar la complejidad. ¡Imagínese intentar explicar el universo entero con cada átomo y estrella! Los resúmenes nos permiten alejarnos, captar las ideas principales como la gravedad y la energía, y darle sentido a todo sin perdernos en los detalles.

Aquí hay algunas otras razones por las que usamos resumen en Java:

1. Abstracción : Las clases abstractas se utilizan para definir una plantilla genérica para que la sigan otras clases. Definen un conjunto de reglas y pautas que sus subclases deben seguir. Al proporcionar una clase abstracta, podemos asegurarnos de que las clases que la amplían tengan una estructura y un comportamiento consistentes. Esto hace que el código esté más organizado y sea más fácil de mantener.

2. Polimorfismo : Las clases y métodos abstractos permiten el polimorfismo en Java. El polimorfismo es la capacidad de un objeto de adoptar muchas formas. Esto significa que una variable de tipo abstracto puede contener objetos de cualquier subclase concreta de esa clase abstracta. Esto hace que el código sea más flexible y adaptable a diferentes situaciones.

3. Marcos y API: Java tiene numerosos marcos y API que utilizan clases abstractas. Al utilizar clases abstractas, los desarrolladores pueden ahorrar tiempo y esfuerzo basándose en el código existente y centrándose en los aspectos específicos de sus aplicaciones.

P2. Cuál es la diferencia entre ¿Encapsulación y abstracción de datos?

Aquí hay algunas diferencias clave entre encapsulación y abstracción en blanco y negro:

Encapsulación

Abstracción

La encapsulación es ocultar datos (ocultar información) La abstracción es ocultación detallada(ocultación de implementación).
La encapsulación agrupa datos y métodos que actúan sobre los datos. La abstracción de datos se ocupa de exponer la interfaz al usuario y ocultar los detalles de implementación.
Las clases encapsuladas son clases de Java que siguen la abstracción y la ocultación de datos. La implementación de la abstracción se realiza utilizando clases e interfaces abstractas.
La encapsulación es un procedimiento que tiene lugar en el nivel de implementación. la abstracción es un proceso a nivel de diseño

P3. ¿Cuál es un ejemplo de la vida real de abstracción de datos?

Control remoto de televisión es un excelente ejemplo de abstracción de la vida real. Simplifica la interacción con un televisor al ocultar la complejidad detrás de botones y símbolos simples, haciéndola fácil sin necesidad de comprender los detalles técnicos de cómo funciona el televisor.

P4. ¿Cuál es la diferencia entre clases abstractas e interfaces en Java?

Aquí hay algunas diferencias clave entre clases e interfaces abstractas en Java:

Clase abstracta

'fórmula de albañil'

Interfaces

Las clases abstractas admiten métodos abstractos y no abstractos. Los soportes de interfaz solo tienen métodos abstractos.
No admite herencia múltiple Admite herencia múltiple
Las clases abstractas se pueden ampliar mediante clases Java y múltiples interfaces. La interfaz se puede ampliar únicamente mediante la interfaz Java.
Los miembros de una clase abstracta en Java pueden ser privados, protegidos, etc. Las interfaces son públicas por defecto.

Ejemplo:

clase abstracta pública Vechicle{
unidad vacía abstracta pública ()
}

Ejemplo:

interfaz pública Animal{
hablar vacío();
}