oop - entre - ejemplo de abstraccion
Diferencia entre encapsulación y abstracción (10)
Abstracción: cuáles son las funciones mínimas, y las variables deben exponerse al lado de nuestra clase. encapsulación: cómo lograr este requisito, significa cómo implementarlo.
Tuve una entrevista hoy. Tengo una pregunta de OOPs, sobre la diferencia entre Encapsulation y Abstraction?
Le respondí que, según tengo entendido, la encapsulación consiste básicamente en unir miembros de datos y funciones miembro en una sola unidad llamada Clase. Mientras que Abstracción es básicamente para ocultar la complejidad de la implementación y proporcionar una facilidad de acceso a los usuarios. Pensé que estaría bien con mi respuesta. Pero ella preguntó, si el propósito de ambos es ocultar información, ¿cuál es la diferencia real entre estos dos? No podría darle ninguna respuesta.
Antes de hacer esta pregunta, leo otros hilos en StackOverFlow sobre la diferencia entre estos dos conceptos de OOP. Pero no me encuentro en condiciones de convencer al entrevistador.
¿Alguien puede justificarlo con un ejemplo simple?
Para mí, la encapsulación es el proceso de desglosar los procesos detallados / complejos en subrutinas más pequeñas y más organizadas.
function DoEverything() {
// do everything
}
function Encapsulation() {
GetTheLegos();
BuildTheLegoShip();
PretendYouAreAPirate();
}
La abstracción es el proceso de encontrar similitudes de un grupo de procesos y consolidar estas similitudes en un solo proceso.
private void ProcessOne() {
try {
// code
}catch(exception ex) {
Utilities.log(ex);
Error.Text = "Error!";
}
}
private void ProcessTwo() {
try {
// different code
}catch(exception ex) {
Utilities.log(ex);
Error.Text = "Error!";
}
}
Y luego transforma esto en algo como lo siguiente.
private void HandleException(exception ex) {
Utilities.log(ex);
Error.Text = "Error!";
}
private void ProcessOne() {
try {
// code
}catch(exception ex) {
HandleException(ex);
}
}
private void ProcessTwo() {
try {
// code
}catch(exception ex) {
HandleException(ex);
}
}
Abstracción: generalmente se realiza para proporcionar acceso polimórfico a un conjunto de clases. Una clase abstracta no puede ser instanciada, por lo tanto, otra clase tendrá que derivar de ella para crear una representación más concreta.
Un ejemplo de uso común de una clase abstracta puede ser una implementación de un patrón de diseño de método de plantilla donde se introduce un punto de inyección abstracto para que la clase concreta pueda implementarlo en su propia forma "concreta".
ver: http://en.wikipedia.org/wiki/Abstraction_(computer_science)
Encapsulación: es el proceso de ocultar la complejidad de implementación de una clase específica del cliente que va a usarla, tenga en cuenta que el "cliente" puede ser un programa o evento de la persona que escribió la clase.
ver: http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming)
El encapsulado oculta variables o alguna implementación que se puede cambiar con tanta frecuencia en una clase para evitar que los extraños accedan a ella directamente. Deben acceder a él a través de los métodos getter y setter.
La abstracción también sirve para ocultar algo, pero en mayor grado (clase, interfaz) . Los clientes usan una clase abstracta (o interfaz), no les importa quién o qué era, solo necesitan saber qué puede hacer.
Abstracción: es el proceso (y el resultado de este proceso) de identificar las características esenciales comunes para un conjunto de objetos. Se podría decir que la Abstracción es el proceso de generalización: todos los objetos bajo consideración se incluyen en un superconjunto de objetos, todos los cuales poseen propiedades dadas (pero son diferentes en otros aspectos).
Encapsulación: es el proceso de encerrar datos y funciones que manipulan estos datos en una sola unidad, de modo que se oculta la implementación interna del mundo exterior.
Esta es una respuesta general no relacionada con un lenguaje de programación específico (como era la pregunta). Entonces la respuesta es: la abstracción y la encapsulación no tienen nada en común. Pero sus implementaciones pueden relacionarse entre sí (por ejemplo, en Java: Encapsulación: los detalles están ocultos en una clase, Abstracción: los detalles no están presentes en absoluto en una clase o interfaz).
Encapsular significa esconderse. La encapsulación también se denomina ocultación de datos. Puede pensar en la encapsulación como una cápsula (tableta medicinal) que oculta el medicamento que contiene. La encapsulación es envoltura, solo oculta propiedades y métodos. La encapsulación se usa para ocultar el código y los datos en una sola unidad para proteger los datos de fuera del mundo. La clase es el mejor ejemplo de encapsulación.
La abstracción se refiere a mostrar solo los detalles necesarios para el usuario previsto. Como su nombre lo sugiere, la abstracción es la "forma abstracta de cualquier cosa". Usamos la abstracción en los lenguajes de programación para crear clases abstractas. La clase abstracta representa una vista abstracta de los métodos y las propiedades de la clase.
diferencia en ambos es solo el punto de vista
La palabra de encapsulación se usa para ocultar datos si nuestro objetivo es evitar que el cliente vea dentro de nuestra lógica
La palabra de abstracción se usa para ocultar datos si nuestro objetivo es mostrarle a nuestro cliente una vista lateral
Vista exterior significa que supongamos
BubbleSort(){
//code
swap(x,y);
}
aquí usamos swap en tipo burbuja para solo mostrarle a nuestro cliente qué lógica estamos aplicando, si reemplazamos swap (x, y) con código completo aquí, en una sola instancia él / ella no puede entender nuestra lógica
Abstracción y Encapsulación son dos conceptos importantes de Programación Orientada a Objetos (OOPS). La encapsulación y la abstracción son términos interrelacionados. Diferencia de vida real entre encapsulación y abstracción: Encapsular significa ocultarse. La encapsulación también se denomina ocultación de datos. Puede pensar en la encapsulación como una cápsula (tableta medicinal) que oculta el medicamento que contiene. La encapsulación es envoltura, solo oculta propiedades y métodos. La encapsulación se usa para ocultar el código y los datos en una sola unidad para proteger los datos de fuera del mundo. La clase es el mejor ejemplo de encapsulación.
La abstracción se refiere a mostrar solo los detalles necesarios para el usuario previsto. Como su nombre lo sugiere, la abstracción es la "forma abstracta de cualquier cosa". Usamos la abstracción en los lenguajes de programación para crear clases abstractas. La clase abstracta representa una vista abstracta de los métodos y las propiedades de la clase.
Diferencia de implementación entre encapsulación y abstracción
La abstracción se implementa mediante la interfaz y la clase abstracta, mientras que la encapsulación se implementa utilizando el modificador de acceso privado y protegido.
OOPS hace uso de la encapsulación para imponer la integridad de un tipo (es decir, para asegurarse de que los datos se utilizan de manera adecuada) impidiendo que los programadores accedan a los datos de una manera no intencionada. A través de la encapsulación, solo un grupo predeterminado de funciones puede acceder a los datos. El término colectivo para tipos de datos y operaciones (métodos) junto con restricciones de acceso (público / privado, etc.) es una clase. enter image description here
Abstracción y Encapsulación son dos conceptos importantes de Programación Orientada a Objetos (OOPS). La encapsulación y la abstracción son términos interrelacionados.
Diferencia de vida real entre encapsulación y abstracción
Encapsular significa esconderse. La encapsulación también se denomina ocultación de datos. Puede pensar en la encapsulación como una cápsula (tableta medicinal) que oculta el medicamento que contiene. La encapsulación es envoltura, solo oculta propiedades y métodos. La encapsulación se usa para ocultar el código y los datos en una sola unidad para proteger los datos de fuera del mundo. La clase es el mejor ejemplo de encapsulación.
La abstracción se refiere a mostrar solo los detalles necesarios para el usuario previsto. Como su nombre lo sugiere, la abstracción es la "forma abstracta de cualquier cosa". Usamos la abstracción en los lenguajes de programación para crear clases abstractas. La clase abstracta representa una vista abstracta de los métodos y las propiedades de la clase.
Diferencia de implementación entre encapsulación y abstracción
La abstracción se implementa mediante la interfaz y la clase abstracta, mientras que la encapsulación se implementa utilizando el modificador de acceso privado y protegido.
OOPS hace uso de la encapsulación para imponer la integridad de un tipo (es decir, para asegurarse de que los datos se utilizan de manera adecuada) impidiendo que los programadores accedan a los datos de una manera no intencionada. A través de la encapsulación, solo un grupo predeterminado de funciones puede acceder a los datos. El término colectivo para tipos de datos y operaciones (métodos) junto con restricciones de acceso (público / privado, etc.) es una clase.
Ejemplo de encapsulación
Class Encapsulation { private int marks; public int Marks { get { return marks; } set { marks = value;} } }
Ejemplo de abstracción
abstract class Abstraction { public abstract void doAbstraction(); } public class AbstractionImpl: Abstraction { public void doAbstraction() { //Implement it } }
La abstracción oculta la complejidad al ofrecerle una imagen más abstracta, una vista de 10,000 pies, mientras que la encapsulación oculta el trabajo interno para que pueda cambiarlo más tarde. En otras palabras, Abstracción oculta los detalles en el nivel de diseño, mientras que la Encapsulación oculta detalles en el nivel de implementación.
Por ejemplo, cuando describe por primera vez un objeto, habla en términos más abstractos, por ejemplo, un Vehículo que puede moverse, no dice cómo se moverá el Vehículo, si se moverá usando neumáticos o volará o se venderá. Simplemente se mueve. Esto se llama Abstracción. Estamos hablando de algo muy esencial, que se mueve, en lugar de centrarse en detalles como moverse en avión, cielo o agua.
La encapsulación tiene que ver con la implementación. Su único propósito es ocultar el trabajo interno de objetos del mundo exterior para que pueda cambiarlo más tarde sin afectar a los clientes externos.
Por ejemplo, tenemos un HashMap que le permite almacenar el objeto usando el método put () y recuperar el objeto usando el método get (). Cómo HashMap implementa este método (ver aquí) es un detalle interno de HashMap, al cliente solo le importa que ponga almacena el objeto y lo devuelva, no están preocupados si HashMap está usando una matriz, cómo está resolviendo la colisión, si está utilizando la lista vinculada o el árbol binario para almacenar el aterrizaje de objetos en el mismo cubo, etc.