what is abstraction java learn with examples
Este tutorial explica qué es la abstracción en Java junto con ejemplos de programación. También aprenderá qué es una clase abstracta y por qué se usa:
En esta serie JAVA, discutiremos las características importantes de la programación orientada a objetos (OOP) que también se conocen como cuatro pilares, es decir, abstracción, encapsulación, herencia y polimorfismo.
El primer pilar de la POO es la “abstracción”. 'La abstracción es el proceso de seleccionar datos para mostrar solo la información relevante al usuario'.
=> Eche un vistazo a la guía para principiantes de Java aquí.
Lo que vas a aprender:
- Abstracción en OOP
- ¿Qué es la abstracción en Java?
- Diferencia entre abstracción y encapsulación
- Conclusión
Abstracción en OOP
En términos simples, la abstracción 'muestra' solo los atributos relevantes de los objetos y 'oculta' los detalles innecesarios.
Por ejemplo, cuando conducimos un automóvil, solo nos preocupa conducir el automóvil, como encender / detener el automóvil, acelerar / frenar, etc. No nos preocupa cómo funciona internamente el mecanismo de inicio / parada real o el proceso de aceleración / frenado. Simplemente no estamos interesados en esos detalles.
Lo que nos preocupa es la visión “abstracta” de estas operaciones que nos ayudará a impulsar el automóvil hacia adelante y llegar a nuestro destino. Este es un ejemplo simple de abstracción.
Por lo tanto, el automóvil tiene todos los mecanismos y procesos en su lugar, pero desde la perspectiva del usuario final, es decir, la perspectiva del conductor del automóvil, él / ella estará interesado solo en la visión abstracta de estos procesos.
La abstracción reduce los esfuerzos de programación y, por lo tanto, la complejidad. Un usuario final que utilice la aplicación no necesita preocuparse por cómo se implementa una función en particular. Él / ella puede usar las funciones según sea necesario.
Así, en abstracción, nos ocupamos de las ideas y no de los eventos. Esto significa que ocultamos los detalles de implementación al usuario y solo exponemos la funcionalidad al usuario final. De este modo, el usuario solo sabrá 'lo que hace' en lugar de 'cómo lo hace'.
La abstracción en OOP puede ser de dos tipos.
# 1) Abstracción de datos
En la abstracción de datos, creamos principalmente tipos de datos complejos y ocultamos su implementación. Solo exponemos las operaciones para manipular estos tipos de datos sin entrar en los detalles de su implementación.
Una ventaja de este enfoque es que podemos cambiar la implementación en cualquier momento sin cambiar el comportamiento que se expone al usuario.
# 2) Controlar la abstracción
La abstracción de control recopila todas las declaraciones de control que forman parte de la aplicación y las expone como una unidad. Esta función se utiliza cuando tenemos que realizar una función de trabajo utilizando esta unidad de control.
La abstracción de control forma la unidad principal de la programación estructurada y, utilizando la abstracción de control, podemos definir funciones simples para marcos complejos.
¿Qué es la abstracción en Java?
Dado que Java es un lenguaje de programación orientada a objetos, la abstracción puede verse como una de las características y componentes importantes del lenguaje Java. En Java, la abstracción se implementa mediante una clase e interfaz abstractas.
Entonces, ¿cómo implementamos la abstracción en Java? Java proporciona un modificador 'abstracto' sin acceso para implementar la abstracción. Este modificador abstracto se puede utilizar con clases y métodos, pero no con variables.
La interfaz proporciona una abstracción completa, es decir, solo proporciona prototipos de métodos y no su implementación. Una clase abstracta proporciona una abstracción parcial en la que no se debe implementar al menos un método.
En este tutorial, discutiremos la abstracción con clases abstractas en detalle. Exploraremos las interfaces en detalle en nuestros tutoriales posteriores.
Ejemplo de abstracción de Java
Consideremos el siguiente ejemplo.
|_+_|Producción:
El ejemplo de abstracción simple que se da arriba tiene una clase Car. En esta clase Car, tenemos un método abstracto para acelerar (). Entonces heredamos esta clase en la clase Suzuki. Dentro de la clase Suzuki, implementamos el método de aceleración.
El ejemplo anterior simplemente muestra la forma en que una clase abstracta se define, hereda y luego se usa en el programa.
¿Qué es la clase abstracta de Java?
Ya mencionamos que Java implementa la abstracción usando clases e interfaces abstractas. Primero, exploremos todo sobre la clase abstracta.
Una clase abstracta se puede definir como una clase declarada con la palabra clave 'abstracto' y tiene la restricción de que no se puede instanciar.
Una clase abstracta puede tener o no un método abstracto (un método sin implementación). En lo que respecta a JVM, una clase abstracta es una clase incompleta que no tiene un comportamiento completo.
La sintaxis general de una clase abstracta se da a continuación:
|_+_|Como se muestra en la sintaxis de la clase abstracta anterior, podemos tener métodos abstractos y no abstractos en una clase abstracta. La palabra clave 'resumen' precede a la declaración de clase.
En pocas palabras, una clase abstracta se puede describir como se muestra a continuación.
Método abstracto en Java
Un método abstracto es un método precedido por una palabra clave 'abstracta' sin ninguna implementación. Un método abstracto se declara dentro de una clase abstracta.
Un método abstracto es aquel que hace que una clase esté incompleta porque no tiene una implementación. Por lo tanto, cuando incluimos un método abstracto en la clase, naturalmente la clase se vuelve incompleta.
Podemos usar el método abstracto implementándolo en una subclase, es decir, una clase hereda la clase abstracta y luego implementa o proporciona el código para todos los métodos abstractos declarados en la clase abstracta anulándolos.
mejor espía de celular para android
Por lo tanto, es obligatorio invalidar el método abstracto en la subclase. Si el método abstracto no está implementado también en la subclase, entonces tenemos que declarar la subclase también como “abstracta”.
La declaración general del método abstracto es:
resumen vacío nombreMétodo (lista_parámetros);
Al escribir el método abstracto, debemos recordar las siguientes reglas:
- Una clase que contiene uno o más métodos abstractos es una clase abstracta.
- Algunas otras palabras clave no deben usarse con la palabra clave abstracta.
Por tanto, las siguientes combinaciones son ilegales en Java.
- final
- nativo abstracto
- estática abstracta
- abstracto privado
- abstracto sincronizado
- estrictofp abstracto
Implementemos un ejemplo de una clase abstracta y un método abstracto.
|_+_|Producción:
En el ejemplo anterior, tenemos una clase de banco. En esta clase, tenemos un método abstracto, getInterestRate (). Luego declaramos dos clases: ICICI y BOI que heredan de la clase Bank. Ambas clases implementan el método getInterestRate () devolviendo sus respectivas tasas de interés.
Luego, en el método principal, creamos un objeto de banco. Primero, el objeto bancario contiene un objeto de clase ICICI y muestra la tasa de interés. A continuación, se crea el objeto BOI y muestra la tasa de interés.
Por tanto, podemos asumir que la clase Banco es una especie de esquema o estructura que nos permite obtener una tasa de interés. A partir de esta estructura, podemos crear tantas clases concretas como queramos, y luego podemos obtener las tasas de interés respectivas para cada objeto bancario (esto se muestra en el método principal).
¿Cuál es el uso de una clase abstracta en Java?
¿Por qué usamos una clase abstracta cuando en realidad no tiene ninguna implementación propia?
Junto con la respuesta a la pregunta anterior, también ilustraremos cómo usar una clase abstracta en el ejemplo siguiente.
Consideremos un ejemplo de vehículos. Sabemos que los vehículos pueden ser de muchos tipos. Podemos tener Autos, Scooters, bicicletas, ciclomotores, autobuses, etc. Aunque existen muchos tipos de vehículos, tienen algunas propiedades o atributos que son comunes a todos los vehículos independientemente de su tipo.
Por ejemplo, cada vehículo tiene un modelo, número de chasis, color, etc. Cada uno de ellos tiene funciones como arrancar, parar, acelerar, frenar, etc. Ahora cada vehículo tendrá las propiedades y métodos anteriores que son comunes a los demás. Al mismo tiempo que un usuario de un vehículo, es posible que no estemos interesados en algunos aspectos.
Por ejemplo, si una persona está conduciendo un automóvil, lo que le interesará es simplemente arrancar y detener el vehículo o acelerar o frenar el vehículo. No le interesará saber cómo arranca o se detiene el vehículo. Solo nos interesa el funcionamiento abstracto de las funciones y no sus detalles.
Ahora bien, si queremos representar el sistema de ejemplo anterior en una aplicación de software, ¿cómo lo diseñamos? En primer lugar, implementaremos alguna abstracción. Ahora, sabemos que algunas funciones son comunes pero dependiendo de cada modelo la implementación de estas funciones será diferente.
Para empezar, declaramos una clase abstracta 'Vehículo'.
Hemos mostrado este sistema a continuación:
pregunta de la entrevista de prueba de software para experimentados
Así que tendremos una clase de vehículo abstracto y habrá una clase concreta que representará cada modelo del vehículo. Con fines ilustrativos, hemos utilizado solo tres modelos, es decir, automóvil, bicicleta y scooter.
A continuación se muestra la jerarquía de clases del sistema anterior.
|_+_|Así que tendremos una clase de resumen de vehículo y tres clases de automóvil, bicicleta y scooter. Cada una de estas clases extenderá la clase Vehicle y anulará cada uno de los métodos abstractos.
Por lo tanto, en general, siempre que tenemos que representar un sistema de este tipo que tiene métodos u operaciones comunes para representar, para presentar solo la perspectiva externa al usuario, optamos por la abstracción. Como resultado, sacamos los métodos comunes y los representamos como métodos abstractos y recopilamos estos métodos abstractos en una clase abstracta común.
Una vez que tenemos el esquema de un sistema representado como una clase abstracta y las operaciones como métodos abstractos, podemos derivar cualquier número de clases de la clase abstracta dada y anular los métodos abstractos para implementar estas operaciones para cada clase.
De esta forma resulta útil diseñar un sistema.
Interfaz y clase abstracta
Hemos visto la clase abstracta arriba. Las interfaces son otros componentes básicos que implementan la abstracción. Las interfaces son contratos, y las clases que implementan la interfaz deben respetar estos contratos.
Los contratos en las interfaces no son más que métodos que no se implementan. Dentro de las interfaces, solo tendremos prototipos de métodos. No habrá una sola implementación de métodos dentro de las interfaces.
Si tenemos una declaración de interfaz de la siguiente manera:
|_+_|Entonces, cualquier clase que implemente la interfaz A debe anular el 'myInterfaceMethod'.
Si no anulamos el método en una clase, entonces esa clase se representa como abstracta.
|_+_|Más adelante tendremos un tutorial separado sobre la interfaz.
A continuación, analicemos algunas de las diferencias entre las clases abstractas y las interfaces en Java.
Diferencia entre clase abstracta e interfaz
Clase abstracta | Interfaz |
---|---|
Una clase abstracta puede tener miembros de datos privados o protegidos además de miembros públicos. | Los miembros de la interfaz son públicos por defecto. |
Una clase abstracta puede tener métodos abstractos y / o no abstractos. | Una interfaz solo puede tener métodos abstractos. |
El resumen puede contener o no las variables finales. | Las interfaces pueden finalizar variables como variables predeterminadas. |
Una clase abstracta puede tener variables finales, estáticas o no estáticas o no finales. | Las interfaces solo pueden tener variables finales y estáticas. |
Una clase abstracta puede proporcionar implementación de interfaz. | Las interfaces no pueden implementar una clase abstracta. |
Una clase abstracta se hereda usando la palabra clave 'extiende'. | La interfaz se implementa utilizando la palabra clave 'implements'. |
Una clase abstracta puede extender otras clases o implementar múltiples interfaces. | La interfaz solo puede implementar otra interfaz. |
Cuándo usar la clase y la interfaz abstractas en Java
La decisión sobre cuándo usar la clase abstracta y cuándo usar las interfaces en la aplicación Java debe tomarse de manera inteligente después de comprender a fondo el problema en cuestión. Hay dos aspectos que tenemos que considerar como se muestra a continuación.
Clases abstractas con comportamiento parcial
Sabemos que las clases abstractas pueden no implementarse por completo menos. Pueden tener un comportamiento parcial. Por otro lado, las interfaces no tienen implementación. Entonces, cuando tenemos que elegir entre una clase abstracta y una implementación, debemos considerar este aspecto de nuestra aplicación.
Esto significa que primero tenemos que decidir si la aplicación que estamos diseñando tiene alguna implementación parcial común que podamos separar en una clase abstracta.
Por ejemplo, considere que estamos diseñando una aplicación web. Para ello tendremos que utilizar alguna tecnología web como Servlet, REST API, etc. Ahora cada una de estas tecnologías web tiene algunas técnicas o pasos que se van a implementar independientemente de la aplicación que estemos desarrollando. Luego, creamos nuestra aplicación personalizada.
Entonces, en este caso, el código definido que debe ejecutar la tecnología web se puede poner en una clase abstracta. ¿Podemos tener una interfaz para esto? No. Esto se debe a que la interfaz no puede tener una implementación.
Interfaces de solo contrato
Sabemos que las interfaces tienen contratos o métodos que forman parte de ella. Estos métodos son solo prototipos. Tenemos que implementar estas interfaces en una clase y luego anular los métodos.
Ahora considere la interfaz Map de Java Collections Framework. Muchas clases como HashMap, TreeMap y HashTable, etc. implementan esta interfaz. Cada una de estas clases tiene una implementación diferente. No tienen ningún comportamiento común que pueda representarse en la clase abstracta.
Entonces, lo que hacemos es diseñar una interfaz con prototipos de métodos y luego implementar cada una de las clases.
De esta manera, debemos sopesar cada factor correctamente antes de elegir entre una clase abstracta y una interfaz.
Diferencia entre abstracción y encapsulación
Analicemos algunas de las diferencias entre la abstracción y una característica más importante de la programación orientada a objetos, es decir, la encapsulación.
Abstracción | Encapsulamiento |
---|---|
Proceso de obtención y abstracción de la información | Proceso de vinculación de la información. |
La técnica de abstracción está a nivel de diseño o interfaz. | El mecanismo de encapsulación está a nivel de implementación. |
La abstracción esconde los detalles. | La encapsulación une la información en una unidad, lo que garantiza la seguridad de la información. |
La abstracción se implementa mediante clases e interfaces abstractas. | Los modificadores de acceso, a saber, público, privado y protegido, y por defecto, juegan un papel en la encapsulación. |
En abstracción, la única vista abstracta se presenta al usuario mientras que los datos complejos y detallados se ocultan al usuario. | En la encapsulación, los datos se agrupan como una unidad y se pueden proteger o hacer accesibles mediante modificadores de acceso y métodos de obtención y definición. |
Preguntas frecuentes
P # 1) ¿La abstracción y la ocultación de datos son lo mismo?
Responder: No, la abstracción y la ocultación de datos no es lo mismo. Pero ambas son características importantes de la programación orientada a objetos. Si bien la abstracción es un proceso de ocultar los detalles del fondo, la ocultación de datos es una técnica para aislar los datos del acceso directo.
P # 2) ¿Cuáles son las ventajas de la abstracción?
Responder: A continuación se dan algunas ventajas de la abstracción:
- Al ocultar los detalles del fondo y exponer solo la vista abstracta al usuario, la abstracción hace que el código sea más simple y legible.
- Como la abstracción protege los detalles innecesarios, hace que el código sea más pequeño.
- El mantenimiento del código puede volverse complejo y difícil sin abstracción.
P # 3) ¿Por qué es tan importante la abstracción?
Responder: La abstracción nos permite ocultar detalles de fondo que son importantes y pueden conducir al caos si se filtran al mundo. Al ocultar los detalles del fondo y exponer al usuario solo la interfaz requerida, la abstracción simplifica las aplicaciones.
P # 4) Explique la abstracción con un ejemplo en tiempo real.
Responder: Hay muchos ejemplos de abstracción en tiempo real que incluyen formas geométricas, vehículos, etc. Otro ejemplo más es el cajero automático (cajero automático). El cajero automático admite operaciones como retiro de efectivo, verificación de saldo, transferencia de dinero, etc. Pero no sabemos cómo funcionan estas operaciones internamente.
Solo se nos proporciona un monitor con una interfaz de usuario para seleccionar y realizar las operaciones necesarias.
P # 5) ¿Podemos lograr la abstracción sin encapsulación?
Responder: La abstracción protege los detalles de la implementación y la encapsulación oculta los detalles del objeto. El objeto es la forma abstracta del mundo real y sus detalles se ocultan mediante encapsulación. Por tanto, se requiere encapsulación para la abstracción.
Conclusión
En este tutorial, hemos discutido la abstracción en Java en detalle. La abstracción es una técnica para ocultar detalles innecesarios al usuario. El usuario solo tiene acceso a los detalles que son relevantes. Las operaciones de vehículos o de cajeros automáticos son ejemplos clásicos de abstracciones en el mundo real.
Cuando usamos cajeros automáticos, solo nos interesa realizar las operaciones como retiro de efectivo, etc.sin tener que conocer los detalles sobre cómo exactamente se realiza esa operación internamente.
Java proporciona abstracción a través de clases e interfaces abstractas. Mientras que las interfaces proporcionan una abstracción del 100%, las clases abstractas proporcionan una abstracción parcial. La elección entre interfaces y clases abstractas debe hacerse dependiendo de la aplicación a desarrollar y también de la información que se expondrá al usuario.
También discutimos los métodos abstractos en este tutorial junto con las diferencias entre clases abstractas e interfaces.
=> Consulte TODOS los tutoriales de Java aquí.
Lectura recomendada
- Tutorial de interfaz Java y clase abstracta con ejemplos
- Clase Java Integer y Java BigInteger con ejemplos
- Tutorial de la clase Java Scanner con ejemplos
- ¿Qué es Java Vector | Tutorial de clase de vector de Java con ejemplos
- Java Enum: Tutorial de enumeración de Java con ejemplos
- Conceptos básicos de Java: sintaxis de Java, clase de Java y conceptos básicos de Java
- Tutorial de JAVA para principiantes: más de 100 tutoriales prácticos en vídeo de Java
- Iterador de Java: aprenda a usar iteradores en Java con ejemplos