poo polimorfismo encapsulamiento ejemplo abstraccion java oop

java - polimorfismo - abstraccion y encapsulamiento



Encapsulación vs Abstracción? (13)

Aquí están las breves definiciones de encapsulación y abstracción.

Abstracción:

El proceso de abstracción en Java se utiliza para ocultar ciertos detalles y solo mostrar las características esenciales del objeto. En otras palabras, se trata de la vista externa de un objeto (interfaz). El único buen ejemplo que veo para esto en diferentes sitios es la interfaz.

Encapsulación:

Básicamente se trata de ocultar el estado del objeto con la ayuda de modificadores como privado, público, protegido, etc. exponemos el estado a través de los métodos públicos solo si es necesario.

Lo que logramos con modificadores como private , public también oculta detalles innecesarios del mundo exterior que no es más que un concepto de abstracción

Entonces, desde arriba, la explicación parece que la encapsulación es una parte de la abstracción o podemos decir que es un subconjunto de la abstracción. ¿Pero por qué entonces el término de encapsulación se inventa cuando podemos tratarlo con abstracción solamente? Estoy seguro de que debería haber alguna diferencia importante que los distinga, pero la mayoría del material en la red dice casi lo mismo para ambos.

Aunque esta pregunta también se ha planteado anteriormente en este foro, pero la vuelvo a publicar con dudas específicas. Algunas respuestas también dicen que la abstracción es un concepto y la encapsulación es la implementación. Pero no creo esto. Si es cierto, entonces puedo pensar que estos dos conceptos diferentes se proporcionan para confundirnos.

Actualización: - Después de 5 años, he llegado a mi propia respuesta, que es la esencia basada en las respuestas en este post y debajo de los

  1. diferencia entre la abstracción y la encapsulación?
  2. ejemplo de encapsulación vs abstracción del mundo real

la encapsulación es una parte de la abstracción o podemos decir que es un subconjunto de la abstracción

Son conceptos diferentes.

  • La abstracción es el proceso de depurar todos los atributos innecesarios / no importantes de un objeto y conservar solo las características más adecuadas para su dominio.

    Por ejemplo, para una persona: decide conservar el nombre y apellido y el SSN. Edad, altura, peso, etc. son ignorados como irrelevantes.

    La abstracción es donde comienza tu diseño.

  • La encapsulación es el siguiente paso donde reconoce operaciones adecuadas a los atributos que usted aceptó mantener durante el proceso de abstracción. Es la asociación de los datos con la operación que actúa sobre ellos.
    Es decir, los datos y los métodos están agrupados.

Así es como lo entendí:

En la programación orientada a objetos, tenemos algo llamado clases . ¿Para qué son? Deben almacenar algún estado y almacenar algunos métodos para cambiar ese estado, es decir, están encapsulando el estado y sus métodos.

A (clase) no le importa la visibilidad propia o de su contenido. Si elegimos ocultar el estado o algunos métodos, se esconde la información .

Ahora, toma el escenario de una herencia . Tenemos una clase base y un par de clases derivadas (heredadas). Entonces, ¿qué está haciendo la clase base aquí? Está abstrayendo algunas cosas de las clases derivadas.

Todos ellos son diferentes, ¿verdad? Pero, los mezclamos para escribir buenos programas orientados a objetos. Espero eso ayude :)


Intentemos entender de una manera diferente.

Qué puede pasar si la Abstracción no está allí y Qué puede pasar si la Encapsulación no está allí.

Si la abstracción no está allí, entonces puedes decir que el objeto se usa menos. No puede identificar el objeto ni puede acceder a ninguna funcionalidad del mismo. Tome un ejemplo de un televisor, si no tiene una opción para encender, cambiar de canal, aumentar o disminuir el volumen, etc., entonces, ¿para qué sirve la TV y cómo la usa?

Si la encapsulación no está allí o no se está implementando correctamente, entonces puede usar mal el objeto. Allí los datos / componentes pueden ser mal utilizados. Tome el mismo ejemplo de TV. Si no se realiza encapsulado en el volumen de TV, entonces el controlador de volumen puede utilizarse incorrectamente haciendo que sea inferior o supere su límite (0-40 / 50).


La abstracción es un término muy general, y la abstracción en el software no se limita a los lenguajes orientados a objetos. Una definición de diccionario: "el acto de considerar algo como una cualidad o característica general, aparte de realidades concretas, objetos específicos o instancias reales".

El lenguaje ensamblador puede considerarse como una abstracción del código máquina: el ensamblaje expresa los detalles esenciales y la estructura del código máquina, pero le libera de tener que pensar en los códigos de operación utilizados, el diseño del código en la memoria, hacer que los saltos vayan a la dirección correcta, etc.

La API de su sistema operativo es una abstracción de la máquina subyacente. Su compilador proporciona una capa de abstracción que lo protege de los detalles del lenguaje ensamblador. La pila TCP / IP integrada en su sistema operativo abstrae los detalles de la transmisión de bits a través de una red. Si desciendes hasta el silicio crudo, las personas que diseñaron tu CPU lo hicieron usando diagramas de circuitos escritos en términos de "diodos" y "transistores", que son abstracciones de cómo los electrones viajan a través de cristales semiconductores.

En software, todo es una abstracción. Creamos programas que simulan o modelan algún aspecto de la realidad, pero por necesidad nuestros modelos siempre abstraen algunos detalles de lo "real". Construimos capa sobre capa en una capa de abstracciones, porque es la única forma en que hacemos algo. (Imagina que intentas hacer, digamos, un solucionador de sudoku, y tienes que diseñarlo usando solo cristales semiconductores. "OK, necesito un pedazo de silicio tipo N aquí ...")

En comparación, "encapsulación" es un término muy específico y limitado. Algunas de las otras respuestas a esta pregunta ya han dado buenas definiciones para ello.


La encapsulación está ocultando datos innecesarios en una cápsula o unidad

La abstracción muestra la característica esencial de un objeto

La encapsulación se usa para ocultar su miembro de la clase y la interfaz externas. Usar los modificadores de acceso provistos en el ejemplo de c # .like público, privado, protegido, etc.

Class Learn { private int a; // by making it private we are hiding it from other private void show() //class to access it { console.writeline(a); } }

Aquí tenemos datos de ajuste en una unidad o cápsula, es decir, clase.

La abstracción es justo lo opuesto a la encapsulación.

La abstracción se usa para mostrar datos importantes y relevantes al usuario. mejor ejemplo del mundo real En un teléfono móvil, puede ver sus diferentes tipos de funcionalidades como cámara, reproductor de mp3, función de llamada, función de grabación, multimedia, etc. Es abstracción, porque solo está viendo información relevante en lugar de su ingeniería interna.

abstract class MobilePhone { public void Calling(); //put necessary or essential data public void SendSMS(); //calling n sms are main in mobile } public class BlackBerry : MobilePhone // inherited main feature { public void FMRadio(); //added new public void MP3(); public void Camera(); public void Recording(); }


La encapsulación protege para colapsar el comportamiento interno del objeto / instancia de la entidad externa. Por lo tanto, se debe proporcionar un control para confirmar que los datos que se están suministrando no van a dañar el sistema interno de instancia / objeto para sobrevivir a su existencia.

Buen ejemplo, Divider es una clase que tiene dos variables de ejemplo dividendo y divisor y un método getDividedValue.

¿Puedes pensar, por favor, si el divisor se establece en 0, entonces el sistema / comportamiento interno (getDivided) se romperá?

Entonces, el comportamiento interno del objeto podría protegerse lanzando excepciones a través de un método.


Respondiendo a mi propia pregunta después de 5 años, ya que siento que todavía necesita más detalles

Abstracción:

Definición técnica: - La abstracción es un concepto para ocultar detalles innecesarios (complejos o simples) y solo mostrar las características esenciales del objeto. No hay implementación aquí es solo un concepto

Lo que significa prácticamente: - Cuando digo que mi empresa necesita algún medio / dispositivo para que los empleados puedan conectarse con el cliente. Esta es la forma más pura de abstaction (como la interfaz en java) ya que ese dispositivo / medio puede ser un teléfono o internet o skype o en persona o correo electrónico, etc. No voy a entrar en detalles del dispositivo / medio

Incluso cuando digo que mi empresa necesita algún medio / dispositivo para que los empleados puedan conectarse con el cliente a través de una llamada de voz. Entonces también estoy hablando de abstracto pero a un nivel un poco más bajo ya que el dispositivo / medio puede ser teléfono o skype o algo más, etc.

Ahora cuando digo que mi empresa necesita un teléfono para que los empleados se puedan conectar al cliente a través de una llamada de voz. Entonces también estoy hablando de un nivel abstracto pero a un nivel un poco más bajo ya que el teléfono puede ser de cualquier compañía como iphone o samsung o nokia, etc.

Encapsulación: básicamente se trata de ocultar el estado (información) del objeto con la ayuda de modificadores como privado, público, protegido, etc. exponemos el estado a través de los métodos públicos solo si así lo requiere.

Lo que significa prácticamente: - Ahora cuando digo que mi empresa necesita un poco de iphone para que los empleados puedan conectarse con el cliente a través de una llamada de voz. Ahora estoy hablando de algún objeto concreto (como el iphone). A pesar de que no voy a entrar en detalles del iPhone aquí también, pero el iPhone tiene alguna información / implementación de estado / concreta asociada a él, donde el dispositivo / medio no tiene. Cuando digo objeto concreto, en realidad significa cualquier objeto que tenga alguna implementación / información (no completa como la clase abstracta de Java) asociada a él.

Así que, en realidad, iphone usa aquí la encapsulación como estrategia para ocultar su estado / información y exponer solo aquellos que cree que deberían estar expuestos. Por lo tanto, tanto la abstracción como la encapsulación esconden algunos detalles innecesarios, excepto la abstracción a nivel conceptual y la encapsulación en realidad a nivel de implementación.

Esta es la esencia basada en las respuestas en esta publicación y debajo de las

  1. diferencia entre la abstracción y la encapsulación?
  2. ejemplo de encapsulación vs abstracción del mundo real

Abstracción es el concepto de describir algo en términos más simples, es decir, abstrayendo los detalles, para centrarse en lo que es importante (Esto también se ve en el arte abstracto, por ejemplo, donde el artista se centra en los bloques de construcción de imágenes, como color o formas). La misma idea se traduce a OOP mediante el uso de una jerarquía de herencia, donde los conceptos más abstractos están en la parte superior y las ideas más concretas, en la parte inferior, construyen sobre sus abstracciones. En su nivel más abstracto, no hay detalles de implementación y tal vez muy pocos puntos en común, que se agregan a medida que la abstracción disminuye.

Como ejemplo, en la parte superior puede ser una interfaz con un solo método, luego el siguiente nivel, proporciona varias clases abstractas, que pueden o no completar algunos de los detalles sobre el nivel superior, pero ramas agregando sus propios métodos abstractos , entonces, para cada una de estas clases abstractas hay clases concretas que proporcionan implementaciones de todos los métodos restantes.

La encapsulación es una técnica . Puede o no ser para ayudar en la abstracción, pero sin duda se trata de ocultar información y / u organización. Exige que los datos y las funciones se agrupen de alguna manera; por supuesto, una buena práctica de OOP exige que se agrupen por abstracción. Sin embargo, hay otros usos que solo ayudan en la mantenibilidad, etc.


Encapsulación (datos de enlace y código)

  • La encapsulación es el mecanismo que vincula el código y los datos que manipula, y mantiene tanto la seguridad de la interferencia externa como el uso indebido.

  • En un lenguaje orientado a objetos, el código y los datos se pueden combinar de tal forma que se cree una "caja negra" autónoma. Cuando el código y los datos se vinculan de esta manera, se crea un objeto. En otras palabras, un objeto es el dispositivo que admite la encapsulación.

  • La encapsulación conduce al concepto de ocultación de datos, pero el concepto de encapsulación no debe restringirse al ocultamiento de información.

  • La encapsulación representa claramente la capacidad de agrupar los datos y la funcionalidad relacionados dentro de una única entidad autónoma llamada clase.

Abstracción (ocultando cómo se almacenan los datos y ocultando cómo se implementa la función)

  • La abstracción de datos es un proceso de representación de las características esenciales sin incluir detalles de implementación.

  • La abstracción es una de las características más poderosas y vitales proporcionadas por la programación orientada a objetos.

  • La idea principal detrás de la abstracción de datos es proporcionar una separación clara entre las propiedades del tipo de datos y los detalles de implementación asociados. Esta separación se logra para que las propiedades del tipo de datos abstractos sean visibles para la interfaz del usuario y los detalles de implementación estén ocultos.

  • La abstracción está separando las propiedades lógicas de los detalles de implementación. Por ejemplo, conducir el automóvil es una propiedad lógica y el diseño del motor es el detalle de la implementación.


Encapsulación : el proceso de ocultar componentes de la clase para evitar el acceso directo desde el exterior. Se logra mediante el uso de un modificador "privado" para evitar el acceso directo a algunos miembros de la clase (campo de datos o método) de otras clases u objetos, mientras tanto proporciona acceso a estos miembros privados por miembros públicos (Interfaz). Eso hace que los miembros de la clase estén protegidos como órganos humanos escondidos / encapsulados bajo la piel o algún escudo.

Abstracción : se debe seguir un principio al escribir el programa OOP que diga "debe incluir en la clase solo los componentes que sean interesantes en la tarea del programa". Por ejemplo: el estudiante objeto tiene muchos personajes como ser humano: nombre, edad, peso, color de cabello, color de ojos, etc. Pero cuando crea una clase en OOP para trabajar con estudiantes, debe incluir solo aquellos caracteres que realmente materia para la base de datos del estudiante: nombre, edad, especialidad, nivel, marcas ... etc. en C ++ puedes crear clases abstractas usando el modificador "virtual" con cualquier método en la clase y eso lo hará inutilizable en directo pero puedes derivar otras clases de la misma y crear implementación para sus miembros con la adición de miembros necesarios en función de la tarea.


La abstracción delinea una representación simplificada específica de contexto de algo; ignora detalles irrelevantes contextualmente e incluye detalles contextualmente importantes.

La encapsulación restringe el acceso externo a las partes de algo y agrupa el estado de esa cosa con los procedimientos que usan el estado.

Toma a la gente, por ejemplo. En el contexto de la cirugía, una abstracción útil ignora las creencias religiosas de una persona e incluye el cuerpo de la persona. Además, las personas encapsulan sus recuerdos con los procesos de pensamiento que usan esos recuerdos. Una abstracción no necesita tener encapsulación; por ejemplo, una pintura de una persona no oculta sus partes ni agrupa procedimientos con su estado. Y, la encapsulación no necesita tener una abstracción asociada; por ejemplo, personas reales (no abstractas) encapsulan sus órganos con su metabolismo.


La encapsulación es una estrategia utilizada como parte de la abstracción. La encapsulación se refiere al estado de los objetos: los objetos encapsulan su estado y lo ocultan desde el exterior; los usuarios externos de la clase interactúan con ella a través de sus métodos, pero no pueden acceder directamente al estado de las clases. Entonces la clase abstrae los detalles de implementación relacionados con su estado.

La abstracción es un término más genérico, también se puede lograr mediante (entre otras) subclases. Por ejemplo, la List interfaz en la biblioteca estándar es una abstracción para una secuencia de elementos, indexados por su posición, los ejemplos concretos de una List son una List ArrayList o una LinkedList . Código que interactúa con una List resúmenes sobre el detalle de qué tipo de lista está utilizando.

La abstracción a menudo no es posible sin ocultar el estado subyacente mediante encapsulación: si una clase expone su estado interno, no puede cambiar su funcionamiento interno y, por lo tanto, no puede abstraerse.


NOTA: estoy compartiendo esto No es malo que aquí no haya una buena respuesta, sino porque comprendo fácilmente.

Responder:

Cuando se conceptualiza una clase, ¿cuáles son las propiedades que podemos tener en ella dado el contexto? Si estamos diseñando una clase Animal en el contexto de un zoológico, es importante que tengamos un atributo como animalType para describirlo como doméstico o silvestre. Este atributo puede no tener sentido cuando diseñamos la clase en un contexto diferente.

Del mismo modo, ¿cuáles son los comportamientos que vamos a tener en la clase? La abstracción también se aplica aquí. ¿Qué es necesario tener aquí y qué será una sobredosis? Luego cortamos algo de información de la clase. Este proceso aplica abstracción.

Cuando pedimos la diferencia entre la encapsulación y la abstracción, diría que la encapsulation usa la abstracción como concepto. Entonces, ¿es solo encapsulación? No, la abstracción es incluso un concepto aplicado como parte de la herencia y el polimorfismo.

Go aquí para obtener más explicaciones sobre este tema.