¡Esta es una revisión vieja del documento!


Herencia

Es la propiedad que adquiere un objeto cuando puede transmitir algunos o todos sus elementos a otros objetos de menor jerarquía o recibir algunos o todos los elementos de otros objetos de mayor jerarquía.

Ejemplos

  • Herencia biológica.- Cuando una persona tiene hijos (descendencia), es común que los hijos adquieran rasgos físicos de los padres tales como el color de piel, el color de ojos, el color de pelo, la complexión, rasgos faciales como el tipo de cejas, mentón, orejas, entre otros, a esto se le llama herencia.
  • Crecimiento empresarial.- Cuando una empresa crece, suelen dividirse departamentos creando otros departamentos nuevos para atender con una mejor especialización y atención ciertas áreas, estas departamentos productos de dichas divisiones suelen heredar algunas funciones del departamento del cual nacieron, y a su vez crear nuevas funciones para enfocar la atención para la cual fueron creadas.
  • .- .

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