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

Aplicación en CSharp

En el siguiente ejemplo veremos como un semaforo afecta al transito de una calle tomando en cuenta que:

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();
        }
    }
}