Confundido acerca de la definición de ' abstracción ' en OOP
On febrero 10, 2021 by adminEstoy tratando de entender la definición de «abstracción» en OOP.
Me he encontrado con algunas definiciones principales. ¿Son todos válidos? ¿Alguno de ellos está equivocado? Estoy confundido. (Reescribí la definición con mis propias palabras).
Definición 1:
Abstracción es el concepto de tomar algún objeto del mundo real y convertirlo en términos de programación. Como crear una clase Human
y darle int health
, int age
, String name
, etc. propiedades y eat()
etc.
Definición 2:
Una definición más general. La abstracción es un concepto que tiene lugar en cualquier lugar en un sistema de software donde «hacer las cosas más generales / simples / abstractas» está involucrado. Algunos ejemplos:
-
Una jerarquía de herencia, donde las clases superiores son más simples o más generales, y definen una implementación más general y abstracta. Wh ile las clases inferiores en la jerarquía son más concretas y definen implementaciones más detalladas.
-
Usar la encapsulación para ocultar los detalles de implementación de una clase de otras clases, haciendo así la clase más «abstracto» (más simple) al mundo del software exterior.
Definición 3
Otra definición general: la abstracción es el concepto de mover el foco de los detalles y la implementación concreta de las cosas, a los tipos de cosas (es decir, clases), las operaciones disponibles (es decir, métodos), etc., haciendo que la programación sea más simple, más general y más abstracta. (Esto puede tener lugar en cualquier lugar y en cualquier contexto del sistema de software). Tiene lugar, por ejemplo, al encapsular, porque encapsular significa ocultar los detalles de implementación y solo mostrar los tipos de cosas y sus definiciones más generales y abstractas. Otro ejemplo sería utilizar un objeto List
en Java. este objeto realmente usa los detalles de implementación de un ArrayList
o un LinkedList
, pero esta información se extrae usando el nombre más general List
.
¿Alguna de estas definiciones es correcta? (Me refiero a la definición más convencional y aceptada).
Comentarios
- La abstracción es definir una " cosa " como un cierto TIPO de cosa (Animal = > Perro) para reducirlo aún más (Perro = > Caniche).
Respuesta
La abstracción es uno de los 3 pilares de la programación orientada a objetos (OOP). Literalmente significa percibir una entidad en un sistema o contexto desde una perspectiva particular. Eliminamos detalles innecesarios y solo nos enfocamos en los aspectos que son necesarios para ese contexto o sistema en consideración.
Aquí hay una buena explicación:
Tú, como persona, tienes diferentes relaciones en diferentes roles. Cuando estás en la escuela, entonces eres un «Estudiante» . Cuando está en el trabajo, es un «Empleado» . Cuando estás en una institución gubernamental, puedes ser considerado un «ciudadano» . Así que todo se reduce a en qué contexto estamos mirando una entidad / objeto. Entonces, si estoy modelando un Sistema de nómina , lo veré como un Empleado (PRN, tiempo completo / tiempo parcial, designación) . Si estoy modelando un Sistema de inscripción al curso , consideraré sus aspectos y características como un Estudiante (número de lista, edad, sexo, curso inscrito) . Y si estoy modelando un Sistema de información de la seguridad social , veré tus datos como un Ciudadano (como fecha de nacimiento, sexo, país de nacimiento, etc.)
Recuerde que la abstracción (centrarse en los detalles necesarios) es diferente de la encapsulación (ocultar detalles del mundo exterior). La encapsulación significa ocultar los detalles del objeto y proporcionar una interfaz decente para que las entidades del mundo exterior interactúen con ese objeto o entidad.Por ejemplo, si alguien quiere saber mi nombre, entonces no puede acceder directamente a mis células cerebrales para saber cuál es mi nombre. En cambio, esa persona preguntará mi nombre. Si un conductor quiere acelerar un vehículo, entonces existe una interfaz (pedal de acelerador, cambio, etc.) para ese propósito.
La primera definición no es muy clara. Def 2 es bueno pero tiende a confundir al novato cuando intenta vincular la abstracción con la encapsulación y la herencia. Def 3 es la mejor de las 3 definiciones, ya que define claramente qué es Abstracción con precisión.
Comentarios
- Entonces, ¿diría que ' es como una generalización en lugar de una especificación?
- @samyismyhero ¡Exactamente! Buscamos atributos genéricos y comportamiento de objetos para la abstracción.
- [Animal = > Dog] es una abstracción. Tú defines qué partes posibles puede tener un " Animal " para crear un " Perro. " (Cola, patas, pelo, etc.). Luego, puede usar la clase " Dog " para definir un Poodle, Pit Bull, etc. Entonces, usted ' para declarar razas de perros según la clase " Dog " en lugar de una " Animal. "
Respuesta
La definición 1 definitivamente no es una abstracción. Eso describe más de cerca el modelado .
Las definiciones 2 y 3 describen lo mismo. Y ambas son descripciones bastante buenas de una abstracción.
Comentarios
- Eso ' es lo que pensé !
abstract class Shape
lol!
Respuesta
Cada una de estas definiciones es bien.
La abstracción es donde te enfocas solo en aquellos detalles que son importantes para tu propósito.
En el primer caso, tú (actualmente) no puedes incluir personas reales en tu código; te enfocas en detalles particulares de una persona que sirven a tu propósito. En otro programa, es posible que deba concentrarse en diferentes detalles. Estas serían abstracciones diferentes de una persona, y cada una puede ser igualmente válida en su contexto .
La segunda y tercera definiciones continúan esta idea, aplicándola a entidades de software.
Deja una respuesta