principio - polimorfismo java
Encapsulación vs ocultación de datos-Java (18)
La ocultación de datos significa que proporcionamos seguridad a los datos dentro de la clase.
Abstracción significa ocultar el código definiendo funciones de miembro.
La encapsulación es la combinación de abstracción y ocultación de datos, lo que significa que estamos envolviendo datos y códigos asociados con esos datos. Para la clase ex bean
class student {
private int age; // Data Hiding
public setAge(){} // Abstraction
public getAge(){} // Abstraction
}
la clase de estudiantes está encapsulada.
encapsulación = ocultación de datos + abstracción
Entrevistador: ¿Qué es la encapsulación y cómo se logra en Java?
Yo: la encapsulación es un mecanismo para ocultar información del cliente. La información puede ser datos o implementación o algoritmo. Logramos esto usando modificadores de acceso.
Entrevistador: Esta es la ocultación de datos. ¿Cómo logramos la encapsulación en Java?
Yo : uummmm
Pregunta concreta: además de los "modificadores de acceso", ¿cuál es la forma de implementar la encapsulación en Java?
Encapsulación
En general, la encapsulación significa agrupar elementos similares, así de simple.
Por ejemplo, tome una clase de Student
donde tengamos variables de instancia de los alumnos y comportamientos / métodos que actúen en esas variables de instancia en un solo lugar.
Por qué es importante? No queremos que nuestro código se disemine por todos lados en nuestro código Base.
Si dijimos que necesitamos hacer cambios, entonces necesitamos encontrar las variantes (de esos cambios) en todos los lugares. Al agrupar elementos similares, estamos evitando dichos escenarios y también ayuda a que nuestro código incluido sea más específico.
Ocultación de datos
Simplemente proporciona una forma de proteger sus datos del mundo exterior. Lo que significa es, digamos que si hago público mi variable de instancia, cualquiera puede cambiar su estado. Pero si hacemos que nuestra variable de instancia sea privada / protegida, en realidad estamos restringiendo que las entidades externas realicen cambios en ella.
Comparación / Discusión
Ahora surge la pregunta, ¿en qué medida estamos protegiendo nuestras variables?
De nuevo, debemos entender que la encapsulación es solo el contenedor que necesitamos para colocar nuestros artículos similares.
Es solo actuar como una caja negra al mundo exterior. El mundo exterior (me refiero a clientes / consumidores: utilizando nuestra clase de Student
) no conoce los detalles internos / detalles de implementación de la clase Student
y en realidad no deberían preocuparse por los detalles internos / detalles de implementación de la clase. Solo quieren algunos métodos / API para que puedan usarlos en su aplicación cliente.
Entonces mi punto es que todas las conductas / variables relacionadas con los estudiantes se colocan en un recuadro negro que lo llamamos como clase. Ahora depende del diseñador de la clase cuáles son los elementos de la clase que deben ocultarse y qué no debe ocultarse al mundo exterior.
Volviendo ahora a la pregunta En Java: estamos haciendo que nuestras variables sean privadas, significa que están protegidas por clase. Si queremos que nuestras variables de instancia estén accesibles en todo el paquete, entonces están protegidas por paquetes. A través del proyecto, son públicos. Entonces, lo que quiero decir es que para ocultar los datos, necesitas algún tipo de contenedor en el que almacenarás tus datos y los ocultarás con respecto al contenedor.
Entonces, lo que siento Data Hiding no es posible sin la encapsulación . No puede ocultar sus datos sin ponerlos en algún tipo de contenedor. De nuevo, les recuerdo que estoy poniendo esto en el contexto del Lenguaje Orientado a Objetos.
Pero sí, la encapsulación es posible sin ocultar sus datos. Pon todo en público y podrás ver el afecto.
- ENCAPSULATION es agrupar los datos (campos) y el comportamiento (métodos) en clases.
- Ahora, debe proporcionar control de acceso a los datos mediante el uso de modificadores de acceso (privado / protegido / público o predeterminado) que es DATA HIDING. Protege los datos del mundo exterior donde no desea proporcionar el acceso.
- Además, para ocultar la complejidad de las operaciones, debe usar interfaces para lograr la ABSTRACCIÓN.
Básicamente, la encapsulación de datos es un proceso, mientras que el ocultamiento de datos es una técnica. En la encapsulación, los datos pueden ser públicos o privados, pero los datos que ocultan los datos son solo privados. Por lo tanto, el ocultamiento de datos usa Encapsulation pero también utiliza diferentes técnicas para mantener los datos permitidos solo para el acceso autorizado. ¡Espero eso ayude!
De la forma en que lo veo, la encapsulación se refiere a la idea de vincular datos y métodos a una sola unidad llamada clase . Sin embargo, existen dos criterios principales para vincular datos y métodos. Uno de ellos es ocultar información, pero no el único. Para ser perfectamente conciso , diría que los dos criterios principales son
- Acoplamiento bajo (asegúrate de ocultar la información)
- Alta cohesión
El proceso de definir una clase al ocultar sus datos del acceso directo desde el miembro externo de la clase y proporcionar el acceso solo a través del método setter y getter accesible públicamente a través de la validación adecuada se llama encapsulación.
El proceso de unir miembros de datos y métodos correspondientes en una sola unidad no es más que una encapsulación.
Encapsulación = Ocultar datos + Abstracción
En general, la encapsulación se refiere simplemente a agrupar los datos (por ejemplo, de un objeto) con las operaciones sobre esos datos. Entonces tiene una clase que encapsula campos de datos, junto con los métodos para manipular esos datos.
Pero la encapsulación también se usa a veces de la misma manera que su respuesta, y de hecho, uno de los puntos de agrupar datos y métodos es ocultar la implementación.
Supongo que una mejor respuesta que simplemente usar métodos y hacer que todos los campos sean privados es: usar interfaces. De esta forma, las operaciones en un objeto se basan puramente en el contrato de interfaz, y de ninguna manera están vinculadas a los campos o métodos auxiliares utilizados para implementar ese contrato internamente.
En la clase, los atributos y los comportamientos se colocan juntos. Una encapsulación significa que cuando creas una clase, esto significa que realizas el principio de encapsulación. Porque los datos y los comportamientos están encapsulados en la clase. Entonces el ocultamiento de datos es una parte importante del término - encapsulación. Y esto significa puntos de acceso del objeto.
Encapsulación: la encapsulación es uno de los pilares de OOPS, también está superconjunto para los otros dos términos, ocultación de datos y abstracción. (Ocultación de datos, como se refiere el término. Los datos solo se pueden almacenar en variables. Para ocultar los datos del mundo externo, utilizamos el concepto de ocultación de datos. Público, privado, protegido Estos son tres modificadores de acceso que se nos proporcionan para ocultar datos. limitado al paquete. Protegido limitado a la clase heredada.) ** Las variables privadas son accesibles solo dentro de la clase, lo que significa que si hay una clase interna, también se pueden llamar directamente las variables privadas. Solo las clases internas estáticas pueden llamar a las variables estáticas.
Ahora viene a Abstracción (es decir, Intangible). La abstracción también se considera como el proceso para ocultar la implementación al usuario y proporcionar solo el resultado final. Ejemplo: tenemos una clase de persona que tiene la propiedad "Peso". Esta propiedad es bastante complicada porque no podemos aceptar menos de 0 pesos para una persona. Además, no podemos aceptar más de 500 kg. Así que ocultar la implementación de estos será en el método setter. Esta cosa que oculta los detalles de implementación es Abstracción.
** Y el paquete completo, es decir, hacer que el objeto sea privado y la implementación de la lógica en setter y getter se llama ENCAPSULATION.
La definición más sencilla de encapsulado es "Datos y código vinculantes que operan datos en una sola unidad", de modo que el mundo exterior no puede acceder directamente a los datos.
En lenguaje de estructura como c, los datos se declaran al inicio del bloque y se usan directamente, se accede de forma abierta (Any tom, dick y harry pueden acceder a los datos). La ocultación de datos es un concepto para restringir el acceso a los datos directa y abiertamente a cualquier tom dick y harry.
La encapsulación es una de las formas de lograr ocultar datos. Alcanza la ocultación de datos al juntar datos y funciones (Encapsulación).
Cómo se logra en JAVA, consulte cualquier ejemplo de función getter (), setter () en JAVA. Mira esto
La pregunta parece engañosa, dudo que nadie más que el entrevistador pueda responderla y es posible que su respuesta sea incorrecta. Lo que es más importante, no está claro qué se supone que la pregunta evalúe o descubra.
Aún así, lo pensé un poco y lo siguiente es lo que creo que podría ser mi intento de responder la pregunta.
Con modificadores de acceso
En Java, la encapsulación se implementa ocultando detalles usando los modificadores de accesibilidad (es decir, público, protegido, privado, etc.). Con estos niveles de accesibilidad, usted controla el nivel de ocultamiento de la información. Cuanto menos restrictivo es el nivel, más caro es el cambio cuando ocurre y cuanto más acoplada está la clase con otras clases dependientes (es decir, clases de usuario, subclases).
Evidentemente, la encapsulación es más que un simple estado de ocultación. En Java puede ocultar clases e interfaces enteras y su estado y comportamiento, con esto, ocultando los detalles de implementación de una API completa.
Por ejemplo, el método Arrays.asList()
devuelve una implementación de List
, pero no nos importa qué implementación, siempre que satisfaga la interfaz pública de List
, ¿no ?. La implementación se puede cambiar en el futuro sin afectarnos a nosotros, los usuarios del método, pero la implementación real está oculta para nosotros.
Hasta este punto, parecería que la encapsulación dependía completamente de la capacidad de un lenguaje de programación para ocultar detalles y, por lo tanto, que no se podía lograr sin los modificadores de acceso, ¿verdad?
Sin modificadores de acceso
Sin embargo, ¿cómo logra un lenguaje como Python encapsular cuando no tiene modificadores de acceso? ¿Todo es público en Python? ¿Eso significa que la encapsulación no es posible?
¿Qué pasa si, por convención, definimos la interfaz pública de nuestros componentes y luego accedemos al estado y comportamiento de los objetos solo a través de su interfaz pública? Evidentemente, para esto necesitamos una comprensión clara de las abstracciones en nuestro dominio de problemas y cómo se supone que nuestros usuarios deben consumirlas.
Para mí, parece como si la pregunta de la entrevista tuviera la intención de evaluar la encapsulación como un concepto más amplio, uno que depende de la definición de abstracciones muy claras, y no solo como un subproducto de una característica del lenguaje como los modificadores de acceso.
El papel de la abstracción
Es por eso que, en mi opinión, para comprender realmente la encapsulación, uno debe comprender primero la abstracción.
Piensa, por ejemplo, en el nivel de abstracción en el concepto de un automóvil. Un automóvil es complejo en su implementación interna. Tienen varios subsistemas, como un sistema de transmisión, un sistema de interrupción, un sistema de combustible, etc.
Sin embargo, hemos simplificado su abstracción e interactuamos con todos los automóviles del mundo a través de la interfaz pública de su abstracción. Sabemos que todos los autos tienen un volante a través del cual controlamos la dirección, tienen un pedal que cuando lo presionas aceleras el auto y controlas la velocidad, y otro que cuando lo presionas lo haces parar, y tienes una palanca de cambios que te permite controlar si avanzas hacia atrás. Estas características constituyen la interfaz pública de la abstracción del automóvil. Por la mañana puede conducir un sedán y luego salir de él y conducir un SUV por la tarde como si fuera lo mismo.
No es que no puedas abrir el capó y ver cómo funciona todo. Sin embargo, pocos de nosotros conocemos los detalles de cómo se implementan todas estas características subyacentes bajo el capó, y la verdad es que no necesitamos saber los detalles para conducir un automóvil. Todas estas cosas están encapsuladas bajo la abstracción del automóvil. Solo necesitamos conocer la interfaz pública de la abstracción.
Piense en la época en que los automóviles no tenían un sistema direccional hidráulico. Un día, los fabricantes de automóviles lo inventaron, y luego decidieron ponerlo en automóviles. Aún así, esto no cambió la forma en que los usuarios interactuaban con ellos. Como máximo, los usuarios experimentaron una mejora en el uso del sistema direccional. Un cambio como este fue posible porque la implementación interna de un automóvil estaba encapsulada.
Esto demuestra claramente que al ocultar los detalles de cómo se implementaron los sistemas direccionales, podían cambiarlo de manera segura sin afectar la interfaz pública del automóvil y, en consecuencia, sin afectar la forma en que los usuarios interactuaban con él.
Ahora, piense que los fabricantes de automóviles decidieron poner la tapa de combustible debajo del automóvil, y no en uno de sus lados. Vas y compras uno de estos autos nuevos, y cuando te quedas sin gasolina vas a la estación de servicio y no encuentras la tapa de combustible. De repente, se da cuenta de que está debajo del automóvil, pero no puede alcanzarlo con la manguera de la bomba de gas. Ahora, hemos roto el contrato de interfaz pública, y por lo tanto, el mundo entero se rompe, se cae porque las cosas no están funcionando como se esperaba. Un cambio como este costaría millones. Tendríamos que cambiar todas las bombas de gas en el mundo. Cuando rompemos la encapsulación, tenemos que pagar un precio.
Entonces, como puede ver, el objetivo de la encapsulación es minimizar la interdependencia y facilitar el cambio . Maximiza la encapsulación minimizando la exposición de los detalles de implementación. El estado de una clase solo se debe acceder a través de su interfaz pública.
La belleza de la encapsulación es el poder de cambiar las cosas sin afectar a sus usuarios .
Podríamos decir que este objetivo final depende de una planificación y un diseño cuidadosos. En Java, los modificadores de acceso son una forma de dar vida a estas ideas, pero en un lenguaje donde esta característica no existe, es igualmente posible lograr la encapsulación.
Odio hacer esto, pero, de Wikipedia :
En los lenguajes de programación, la encapsulación se usa para referirse a una de dos nociones relacionadas pero distintas, y a veces a la combinación de las mismas:
- Un mecanismo de lenguaje para restringir el acceso a algunos de los componentes del objeto.
- Una construcción de lenguaje que facilita la agrupación de datos con los métodos (u otras funciones) que operan en esos datos
Su explicación fue más en la línea de la primera noción, el entrevistador estaba buscando algo en el segundo.
Vi que ya se hizo una gran cantidad de discusiones, solo para simplificar desde mi comprensión:
Encapsulación Asegura que el comportamiento de un objeto solo puede verse afectado a través de su API. Nos permite controlar cuánto afectará un cambio en un objeto a otras partes del sistema al asegurar que no haya dependencias inesperadas entre componentes no relacionados. El modificador de acceso puede usarse para lograr la encapsulación.
Ocultar información Oculta cómo un objeto implementa su funcionalidad detrás de la abstracción de su API. Nos permite trabajar con abstracciones más altas al ignorar detalles de menor nivel que no están relacionados con la tarea en cuestión. La abstracción en el nivel de diseño se puede usar para lograr ocultar datos.
Encapsulation Encapsulation es un concepto de programación orientado a objetos que vincula los datos y las funciones que manipulan los datos, y que evita interferencias y usos indebidos. La encapsulación de datos condujo al importante concepto OOP de ocultación de datos.
Si una clase no permite que el código de llamada acceda a los datos internos del objeto y permite el acceso solo a través de los métodos, esta es una forma fuerte de abstracción o ocultamiento de información conocida como encapsulación. Algunos lenguajes (Java, por ejemplo) permiten que las clases impongan restricciones de acceso de forma explícita, por ejemplo, que denotan datos internos con la palabra clave privada y designan métodos destinados a ser utilizados por código fuera de la clase con la palabra clave pública. También se pueden diseñar métodos públicos, privados o niveles intermedios, como protected (que permite el acceso desde la misma clase y sus subclases, pero no objetos de una clase diferente). En otros idiomas (como Python), esto solo se aplica por convención (por ejemplo, los métodos privados pueden tener nombres que comiencen con un guión bajo). La encapsulación evita que el código externo se vea afectado por el funcionamiento interno de un objeto. Esto facilita la refabricación del código, por ejemplo, permite al autor de la clase cambiar la forma en que los objetos de esa clase representan sus datos internamente sin cambiar ningún código externo (siempre y cuando las llamadas al método "público" funcionen de la misma manera). También alienta a los programadores a poner todo el código relacionado con un cierto conjunto de datos en la misma clase, que lo organiza para que otros programadores lo puedan comprender fácilmente. La encapsulación es una técnica que fomenta el desacoplamiento.
La encapsulación de datos se refiere al mecanismo de mantener todas las propiedades y métodos relacionados en una sola entidad .
Ejemplo : un automóvil. Mantiene los volantes, los neumáticos, el motor y todas las cosas relacionadas en una sola entidad colectiva conocida como Car
.
En los lenguajes de programación, la encapsulación se logra con clases . Una clase contiene todas las propiedades y métodos relacionados en one single entity
diseñada para realizar una tarea específica.
El ocultamiento de datos se refiere a ocultar los detalles sin importancia del usuario y mostrarle solo los datos relevantes.
Ejemplo : cuando presionamos los frenos o el acelerador en un automóvil, no sabemos qué está sucediendo detrás de la escena ( cómo aumenta su velocidad o cómo aplica los frenos en los neumáticos). Todo lo que sabemos es que tenemos freno y acelerador para lograr el resultado deseado.
En la programación, esto se hace con la ayuda de modificadores de acceso . Los miembros privados no son accesibles desde fuera de la clase y solo public
miembros public
son accesibles para los usuarios. A los miembros privados solo se puede acceder desde los miembros de la clase, lo que proporciona la seguridad de que los miembros privados se evalúen directamente desde el exterior de la clase.
Encapsulación : tome el ejemplo de una cápsula. Si lo abres, contiene muchos ingredientes. La encapsulación de programación orientada a objetos también es así. Como su nombre indica, " encapsulación " significa encapsular (hacer una cápsula de) todos los miembros de datos, atributos y métodos correspondientes dentro de una sola cápsula.
Cómo lo haces: digamos que hiciste una clase llamada "Coche". Ahora el automóvil tiene un precio y modelo de color. Estos son atributos, y tiene un método de ejecución. Así que aquí ha encapsulado todos estos atributos y métodos de un vehículo llamado "Coche". Cuando creas una instancia de coche como tal
Car myCar = new Car();
Puede acceder a todos los atributos de Auto utilizando la variable myCar.
" Ocultación de datos ": el ocultamiento de datos se controla en Java utilizando modificadores de acceso. Para acceder a los miembros de datos, utiliza ACCESSORS mientras que para modificar los datos, usa " Mutators ". Java no proporciona accesores y mutadores por sí mismo, usted mismo los crea (getters y setters). Mientras que C # proporciona PROPIEDADES para hacerlo.
La encapsulación significa unir los datos de los miembros y el método (comportamiento) en una sola unidad y proporcionar la mayor cantidad de información requerida por el usuario. Se puede decir [encapsulación = ocultación de datos + abstracción].
La clase es un elemento completamente encapsulado en java
Ocultamiento de datos significa declarar las variables de datos como privadas para protegerlo del acceso no autorizado, pero si está dando algún método de establecimiento público y getter para la validación.