¿Qué es el encapsulamiento en la programación orientada a objetos?
El encapsulamiento es uno de los pilares fundamentales de la programación orientada a objetos. Se trata de proteger y organizar los datos y métodos de los objetos, limitando el acceso a sus atributos y propiedades. Imagina un banco: los clientes no deben tener acceso directo a su dinero sin pasar por un filtro de seguridad. Del mismo modo, el encapsulamiento actúa como un guardián que asegura que la interacción con los objetos se realice de manera controlada y segura.
¿Por qué es importante el encapsulamiento?
Protección de datos: Al encapsular, protegemos los datos sensibles de cambios no autorizados.
Prevención de errores: El encapsulamiento permite verificar las operaciones realizadas en un objeto, asegurándote de que se efectúen correctamente.
Modularidad: Hace que las clases sean más modulares y fáciles de gestionar.
Facilita el mantenimiento: Si la implementación interna cambia, las interacciones externas no se ven afectadas, lo que también mejora la escalabilidad.
¿Cómo se implementa el encapsulamiento en JavaScript?
En JavaScript, realmente no existen atributos y métodos completamente privados. Sin embargo, hay ciertas técnicas que podemos utilizar para aproximarnos al encapsulamiento:
Getters y setters
Son métodos especiales que permiten controlar el acceso a los atributos de un objeto. Aunque todos los atributos en JavaScript son públicos, los getters y setters permiten manipular cómo se accede y se modifica un atributo, añadiendo una capa de control.
classBanco{constructor(){this._saldo=0;}getsaldo(){returnthis._saldo;}setsaldo(valor){if(valor >=0){this._saldo= valor;}else{console.log("El saldo no puede ser negativo.");}}}let cuenta =newBanco();cuenta.saldo=1000;// Usa el setterconsole.log(cuenta.saldo);// Usa el getter: 1000
Namespaces y el patrón módulo
Utilizando namespaces y el patrón módulo, fragmentamos funcionalidades en diferentes módulos. Esto facilita la protección y mantenimiento de las funciones y variables dentro de un mismo contexto.
Uso de Object.defineProperty()
Esta es una técnica avanzada que nos permite definir propiedades en un objeto con configuraciones precisas, como definir si una propiedad es enumerable, configurable o incluso si es posible modificarla.
const objeto ={};Object.defineProperty(objeto,'propiedad',{value:100,writable:false,// No puede ser alteradaenumerable:true,configurable:false});
Módulos de ECMAScript 6
Los módulos en ECMAScript 6 permiten dividir el código en archivos separados y controlar qué partes de nuestro código están disponibles para ser importadas por otras partes. Esto ayuda a encapsular funcionalidad y mantener el código organizado y aislado.
¿Cuáles son las limitaciones del encapsulamiento en JavaScript?
Visibilidad pública: Todas las propiedades en JavaScript son públicas por defecto.
Necesidad de técnicas avanzadas: Lograr un encapsulamiento más cercano al concepto clásico de POO requiere un conocimiento más profundo de técnicas avanzadas y puede complejizar el código.
Exposición a la manipulación del prototipo: A pesar de las técnicas mencionadas, los prototipos en JavaScript siguen siendo manipulables, lo que puede complicar el encapsulamiento auténtico.
A pesar de estas limitaciones, las estrategias que hemos abordado ofrecen formas efectivas de acercarnos al encapsulamiento en el entorno flexible y dinámico de JavaScript. Si estás motivado para seguir aprendiendo, sigue investigando y aplicando estas técnicas para dominar mejor la gestión de datos seguros en tus aplicaciones.
Encapsulamiento en JavaScript: Uso de Getters y Setters
¿Qué es encapsulamiento?
Es guardar, proteger, guardar o limitar el acceso de cierto atributos y/o propiedades en nuestros prototipos y objetos.
Cuando hablamos de **encapsulamiento **hablamos de:
Esconder métodos y atributos 👻
No permitir la alteración de métodos y atributos ❌
++Encapsulamiento en JavaScript++
No permitir la alteración de métodos y atributos ❌
Formas de aplicar encapsulamiento en JavaScript
Getters y setters 🖐
Namespaces 🙂
Object.defineProperties 🎈
Módulo de ES6 🤝
Good summary, thank you.
Excelente aportación.
Encapsulación
La encapsulación es el empaquetamiento de datos y funciones en un componente (por ejemplo, una clase) y para luego controlar el acceso a ese componente para hacer un ejecto de "caja negra" fuera del objeto. Debido a esto, un usuario de esa clase solo necesita conocer su interfaz (es decir, los datos y las funciones expuestas fuera de la clase), no la implementación oculta.
Gracias!
Excelente mini-resumen :)
eso es para Java si no me equivoco
¿QUÉ ES ENCAPSULAMIENTO?
·
Es la forma de proteger, encapsular, guardar, limitar, esconder el acceso de ciertos atributos y propiedades de nuestros objetos.
Esto nos permite crear métodos y atributos privados. Solamente los métodos y atributos que se encuentren dentro de la clase podrán acceder a estos datos privados.
Así, nosotros podemos prevenir la sobreescritura o alteración de métodos y atributos, de las clases, de los objetos, o los prototipos incluso, o sea las instancias creadas.
·
Pero… en JavaScript, el encapsulamiento no es tan posible. Porque en JS todo es público. Y aunque nos lo puede permitir, debemos tener un dominio más profundo del prototipo Object para lograrlo… otros métodos son usando getters & setters, Namespaces, Object.defineProperties, módulos de ES6.
Primera vez que veo un curso de POO de js superbuenísimo!
Hola Carlos y si lo ves con Typescript esta mucho mejor porque puedes agrgar muchas mas funcionalidades como las interfases.
Gracias @rvaldez20_cbx casualmente hace días terminé la trilogía de cursos de TypeScript, es mucho más buenísimo!
En términos de POO, la delimitación de la interfaz interna de la externa se llama encapsulamiento.
Ejemplo:
Protección para los usuarios, para que no se disparen en el pie: Imagínese, hay un equipo de desarrolladores que usan una máquina de café. Fue hecho por la compañía “Best CoffeeMachine” y funciona bien, pero se quitó una cubierta protectora. Entonces la interfaz interna está expuesta.
1. Soportable
Si delimitamos estrictamente la interfaz interna, el desarrollador de la clase puede cambiar libremente sus propiedades y métodos internos, incluso sin informar a los usuarios.
2. Ocultando complejidad
Siempre es conveniente cuando los detalles de implementación están ocultos, y hay disponible una interfaz externa simple y bien documentada.
Y esto nos lleva a otros conceptos tales como las propiedades privadas y publicas
💊 Qué es encapsulamiento
Apuntes
El encapsulamiento es crear una intersección, la cual se encargará de administrar, verificar la acciones que se realicen entre nuestra interfaz y el usuario
Se encarga de guardar, proteger, guardar o limitar el acceso de ciertos atributos y/o propiedades en nuestros prototipos y objeto
Las características de encapsulamiento son:
Esconder métodos y atributos
Solo lo que está dentro de nuestra clase podrá acceder a dichos métodos o propiedades, es decir que externamente no se podrá acceder
No permitir la alteración de métodos y atributos
Desde afuera podemos alterar o sobreescribir los comportamientos de instancias o prototipos
Encapsulamiento en JavaScript
Cuando hablamos de esconder métodos y atributos en JavaScript, no es posible debido a que todo en JS es público
Existen formas de encapsular en JS:
Getters y setters
Namespaces
Object.defineProperties
Módulos de ES6
📌 **RESUMEN:** El encapsulamiento es uno de los pilares de la programación orientada a objetos, este sé encargar de guardar, proteger y limitar acceso ya sea a atributos o métodos. Sus características son de esconder y no permitir la alteración de métodos y propiedades.
Otro método de encapsulamientos en la POO con JavaScript podrían ser también los Closures?
Pienso que no es del todo correcto decir eso pero tienes razón. SI bien es correcta tu apreciación de que los closures son muy similares al encapsulamiento en POO, pero nada tienen que ver con POO. Los closures es más programación funcional.
Pero si no nos ponemos tan técnicos y estrictos. Si son lo mismo.
Saludos!
Saludos Kevin.
Disculpame pero, no entendí muy bien. ¿Por qué los closures se relacionarían con un paradigma en específico? Es decir, los closures son algo que existe globalmente dentro del lenguaje (y creo que en cualquier lenguaje de programación) y es un modo en el que podemos evitar que ciertos tipos de datos sean modificados desde afuera que es justamente lo que también hacen los módulos de ES6, getter y setters, etc.
Recién comienzo en este mundo así que disculpa si es una pregunta obvia jajaja
Con esto de encapsular. Me viene a la mente el juego Habbo Hotel:
Ciertos usuarios podrían usar métodos y atributos de algunas salas. O sea, podían dejar pasar a otros players, poner música, entrar a ciertos cuartos o funciones de la casa....
Los demás solo podían ver o simplemente no saber nada de lo que pasaba.
El encapsulamiento de datos previene que el desarrollador haga cambios inesperados al sistema, como también ocultar la información para que no pueda ser modificada o vista por otras clases y esto es muy útil pero además fácil de hacer, como aprenderemos en la lección de hoy.
¿Cómo accedemos a dicha información de forma segura? En el desarrollo de esta clase van a explicarte cómo podemos modificar de forma segura las propiedades (o variables) de una clase y cómo podemos presentar dicha información al usuario de una forma correcta con el uso de métodos conocidos como Setters y Getters.
La abstracción es la habilidad de ignorar los detalles de las partes para enfocar la atención
en un nivel más alto de un problema.
El encapsulamiento sucede cuando algo es envuelto en una capa protectora. Cuando el
encapsulamiento se aplica a los objetos, significa que los datos del objeto están protegidos,
“ocultos” dentro del objeto. Con los datos ocultos, ¿cómo puede el resto del programa
acceder a ellos? (El acceso a los datos de un objeto se refiere a leerlos o modificarlos.) El
resto del programa no puede acceder de manera directa a los datos de un objeto; lo tiene
que hacer con ayuda de los métodos del objeto.
En el supuesto de que los métodos de un objeto estén bien escritos, los métodos aseguran
que se pueda acceder a los datos de manera adecuada. Al hecho de empaquetar o proteger
los datos o atributos con los métodos se denomina encapsulamiento.
Encapsulamiento : Este se considera el mecanismo de unir los datos y ocultarlos del mundo exterior. Esto se debe a que nosotros como programadores no permitimos que los datos fluyan libremente dentro del sistema. El proposito de encapsulamiento de lo que he estudiado son al menos los siguientes:
Poner resticciones en su lugar para que no se pueda acceder directamente a los componentes de un objeto.
Vincular los datos con metodos que actuarán sobre esos datos formando una cápsula.
Viendo este criterio se puede observar al encapsulamiento como metodos que nos sirven como la interfaz entre el objeto y el mundo exterior.
📌 El Encapsulamiento se refiere al ocultamiento o limitación de propiedades de un prototipo, al ocultar o no permitir la alteración de algunos de sus métodos y atributos
Se utiliza para ocultar el objeto del exterior. Este aislamiento hace que los datos (propiedades) del objeto sólo puedan gestionarse con las operaciones (métodos) definidos en ese objeto. Se decía que JavaScript no podía ocultar y/o encapsular datos porque los objetos no podían tener variables y métodos privados como sucede Java y otros lenguajes. Douglas Crockford fue uno de los que echó abajo este mito tal como expone en el documento del año 2001 Private members in JavaScript, lo cual se consigue precisamente con el efecto closure. Por otro lado JavaScript no tiene clases como Java, pero se simulan con funciones que hacen las veces de constructores.
son cosas mias o el encapsulamiento no es nada mas y nada menos que un closure?
Los closures son una forma chida de hacer encapsulamiento (aunque no son la única). :wink:
Juan buen dia, queria darte las gracias porque explicas super bien la verdad que uno comprende muy bien coo explicas aunque en mi humilde opinion el taller de matematicas y taller de video juegos deberia ir despues de haber estudiados POO y arrays porque ahi en ese curso jejej uno ve tanta cosa que queda mas perdido que la mama del chavo pero muchisimas Gracias explicas 1A
Uno de los objetivos más importantes de la Programación Orientada a Objetos, el cuál es poder proteger y ocultar información, a dicho proceso se le denomina encapsulamiento.
Wow no puedo esperar por aprender namespaces y Object.defineProperties, el otro curso al parecer estará demasiado bueno