¿Qué es la encapsulación en Java, Python y C++?

¿Qué es la encapsulación? En la programación orientada a objetos, este concepto suele entenderse como la conclusión de datos y funcionalidad en un shell.

En este caso, no estamos hablando de ocultar, esto es solo una parte de la encapsulación. Tal caparazón puede ser clases que concentran datos en un solo lugar y lo cierran de influencias externas (de hecho, lo ocultan).

Los programadores novatos a veces se preguntan por qué se usa la encapsulación, sin comprender completamente su valor. Lidiemos con esto.

¿Qué es la encapsulación en OOP?

Para empezar, intentaremos explicar qué es la encapsulación en palabras sencillas. Avancemos mentalmente unos 140 años hacia el pasado.

Entonces los autos todavía eran una maravilla y las primeras muestras de los vehículos con motores de vapor causaron muchos comentarios críticos.

Fueron llamados monstruos ruidosos que contaminan el aire y asustaban a los caballos.

La persona que conducía un automóvil de este tipo necesitaba comprender claramente cómo funciona todo, controlar cuidadosamente la temperatura, la presencia del volumen de agua requerido y arrojar carbón regularmente para un mayor movimiento.

En lugar de una simple dirección, esos vehículos tenían dos palancas, cada una de las cuales giraba una rueda: Está claro que el conducir el primer coche no era nada fácil.

La evolución de la industria automotriz ha cambiado no solo la apariencia del automóvil, sino también su equipamiento. Ya estamos acostumbrados a los servofrenos, las transmisiones automáticas y otros componentes que han hecho que la conducción sea cómoda y fácil.

La bomba de combustible, el sistema de pistón, el mecanismo de distribución de gas y otros elementos de la unidad de potencia aseguran que el movimiento del automóvil ahora sea responsable de la entrega oportuna de gasolina a las cámaras de combustión.

El funcionamiento de todos los detalles está oculto para el conductor, quien simplemente presiona el acelerador y puede no tener idea de lo que está sucediendo con el inyector o el acelerador en ese momento. Esto es de hecho un progreso tangible.

Debido al hecho de que todos los procesos que ocurren dentro de los componentes del automóvil están ocultos, conducir un vehículo es una tarea bastante simple.

No es necesario ser ingeniero o mecánico experimentado para manejarlo. ¿Por qué consideramos la historia del automóvil? Ocultar todo lo que sucede dentro de los mecanismos es encapsulamiento. Este término se utiliza en una amplia variedad de campos.

Entendamos qué es la encapsulación en programación, en este caso, estamos hablando de una propiedad del sistema que te permite combinar datos y métodos que funcionan con ellos en una clase y ocultar los detalles.

Este concepto está estrechamente relacionado con la interfaz de una clase. Casi todos los elementos que no están incluidos en la interfaz están sujetos a la encapsulación en una clase.

Beneficios de la encapsulación

¿Qué es la encapsulación y por qué es tan importante? Tomemos como ejemplo el código de un proyecto a gran escala, que pesa varias gigas. Todo en él puede estar fuertemente interconectado.

Ahora la pregunta es: ¿Será posible analizar tal código? Imagina que existe tal posibilidad, pero aparentemente el nivel de estabilidad dependerá de la conversión de cada uno de los métodos disponibles, que en este caso se reducirá.

La programación orientada a objetos tiene como objetivo proyectar la realidad en el código. Entonces, en el mundo ordinario, el agua que se llena con un vaso no puede penetrar las paredes.

La tecla del teclado no estará involucrada en los cálculos y el cerebro humano no ayudará al corazón bombeando sangre.

También puedes considerar la cuestión de qué es la encapsulación en las redes de la misma manera. Su principio es ocultar conexiones, es decir, permite no mezclar contenidos.

La encapsulación es la selección de elementos individuales y permite colocar grandes cantidades de código en un repositorio separado. “Divide y vencerás”: Esta sabiduría, conocida desde la antigüedad, también es aplicable en el ámbito digital. La encapsulación es capaz de asegurar contra el mal funcionamiento. Así, si se rompe una tecla del teclado (es un código encapsulado), el ordenador no dejará de funcionar.

El número de enlaces abiertos entre el objeto X y otros elementos mide la facilidad del código. Dados los numerosos entretejidos internos, podemos hablar de la complejidad de la percepción.

Ni siquiera será tan fácil dotar al objeto X de un nombre objetivo, porque incluye muchos datos diferentes sobre sí mismo.

No son solo los comandos privados y protegidos los que se encapsulan. Puedes sentirte libre de crear algoritmos de cuatro niveles dentro de un método de clase, porque encapsula el algoritmo y las variables en sí mismo.

Al leer un algoritmo difuso, un programador que necesita una clase prestará atención al contenido del método, no a su nombre. Eso también es encapsulamiento, se pone en acción el principio de ocultamiento.

Al programador no le importa lo que hay dentro, pero imagina cómo interactúa todo.

Lo mismo se aplica a las funciones de cierre que están diseñadas para aislar un algoritmo con variables.

En otras palabras, el funcionamiento también tiene que ver con la encapsulación, porque las variables están dentro de la función y el algoritmo que las usa no molesta a quien lo usa.

Vale la pena señalar que hoy en día, en la programación, se encapsulan más funciones que una palabra clave en las clases. Esos ejemplos son muy comunes en JavaScript.

La diferencia entre encapsular y ocultar

Ahora hablemos de qué es la encapsulación de datos y en qué se diferencia de la ocultación.

A menudo tenemos que usar mecanismos complejos sin darnos cuenta del principio de su estructura y en qué se basa su acción. Esto se debe a que los desarrolladores han formado una interfaz fácil y práctica.

Considera algunos de estos ejemplos que te ayuden a comprender qué es la encapsulación.

La máquina de café incluye una interfaz simple: Estas son las teclas que se encuentran en el panel para seleccionar una bebida, su volumen y la cantidad de azúcar. Este es todo lo que debemos saber para usarlo.

Para nosotros, lo principal es comprender cómo obtener la bebida adecuada presionando algunas teclas y no importa cómo esté dispuesta la máquina por dentro.

Ese es el punto de esconderse, se utiliza para ocultar al usuario la estructura interna del programa.

Encapsulación en Java

En Java, usamos una variedad de técnicas que proporcionan el principio de encapsulación, ¿De qué manera se lleva esto a cabo?

Existen métodos para regular el acceso a la información disponible, que incluyen:

  • Palabras clave de acceso (modificadores de acceso).
  • Getters y Setters.

Los modificadores de acceso

son palabras específicas que definen quién está o no disponible para usar los datos.

Hay varios modificadores de acceso básicos:

  • Public – “público, disponible para todos”.
  • Default – “por defecto”. Este es el valor predeterminado en ausencia de un modificador de acceso. La información con esta palabra está disponible en el paquete.
  • Protected – “protegido”. Es similar al predeterminado, pero se diferencia en que las clases descendientes también tienen acceso.
  • Private – “privado, personal”. Esta información solo es visible para la clase misma.

¿Cómo se garantiza el principio de seguridad? Es posible cambiar fácilmente esta variable y cadena.

Si no lo necesitamos, cambiamos el modificador de público a privado:

class MyClass {
private String s = «Hello World!»;
}
1
2
3
class MyClass {
private String s = «Hello World!»;
}

En este caso, un intento de acceder a la variable s (lectura o escritura) resultará en un error. De esta manera, logramos asegurar la variable de los malhechores.

Lo más importante es que logremos controlar lo que está pasando. Ahora nadie tiene la capacidad de cambiar o leer nuestras variables.

Encapsulación en Python

El sistema Python proporciona acceso a los datos en tres niveles:

  • Public (público, sin sintaxis especial, publicBase);
  • Protected (protegido, resaltado por un solo guión bajo en la parte inicial del nombre, protectedBase).
  • Private (privado, resaltado por un doble guión bajo en la parte inicial del nombre, privateBase).

El programa principal proporciona acceso a variables y métodos públicos. Fallará si se intenta obtener datos privados o ejecutar un método privado.

La encapsulación se puede evitar usando un lenguaje que le dé al programador una herramienta sintáctica.

Esta es la salida misma, en la que están disponibles la lectura y la capacidad de cambiar variables privadas, y también puede llamar a funciones privadas.

Los métodos mágicos, también conocidos como métodos especiales, brindan a las clases la capacidad de establecer su propio comportamiento en relación con los idiomas de operador subyacentes.

Entre estos lenguajes de operadores, se puede destacar una expresión de la forma:

  • x > y
  • x[i]

Python admite muchos de estos métodos. Se puede encontrar una lista completa en la página de documentación oficial del idioma.

El inicializador init es el más utilizado y se ejecuta cuando se crea un nuevo objeto de clase.

El otro, lt (comparación extendida), define reglas para comparar dos objetos de una clase personalizada. Dichos métodos no entran en la categoría de “privado” o “público” porque sirven para otros propósitos y están profundamente arraigados en la estructura interna del lenguaje.

#!/usr/bin/python3
class Phone:
def __init__(self, number): # magic method / inititalizer
print( «The Phone object was created» )
self.number = number
def __lt__(self, other): # magic method / rich comparison
return self.number < other.number
my_phone = Phone(20)
other_phone = Phone(30)
if my_phone < other_phone:
print( «Two instances of custom class were compared» )
print( «‘__lt__’ was called implicitly» )
if my_phone.__lt__(other_phone):
print( «Now, ‘__lt__’ was used explicitly» )
input( «Press Enter to exit» )

Cada usuario puede llamar a los métodos mágicos de la misma manera que cualquier método público en Python. Están diseñados para ser utilizados implícitamente en situaciones específicas. Un caso especial para init es cuando se inicializa un nuevo objeto de clase. Mientras que el método lt está destinado al análisis comparativo de un par de objetos.

Esto no quiere decir que el lenguaje de programación Python proporcione acceso restringido a ciertas variables o métodos de clase. Puede leer y cambiar los datos que deben estar ocultos. La encapsulación en “Python” se puede llamar relativa, y el programador debe monitorear la preservación del código.

Características de encapsulación en C++

Inicialmente, se acepta que los datos y métodos son privados en una clase (clase), y el acceso para leerlos y cambiarlos está presente solo para la clase a la que pertenecen. El grado de acceso se puede convertir mediante palabras clave apropiadas proporcionadas por C++.

C++ proporciona una serie de especificadores que transforman el acceso a los datos de la siguiente manera:

  • datos públicos (públicos);
  • protected (protegido), al que solo se tiene acceso para la clase y las clases secundarias;
  • privado (privado): el acceso es solo para la clase a la que pertenecen.

He aquí un ejemplo de encapsulación: En la clase Contacto, las variables y métodos públicos están disponibles desde el programa principal (main). Las variables y métodos privados solo pueden ser leídos, llamados y modificados por la propia clase.

#include <iostream>
using namespace std;
class Contact
{
private:
int mobile_number; // private variable
int home_number; // private variable
public:
Contact() // constructor
{
mobile_number = 12345678;
home_number = 87654321;
}
void print_numbers()
{
cout << «Mobile number: » << mobile_number;
cout << «, home number: » << home_number << endl;
}
};
int main()
{
Contact Tony;
Tony.print_numbers();
// cout << Tony.mobile_number << endl;
// will cause compile time error
return 0;
}

Puede ocurrir una falla de compilación si intenta imprimir o convertir la variable privada mobile_number desde el programa principal (main), ya que la clase tiene acceso limitado a los datos privados.

C++ incluye la palabra clave “amigo”, que ofrece la posibilidad de establecer excepciones adicionales a las condiciones básicas de acceso a los datos. Cuando una función o clase se nombra “amiga” de la clase Contacto, se le otorga acceso libre a los miembros protegidos o privados.

Se establecen dos condiciones de la amistad: no es heredada y no mutua. Además, el grado de seguridad de los datos no depende de los “amigos” existentes y, por lo tanto, los datos privados son tales con la excepción de un “amigo”.

#include <iostream>
using namespace std;
class Contact
{
private:
int mobile_number; // private variable
int home_number; // private variable
public:
Contact() // constructor
{
mobile_number = 12345678;
home_number = 87654321;
}
// Declaring a global ‘friend’ function
friend void print_numbers( Contact some_contact );
};
void print_numbers( Contact some_contact )
{
cout << «Mobile number: » << some_contact.mobile_number;
cout << «, home number: » << some_contact.home_number << endl;
}
int main()
{
Contact Tony;
print_numbers(Tony);
return 0;
}

Aquí print_numbers() es una función estándar, no un método de la clase Contact. Su acceso a las variables privadas lo proporciona la declaración de que la función print_numbers() actúa como un “amigo” de la clase Contact. El código no se compilará si no hay una cadena que defina “amigo”.

El lenguaje C++ heredó muchas herramientas de su predecesor, C. Entre ellos está el encasillamiento. Por supuesto, todas las variables y métodos de una clase se consideran privados. Al mismo tiempo, el acceso estándar a los elementos de la estructura (struct) está abierto. es publico

En este caso, es posible formar una estructura y una clase pública que contendrá un conjunto de datos ubicado de la misma manera que en la clase Contacto. A continuación, se puede acceder a los datos privados mediante un método de conversión de tipo.

Se pueden encontrar ejemplos del uso de la encapsulación no solo en lenguajes orientados a objetos. Los sistemas OOP modernos brindan la máxima comodidad y naturalidad de este método. Hay muchas formas de romper la encapsulación, pero evitar métodos sin escrúpulos te permitirá usarlo en el futuro en lenguajes C o C++.

Relacionado

Vulture: Encuentra el código muerto en Python

Vulture encuentra código no utilizado dentro de código creado con Python. Esto es útil para limpiar y encontrar errores en bases de código grandes. Debido a la naturaleza dinámica de Python, es probable que los analizadores de código estático como Vulture no detecten algún código muerto. Además, el código que solo se llama implícitamente puede ser notificado como código no utilizado. No obstante, Vulture puede ser ¡SEGUIR LEYENDO!

Volver a lo básico: Introducción a Tomcat

Apache Tomcat es un contenedor de servlets de Java que existe desde hace mucho tiempo. Es de código abierto e implementa las especificaciones básicas de Java Enterprise (ahora llamada Jakarta EE) como las especificaciones Jakarta Servlet, Jakarta Server Pages y Jakarta WebSocket. https://ciberninjas.com/java-sigue-siendo-popular/ Apache Software Foundation lanzó Tomcat por primera vez en 1998, solo cuatro años después de Java. https://ciberninjas.com/java-editores/ Tomcat comenzó como la implementación de ¡SEGUIR LEYENDO!

Volver a lo básico: Introducción a JDK

JRE y JDK son frecuentemente malentendidos por los más novatos. Si solo estás interesado en ejecutar aplicaciones Java en tu computadora, puedes hacerlo fácilmente con Java Runtime Environment. Sin embargo, si deseas construir un programa de software basado en Java, es posible que necesites otras herramientas denominadas JDK, además de JRE. Los desarrolladores que recién están comenzando con Java a menudo confunden el Kit de desarrollo ¡SEGUIR LEYENDO!

Vidgear: Librería de Python para el procesamiento de vídeo

VidGear es una poderosa biblioteca de procesamiento de video en Python construida con Gears de subprocesos múltiples, cada uno con un conjunto único de características innovadoras. Estas API proporcionan un contenedor fácil de usar, altamente extensible y multihilo alrededor de muchas bibliotecas subyacentes de última generación como OpenCV ➶, FFmpeg ➶, picamera ➶, pafy ➶, pyzmq ➶ y python-mss ➶. El siguiente diagrama de bloques funcional ¡SEGUIR LEYENDO!

Uscrapper: Raspador web OSINT de recopilación de datos personales

Presentamos Uscrapper 2.0, un potente webscrapper OSINT que permite a los usuarios extraer diversa información personal de un sitio web. Aprovecha técnicas de raspado web y expresiones regulares para extraer direcciones de correo electrónico, enlaces de redes sociales, nombres de autores, ubicaciones geográficas, números de teléfono y nombres de usuario de fuentes con y sin hipervínculos en la página web, admite subprocesos múltiples para acelerar este ¡SEGUIR LEYENDO!

Deja un comentario