Contenido del Curso
Java POO
Java POO
Principios de POO: Abstracción
Abstracción
Hemos llegado al último pero muy importante principio de la POO: Abstracción. La palabra "abstracción" suena bastante abstracta y, en resumen, este principio nos indica que debemos depender de la abstracción en lugar de una implementación específica. Sin embargo, esto puede parecer complejo por ahora. Comencemos revisando la definición:
Por ejemplo, tenemos una clase llamada Person,
, y de ella se derivan muchas clases diferentes. Person
tiene varios campos y métodos que son comunes para todas las clases. Sin embargo, cuando tenemos una clase llamada BasketballPlayer,
, la característica height
se vuelve crucial, mientras que para una clase como Driver
, height
es irrelevante y no importante. Ahí es donde entra en juego la abstracción. Al heredar de una abstracción, podemos hacer que el parámetro height
sea opcional, de modo que no tengamos que usarlo donde no sea necesario.
Puede parecer complejo, así que pasemos a un ejemplo:
Car.java
public abstract class Car { String model; int year; int maxSpeed; String color; public abstract void move(); public abstract void stop(); }
La clase Car
no representa algo específico. No existe simplemente un Car
; hay sedanes, camiones, tractores. Por lo tanto, dependemos de la abstracción llamada Car
. Para simplificarlo aún más:
Car
es una plantilla a partir de la cual creamos clases de autos específicas.
Presta atención a la sintaxis:
Esta es la sintaxis para declarar una clase abstracta. Además, observa la sintaxis para declarar un método abstracto:
Un método abstracto no tiene cuerpo; esta es su característica principal. Las subclases de una clase abstracta sobrescribirán este método abstracto para definir su propia implementación, utilizando polimorfismo.
Veamos más de cerca qué es una clase abstracta:
Ten en cuenta que no podemos crear un objeto de una clase abstracta; esto resultará en un error:
Las clases abstractas nos liberan de tratar solo con "objetos"; nos proporcionan un estado básico y comportamiento. Tomando el ejemplo de los autos, cada auto debe tener un modelo, año de producción, velocidad máxima y color. También deben poder moverse y detenerse. Eso es todo; a partir de ahí, diseñarás tus clases específicas basadas en este esquema abstracto.
Reglas para crear una clase abstracta
Una clase abstracta es una clase que contiene al menos un método abstracto. Puedes crear una clase abstracta sin métodos abstractos, pero entonces no tendría sentido. No podrás instanciar objetos de una clase abstracta;
Los métodos abstractos solo pueden existir dentro de una clase abstracta; no puedes crear métodos abstractos fuera de una clase abstracta;
Los métodos dentro de una clase abstracta pueden ser métodos abstractos o métodos con implementación;
Una clase que hereda de una clase abstracta debe sobrescribir todos los métodos abstractos;
Solo puedes heredar de una clase como máximo (abstracta o no abstracta);
Una clase abstracta debe representar las propiedades y comportamientos comunes de sus clases derivadas. Esto se discutirá con más detalle al estudiar los principios SOLID.
Consideremos un ejemplo para entender cómo las subclases deben sobrescribir los métodos abstractos heredando de una clase abstracta, usando el ejemplo de la clase hija Truck
:
Aquí tienes el código de la captura de pantalla, reescrito para mejorar su legibilidad y claridad:
Car.java
Truck.java
Main.java
public abstract class Car { String model; int year; int maxSpeed; String color; public abstract void move(); public abstract void stop(); }
Analicemos en detalle lo que se muestra arriba:
Primera diapositiva: Se crea una subclase
Truck
que hereda de la clase abstractaCar
. Se observa que el IDE solicita implementar los métodos requeridos;Segunda diapositiva: Se sobrescriben los métodos necesarios. Por ejemplo, se indica que el
Truck
ha comenzado a moverse y luego se ha detenido;Tercera diapositiva: Se crea un objeto en el método
main
. Presta atención a la sintaxis utilizada:Car name = new Truck();
. Se inicia la creación del objeto mediante la abstracción y se finaliza con una implementación específica. Esto se denomina composición. Luego se asignan valores a los campos según sea necesario y se llaman a los métodos sobrescritos.
¡Voilà! Si comprendes todo, has aprendido a utilizar una clase abstracta.
Resumen
La abstracción es probablemente el principio más desafiante de la POO para comprender, y es muy probable que no hayas entendido todo en este momento. Pero no pienses que estás solo en esto. La abstracción es un concepto que inicialmente resulta difícil de captar para la mayoría de los desarrolladores. Con el tiempo, comprenderás mejor cómo trabajar eficazmente con la abstracción y las clases abstractas. La abstracción es un principio crucial porque nos permite hacer que nuestros programas sean extensibles y altamente flexibles.
1. ¿Qué es la abstracción en la Programación Orientada a Objetos?
2. ¿Cuál de las siguientes afirmaciones es verdadera sobre la abstracción?
3. ¿Cuál es el propósito de una clase abstracta en Java?
4. ¿Cómo contribuye la abstracción al mantenimiento del código?
¡Gracias por tus comentarios!