oop - principio - polimorfismo abstraccion
Una forma simple de entender la encapsulación y la abstracción (12)
La abstracción es un término generalizado. es decir, la encapsulación es un subconjunto de la abstracción.
La abstracción es una metodología poderosa para administrar sistemas complejos. La abstracción es manejada por objetos bien definidos y su clasificación jerárquica.
Por ejemplo, un automóvil en sí mismo es un objeto bien definido, que se compone de varios otros objetos más pequeños, como un sistema de engranaje, mecanismo de dirección, motor, que nuevamente tienen sus propios subsistemas. Pero para los humanos el automóvil es un solo objeto, que puede ser manejado con la ayuda de sus subsistemas, incluso si sus detalles internos son desconocidos. Courtesy
Encapsulación: agrupar el miembro y el método de datos en una sola unidad (es decir, Clase) se llama Encapsulación.
La encapsulación es como encerrar en una cápsula. Eso incluye las operaciones relacionadas y los datos relacionados con un objeto en ese objeto.
La encapsulación es como su bolsa en la que puede guardar su pluma, libro, etc. Esto significa que es propiedad de encapsular miembros y funciones.
class Bag{
book;
pen;
ReadBook();
}
La encapsulación significa ocultar los detalles internos de un objeto, es decir, cómo un objeto hace algo.
La encapsulación evita que los clientes vean su vista interna, donde se implementa el comportamiento de la abstracción.
La encapsulación es una técnica utilizada para proteger la información en un objeto del otro objeto.
Oculte los datos para la seguridad, como hacer que las variables sean privadas, y exponer la propiedad para acceder a los datos privados que serían públicos.
Entonces, cuando accede a la propiedad, puede validar los datos y configurarlos. Courtesy
Aprender conceptos de OOP especialmente interesados en comprender la abstracción y la encapsulación en profundidad.
Revisado a continuación ya
Abstraction VS Information Ocultar Encapsulación VS
diferencia entre la abstracción y la encapsulación?
Me resultó muy difícil comprender esos conceptos sin un fragmento de clase / código de ejemplo real y simple.
Uno de mis colegas dijo que la abstracción no es más que crear clases abstractas y que la clase normal que protege su variable miembro con el alcance se llama Encapsulación.
¿Hay alguna manera simple de entender y ayudar a otros a entender qué son exactamente, en lugar de repetir lo siguiente?
La abstracción y la encapsulación son conceptos complementarios: la abstracción se centra en el comportamiento observable de un objeto ... la encapsulación se centra en la implementación que da lugar a este comportamiento ... la encapsulación se logra a menudo mediante el ocultamiento de información, que es el proceso de ocultar todos los secretos del objeto que no contribuyen a sus características esenciales.
Bueno, explicaré la abstracción con un ejemplo del mundo real. Digamos que en su casa tiene un enchufe eléctrico y muchos dispositivos se pueden conectar al mismo enchufe, pero el enchufe nunca tendrá una idea de a qué dispositivo está conectado, en otras palabras, los detalles de los dispositivos están resumidos (ocultos) en el enchufe.
¿Y si conectamos un dispositivo directamente a un cable eléctrico sin un enchufe? Digamos que conectamos una bombilla directamente a un cable, luego el cable sabe a qué dispositivo está conectado y cuando necesitemos reemplazar la bombilla, entonces tenemos que quitar la conexión del cable de la bombilla, lo que significa que la bombilla está firmemente acoplada con el cable. En otras palabras, bulbo y cable saben los detalles a los que está conectado, significa no abstraído.
En la abstracción del mundo orientada a objetos funciona exactamente igual. La clase que consume otras clases función / propiedad no necesita saber qué clase de función / propiedad está consumiendo y todo debe abstraerse con una clase interfaz / abstracta.
Déjame codificar el mismo ejemplo. Aquí tengo una clase "ElectricPlug", que está ejecutando un dispositivo. Pero la clase "ElectricPlug" no tiene idea de qué dispositivo está ejecutando. Puede ser cualquier clase que implemente la interfaz "IDevice", lo que significa que la implementación de "RunDevice" se abstrae de "ElectricPlug". Aquí está el código de muestra completo,
class Program
{
static void Main(string[] args)
{
ElectricPlug electricPlug = new ElectricPlug(new Bulb());
}
}
public class ElectricPlug
{
private readonly IDevice _device;
public ElectricPlug(IDevice device)
{
_device = device;
}
public void Run()
{
_device.Rundevice();
}
}
public interface IDevice
{
void Rundevice();
}
public class Bulb : IDevice
{
public void Rundevice()
{
Console.WriteLine("Switched on bulb");
}
}
La abstracción es el proceso en el que "descarta" detalles innecesarios de una entidad que planea capturar / representar en su diseño y conserva solo las propiedades de la entidad que son relevantes para su dominio.
Ejemplo: para representar un automóvil, usted debería conservar, por ejemplo, el modelo y el precio, la ubicación actual y la velocidad actual e ignorar el color y el número de asientos, etc.
La encapsulación es la "vinculación" de las propiedades y las operaciones que las manipulan en una sola unidad de abstracción (es decir, una clase).
Entonces, el automóvil tendría una stop
accelarate
que manipularía la ubicación y la velocidad actual, etc.
La encapsulación es lo que parece, una forma de colocar una caja alrededor de algo para proteger sus contenidos. La abstracción está extrayendo las propiedades funcionales de algo tal que puede realizar operaciones utilizando solo lo que ha extraído sin conocer el funcionamiento interno.
Cuando decimos que dos sustancias son líquidos, estamos utilizando el término "líquido" como una abstracción sobre las propiedades de esas sustancias que estamos eligiendo discutir. Esa abstracción nos dice las cosas que podemos hacer con las sustancias dadas nuestra experiencia previa con líquidos.
La abstracción tampoco tiene nada que ver con las jerarquías. Puede tener otra abstracción como "metales" que extrae propiedades de sustancias de una manera diferente.
Las abstracciones olvidan los detalles, por lo que si está utilizando una abstracción particular, no debe preguntar acerca de las propiedades de la sustancia subyacente que no están otorgadas por la abstracción. Como si tomas leche y agua y los mezclas, te resulta difícil preguntar cuánta leche tienes.
Un Functor es una abstracción sobre algo que tiene alguna noción de mapa, es decir, puede ejecutar una función en sus contenidos internos que transforma el bit interno en cualquier otra cosa. El algo externo permanece el mismo tipo de cosas.
Donde esto se vuelve útil es que si tiene una función que funciona en Listas y se da cuenta de que solo depende de la interfaz del mapa, puede depender de Functor y luego su función puede funcionar con flujos, promesas, mayúsculas, tuplas y cualquier otra cosa que comparta esa abstracción.
Los lenguajes funcionales como Haskell tienen algunos poderes de abstracción realmente grandes que hacen que la reutilización extrema del código sea práctica.
La encapsulación se puede considerar como papel de envolver utilizado para vincular datos y funcionar juntos como una sola unidad que lo protege de todo tipo de suciedad externa (me refiero a funciones externas).
La abstracción implica la ausencia de detalles y el uso de una interfaz simple para controlar un sistema complejo.
Por ejemplo, podemos encender una bombilla presionando un botón sin preocuparnos por la ingeniería eléctrica subyacente (Abstracción).
Sin embargo, no puede encender la bombilla de ninguna otra manera. (Encapsulación)
Un ejemplo usando C #
//abstraction - exposing only the relevant behavior
public interface IMakeFire
{
void LightFire();
}
//encapsulation - hiding things that the rest of the world doesn''t need to see
public class Caveman: IMakeFire
{
//exposed information
public string Name {get;set;}
// exposed but unchangeable information
public byte Age {get; private set;}
//internal i.e hidden object detail. This can be changed freely, the outside world
// doesn''t know about it
private bool CanMakeFire()
{
return Age >7;
}
//implementation of a relevant feature
public void LightFire()
{
if (!CanMakeFire())
{
throw new UnableToLightFireException("Too young");
}
GatherWood();
GetFireStone();
//light the fire
}
private GatherWood() {};
private GetFireStone();
}
public class PersonWithMatch:IMakeFire
{
//implementation
}
Cualquier hombre de las cavernas puede provocar un incendio, ya que implementa la ''característica'' IMakeFire . Tener un grupo de fabricantes de fuego (List) significa que Caveman y PersonWithMatch son elecciones válidas.
Esto significa que
//this method (and class) isn''t coupled to a Caveman or a PersonWithMatch
// it can work with ANY object implementing IMakeFire
public void FireStarter(IMakeFire starter)
{
starter.LightFire();
}
Por lo tanto, puede tener muchos implementadores con muchos detalles (propiedades) y comportamiento (métodos), pero en este escenario lo que importa es su capacidad para disparar. Esto es abstracción.
Como hacer un incendio requiere algunos pasos (GetWood, etc.), estos están ocultos de la vista, ya que son una preocupación interna de la clase. El hombre de las cavernas tiene muchos otros comportamientos públicos que pueden ser llamados por el mundo exterior. Pero algunos detalles estarán siempre ocultos porque están relacionados con el trabajo interno. Son privados y existen solo para el objeto, nunca están expuestos. Esto es encapsulación
abstracción de datos: el acceso a miembros de datos y funciones miembro de cualquier clase simplemente se llama abstracción de datos .....
encapsulamiento: variables y funciones de enlace o 1 puede decir que los miembros de datos o las funciones de miembros, todos juntos en una sola unidad, se llaman como encapsulación de datos ....
La abstracción es como usar una computadora.
No tiene absolutamente ninguna idea de lo que está sucediendo más allá de lo que ve con la GUI (interfaz gráfica de usuario) y el hardware externo (por ejemplo, la pantalla). Todos esos bonitos colores y tal. Solo se le presentan los detalles relevantes para usted como consumidor genérico.
La encapsulación es el acto real de ocultar los detalles irrelevantes .
Usas tu computadora, pero no ves a qué se parece su CPU (unidad de procesamiento central) (a menos que intentes forzarla). Está escondido (o encapsulado) detrás de todo ese cromado y plástico.
En el contexto de lenguajes OOP (programación orientada a objetos), generalmente tiene este tipo de configuración:
CLASS {
METHOD {
*the actual code*
}
}
Un ejemplo de "encapsulación" sería tener un MÉTODO que el usuario normal no puede ver (privado). "Abstracción" es el usuario regular que usa el MÉTODO que puede (público) para usar el privado.
Abstracción de datos : DA simplemente filtra el elemento concreto. Por la clase podemos lograr la abstracción pura, porque antes de crear la clase podemos pensar solo en información preocupada sobre la clase.
Encapsulación : es un mecanismo por el cual protegemos nuestros datos desde el exterior.
La abstracción es un proceso en el que solo se muestran datos "relevantes" y se "ocultan" detalles innecesarios de un objeto del usuario. Considere su teléfono móvil, solo necesita saber qué botones se deben presionar para enviar un mensaje o hacer una llamada. Lo que sucede cuando presiona un botón, cómo se envían sus mensajes, cómo se conectan sus llamadas se abstrae de la usuario.
La encapsulación es el proceso de combinar datos y funciones en una sola unidad llamada clase. En Encapsulación, no se accede a los datos directamente; se accede a través de las funciones presentes dentro de la clase. En palabras más simples, los atributos de la clase se mantienen privados y se proporcionan métodos getter y setter públicos para manipular estos atributos. Por lo tanto, la encapsulación hace posible el concepto de ocultación de datos.
La abstracción oculta la información o proporciona solo los detalles necesarios al cliente.
por ejemplo, frenos de automóvil: simplemente sabe que al presionar los pedales se detendrá el vehículo, pero no es necesario que sepa cómo funciona internamente.
Ventaja de la abstracción Mañana, si la implementación del freno cambia del freno de tambor al freno de disco, como cliente, no necesita cambiar (es decir, su código no cambiará)
La encapsulación vincula los datos y los comportamientos en una sola unidad. También es un mecanismo de lenguaje para restringir el acceso a algunos componentes (esto se puede lograr mediante modificadores de acceso como privado, protegido, etc.)
Por ejemplo, la clase tiene atributos (es decir, datos) y comportamientos (es decir, métodos que operan sobre esos datos)
public abstract class Draw {
public abstract void drawShape(); // this is abstraction. Implementation detail need not to be known.
// so we are providing only necessary detail by giving drawShape(); No implementation. Subclass will give detail.
private int type; // this variable cannot be set outside of the class. Because it is private.
// Binding private instance variable with public setter/getter method is encapsulation
public int getType() {
return type;
}
public void setType(int type) { // this is encapsulation. Protecting any value to be set.
if (type >= 0 && type <= 3) {
this.type = type;
} else {
System.out.println("We have four types only. Enter value between 0 to 4");
try {
throw new MyInvalidValueSetException();
} catch (MyInvalidValueSetException e) {
e.printStackTrace();
}
}
}
}
Abstraction
está relacionada con métodos donde no se conoce el detalle de la implementación, que es un tipo de ocultación de la implementación.
Encapsulation
está relacionada con el enlace de variable de instancia con el método, un tipo de ocultación de datos.