Tabla de Contenidos
Encapsulamiento
Es la propiedad que adquiere un objeto cuando este controla sus estados de manera interna y solo por medio de los accesos controlados, evitando que factores externos puedan modificar estos valores de manera deliberada y por fuera de los procedimientos establecidos.
Ejemplos
- Estacionamiento.- Un carro llega a un estacionamiento público, pero se le deniega el acceso por que todos los cajones están ocupados, en el momento que un cajón se libera, se le concede el acceso al carro para entrar al estacionamiento, en este caso mientras todos los cajones estén ocupados no se puede permitir la entrada a mas carros, pero en el momento que un cajón se libera se vuelve a permitir la entrada a mas carros.
- Verificación de Buró de Crédito.- Cuando una persona va a solicitar una tarjeta de crédito, se tiene que verificar su comportamiento ante buró de crédito, si su comportamiento es dudoso, el establecimiento le deniega la apertura del crédito, si es positivo el concede el crédito, en este caso se tiene una dependencia al estatus de una institución ajena y de ser negativo tiene que dejar pasar un tiempo y mantener un historial sano para que el valor de buró de crédito sea positivo, y el establecimiento le pueda emitir la tarjeta en una nueva solicitud.
- Peticiones web.- Comúnmente cuando realizas una petición web, el sistema bloquea la pantalla mientras esta resuelve la petición, una vez que la petición es resuelta, se desbloquea la pantalla para poder seguir trabajando, en este caso el bloqueo de la pantalla es dado por un estado interno que se activa al iniciar una petición y que es desactivado cuando la petición es finalizada.
Aplicación en CSharp
En el siguiente ejemplo veremos como un semaforo afecta al transito de una calle tomando en cuenta que:
- Si el semáforo esta en verde el carro puede avanzar
- Si el semáforo esta en amarillo el carro debe disminuir su velocidad
- Si el semáforo esta en rojo el carro debe detenerse
- El semáforo estará cambiando de color en base al siguiente temporizador:
- El semáforo cambiará de rojo a verde a los 40 segundos
- El semáforo cambiará de verde a amarillo a los 35 segundos
- El semáforo cambiará de amarillo a rojo a los 5 segundos
- Por la calle pasara un carro cada 5 segundos.
- concepto_encapsulamiento.cs
using System; using System.Timers; namespace Capacitacion.Encapsulamiento { public enum ColorSemaforo { Rojo = 0, Amarillo = 1, Verde = 2 } public class Semaforo { private Timer timer; private Timer timerAlerta; private ColorSemaforo color; public ColorSemaforo Color { get { return color; } } public Semaforo() { timer = new Timer(); timer.Interval = TimeSpan.FromSeconds(40).TotalMilliseconds; timer.Elapsed += Timer_Elapsed; timerAlerta = new Timer(); timerAlerta.Interval = TimeSpan.FromSeconds(35).TotalMilliseconds; timerAlerta.Elapsed += TimerAlerta_Elapsed; color = ColorSemaforo.Verde; Console.WriteLine($"El semaforo ha cambiado a {color}"); timer.Start(); timerAlerta.Start(); } private void TimerAlerta_Elapsed(object sender, ElapsedEventArgs e) { timerAlerta.Stop(); color = ColorSemaforo.Amarillo; Console.WriteLine($"El semaforo ha cambiado a {color}"); } private void Timer_Elapsed(object sender, ElapsedEventArgs e) { timer.Stop(); color = Color == ColorSemaforo.Amarillo ? ColorSemaforo.Rojo : ColorSemaforo.Verde; Console.WriteLine($"El semaforo ha cambiado a {color}"); timer.Start(); if (color == ColorSemaforo.Verde) timerAlerta.Start(); } } public class Calle { Semaforo semaforo; Timer timer; public Calle(Semaforo semaforo) { this.semaforo = semaforo; timer = new Timer(); timer.Interval = TimeSpan.FromSeconds(5).TotalMilliseconds; timer.Elapsed += Timer_Elapsed; timer.Start(); } private void Timer_Elapsed(object sender, ElapsedEventArgs e) { var estatus = semaforo.Color == ColorSemaforo.Verde ? "avanza" : semaforo.Color == ColorSemaforo.Amarillo ? "disminuye su velocidad" : "se detiene"; Console.WriteLine($"el carro {estatus}"); } } public class Program { public static void Main(string[] args) { var semaforo = new Semaforo(); var calle = new Calle(semaforo); Console.ReadKey(); } } }