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.
  • Esquema de seguridad de usuarios y grupos.- En algunos sistemas se tienen grupos definidos, estos grupos tienen diferentes permisos sobre acciones y/o accesos en el sistema, un usuario es ingresado como miembro a uno mas grupos, el usuario puede tener definidos diferentes permisos, el usuario hereda los permisos del grupo al pertenecer a el, por lo tanto una vez que el usuario quiere ser validado, se validan tanto sus permisos como los permisos de los grupos a los que pertenece.

Aplicación en CSharp

En el siguiente ejemplo veremos como es aplicada la herencia en un ejemplo de personas y profesiones donde tendremos:

  • Una persona la cual tiene como propiedades Edad, Sexo y Nombre,
  • Un bombero el cual tiene como propiedades Escuadrón, Numero y como acción tiene Apagar Incendio.
  • Un doctor el cual tiene como propiedad Cédula y como acción tienen Consultar.
    • Un cirujano es una especialidad del doctor el cual tiene como propiedad el tipo de cirujano que es y como acción Operar.
concepto_herencia.cs
using System;
 
namespace Capacitacion.Herencia
{
    public class Persona
    {
        public int Edad { get; set; }
        public char Sexo { get; set; }
        public string Nombre { get; set; }
 
        public override string ToString()
        {
            var sb = new System.Text.StringBuilder();
            sb.AppendLine($"Nombre: {Nombre}");
            sb.AppendLine($"Sexo:   {Sexo}");
            sb.AppendLine($"Edad:   {Edad}");
            return sb.ToString();
        }
 
    }
 
    public class Bombero: Persona
    {
        public Bombero(Persona persona)
        {
            this.Nombre = persona.Nombre;
            this.Sexo = persona.Sexo;
            this.Edad = persona.Edad;
        }
        public string Escuadron { get; set; }
        public int Numero { get; set; }
        public void ApagarIncendio()
        {
            Console.WriteLine("Apagando Incendio");
        }
 
        public override string ToString()
        {
            var sb = new System.Text.StringBuilder();
            sb.Append(base.ToString());
            sb.AppendLine("Profesion:  Bombero");
            sb.AppendLine($"Escuadron: {Escuadron}");
            sb.AppendLine($"Numero:    {Numero}");
            return sb.ToString();
        }
    }
 
    public class Doctor : Persona
    {
        public Doctor(Persona persona)
        {
            this.Nombre = persona.Nombre;
            this.Sexo = persona.Sexo;
            this.Edad = persona.Edad;
        }
        public string Cedula { get; set; }
        public void Consultar()
        {
            Console.WriteLine("Consultando al paciente");
        }
        public override string ToString()
        {
            var sb = new System.Text.StringBuilder();
            sb.Append(base.ToString());
            sb.AppendLine("Profesion:  Doctor");
            sb.AppendLine($"Cedula:    {Cedula}");
            return sb.ToString();
        }
    }
 
    public class Cirujano : Doctor
    {
        public Cirujano(Doctor doctor) : base(doctor)
        {
            this.Cedula = doctor.Cedula;
        }
        public string Tipo { get; set; }
        public void Operar()
        {
            Console.WriteLine("Operando al paciente");
        }
        public override string ToString()
        {
            var sb = new System.Text.StringBuilder();
            sb.Append(base.ToString());
            sb.AppendLine($"Especialidad: {Tipo}");
            return sb.ToString();
        }
    }
 
    public class Program
    {
        public static void Main(string[] args)
        {
            var persona = new Persona() { Edad = 19, Nombre = "Cesar", Sexo = 'H' };
            Console.WriteLine(persona);
 
            var doctor = new Doctor(persona);
            doctor.Cedula = "ABC1233";
            Console.Write(doctor);
            doctor.Consultar();
            Console.WriteLine();
 
            var cirujano = new Cirujano(doctor);
            cirujano.Tipo = "Ginecologia";
            Console.Write(cirujano);
            cirujano.Consultar();
            cirujano.Operar();
            Console.WriteLine();
 
            var bombero = new Bombero(persona);
            bombero.Escuadron = "L501";
            bombero.Numero = 669;
            Console.Write(bombero);
            bombero.ApagarIncendio();
 
            Console.ReadLine();
        }
    }
}