Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Principios de la POO: Abstracción | POO
Java POO

bookPrincipios de la 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. Aquí es donde entra en juego la abstracción. Al heredar de una abstracción, podemos hacer que el parámetro height sea opcional, por lo que no es necesario utilizarlo donde no se requiere.

Puede parecer complejo, así que pasemos a un ejemplo:

Car.java

Car.java

copy
123456789
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; existen 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:

public abstract class className{ }.

Esta es la sintaxis para declarar una clase abstracta. Además, observa la sintaxis para declarar un método abstracto:

public abstract returnValue methodName();

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.

Analicemos 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 únicamente con "objetos"; nos proporcionan un estado básico y comportamiento. Tomando el ejemplo de los automóviles, cada automóvil 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 basándote en este esquema abstracto.

Reglas para crear una clase abstracta

  1. 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 propósito. No podrás instanciar objetos de una clase abstracta;
  2. Los métodos abstractos solo pueden existir dentro de una clase abstracta; no puedes crear métodos abstractos fuera de una clase abstracta;
  3. Los métodos dentro de una clase abstracta pueden ser métodos abstractos o métodos con implementación;
  4. Una clase que hereda de una clase abstracta debe sobrescribir todos los métodos abstractos;
  5. Solo puedes heredar de una clase (abstracta o no abstracta) como máximo;
  6. Una clase abstracta debe representar las propiedades y comportamientos comunes de sus clases derivadas. Hablaremos de esto con más detalle cuando estudiemos 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 mayor legibilidad y claridad:

Car.java

Car.java

Truck.java

Truck.java

Main.java

Main.java

copy
123456789
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 ha escrito anteriormente:

  • Primera diapositiva: Estamos creando una subclase Truck que heredará de la clase abstracta Car. Podemos ver que el IDE nos indica que implementemos los métodos requeridos;

  • Segunda diapositiva: Estamos sobrescribiendo los métodos necesarios. Por ejemplo, escribiremos que el Truck ha comenzado a moverse y luego se ha detenido;

  • Tercera diapositiva: Creamos un objeto en el método main. Presta atención a la sintaxis utilizada: Car name = new Truck();. Comenzamos creando el objeto a través de la abstracción y finalizamos con una implementación específica. Esto se denomina composición. Luego asignamos valores a los campos según sea necesario y llamamos a los métodos sobrescritos.

¡Voilà! Si comprendes todo, has aprendido cómo 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áles de las siguientes afirmaciones son verdaderas 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?

question mark

¿Qué es la abstracción en la Programación Orientada a Objetos?

Select the correct answer

question mark

¿Cuáles de las siguientes afirmaciones son verdaderas sobre la abstracción?

Select the correct answer

question mark

¿Cuál es el propósito de una clase abstracta en Java?

Select the correct answer

question mark

¿Cómo contribuye la abstracción al mantenimiento del código?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 2. Capítulo 7

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Suggested prompts:

Can you explain the difference between abstraction and encapsulation?

Can you give more real-world examples of abstraction in Java?

How do interfaces relate to abstraction in OOP?

Awesome!

Completion rate improved to 4.76

bookPrincipios de la POO: Abstracción

Desliza para mostrar el menú

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. Aquí es donde entra en juego la abstracción. Al heredar de una abstracción, podemos hacer que el parámetro height sea opcional, por lo que no es necesario utilizarlo donde no se requiere.

Puede parecer complejo, así que pasemos a un ejemplo:

Car.java

Car.java

copy
123456789
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; existen 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:

public abstract class className{ }.

Esta es la sintaxis para declarar una clase abstracta. Además, observa la sintaxis para declarar un método abstracto:

public abstract returnValue methodName();

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.

Analicemos 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 únicamente con "objetos"; nos proporcionan un estado básico y comportamiento. Tomando el ejemplo de los automóviles, cada automóvil 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 basándote en este esquema abstracto.

Reglas para crear una clase abstracta

  1. 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 propósito. No podrás instanciar objetos de una clase abstracta;
  2. Los métodos abstractos solo pueden existir dentro de una clase abstracta; no puedes crear métodos abstractos fuera de una clase abstracta;
  3. Los métodos dentro de una clase abstracta pueden ser métodos abstractos o métodos con implementación;
  4. Una clase que hereda de una clase abstracta debe sobrescribir todos los métodos abstractos;
  5. Solo puedes heredar de una clase (abstracta o no abstracta) como máximo;
  6. Una clase abstracta debe representar las propiedades y comportamientos comunes de sus clases derivadas. Hablaremos de esto con más detalle cuando estudiemos 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 mayor legibilidad y claridad:

Car.java

Car.java

Truck.java

Truck.java

Main.java

Main.java

copy
123456789
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 ha escrito anteriormente:

  • Primera diapositiva: Estamos creando una subclase Truck que heredará de la clase abstracta Car. Podemos ver que el IDE nos indica que implementemos los métodos requeridos;

  • Segunda diapositiva: Estamos sobrescribiendo los métodos necesarios. Por ejemplo, escribiremos que el Truck ha comenzado a moverse y luego se ha detenido;

  • Tercera diapositiva: Creamos un objeto en el método main. Presta atención a la sintaxis utilizada: Car name = new Truck();. Comenzamos creando el objeto a través de la abstracción y finalizamos con una implementación específica. Esto se denomina composición. Luego asignamos valores a los campos según sea necesario y llamamos a los métodos sobrescritos.

¡Voilà! Si comprendes todo, has aprendido cómo 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áles de las siguientes afirmaciones son verdaderas 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?

question mark

¿Qué es la abstracción en la Programación Orientada a Objetos?

Select the correct answer

question mark

¿Cuáles de las siguientes afirmaciones son verdaderas sobre la abstracción?

Select the correct answer

question mark

¿Cuál es el propósito de una clase abstracta en Java?

Select the correct answer

question mark

¿Cómo contribuye la abstracción al mantenimiento del código?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 2. Capítulo 7
some-alt