Abstracción en Java

La abstracción de datos es la propiedad en virtud de la cual sólo se muestran al usuario los datos esenciales. Las unidades triviales o no esenciales no se muestran al usuario. Ej: Un automóvil se ve como un automóvil en lugar de sus componentes individuales.

La abstracción de datos también se puede definir como el proceso de identificar solo 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.

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

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

Clases abstractas y métodos abstractos:  

  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 o no tener 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 la anulación sea obligatoria o que la propia subclase 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 objeto de una clase abstracta. Es decir, una clase abstracta no se puede instanciar directamente con el operador new .
  7. Una clase abstracta puede tener constructores parametrizados y el constructor predeterminado siempre está presente en una clase abstracta.

Cuándo usar clases abstractas y métodos abstractos con un ejemplo

Hay situaciones en las que querremos definir una superclase que declare la estructura de una abstracción dada 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.

Considere un ejemplo clásico de «forma», quizás utilizado en un sistema de diseño asistido por computadora o simulación de juegos. El tipo base es «forma» y cada forma tiene un color, tamaño, etc. A partir de esto, se derivan (heredan) 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, ciertas formas se pueden voltear. Algunos comportamientos pueden ser diferentes, como cuando desea calcular el área de una forma. La jerarquía de tipos incorpora tanto las similitudes como las diferencias entre las formas.

 

Java

// 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());
    }
}
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

Encapsulación vs Abstracción de datos

  1. La encapsulación es la ocultación de datos (ocultación de información), mientras que la abstracción es la ocultación detallada (ocultación de la implementación).
  2. Mientras que la encapsulación agrupa datos y métodos que actúan sobre los datos, la abstracción de datos trata de exponer la interfaz al usuario y ocultar los detalles de la implementación.
  3. Las clases encapsuladas son clases de Java que siguen la ocultación y abstracción de datos, mientras que podemos implementar la abstracción mediante el uso de clases e interfaces abstractas. 
  4. La encapsulación es un procedimiento que tiene lugar a nivel de implementación, mientras que la abstracción es un proceso a nivel de diseño.

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. 

Artículos relacionados :  

Publicación traducida automáticamente

Artículo escrito por gaurav miglani y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *