Herencia (Informática)

Plantilla:Nomalizar

Herencia (Informática)
Información sobre la plantilla
Herencia.png

Herencia. Es una propiedad que permite que los objetos sean creados a partir de otros ya existentes, obteniendo características (métodos y atributos) similares a los ya existentes.

Qué es Herencia

Es la relación entre una clase general y otra clase mas especifica. Es un mecanismo que nos permite crear clases derivadas a partir de clase base, nos permite compartir automáticamente métodos y datos entre clases subclases y objetos. Por ejemplo: Si declaramos una clase párrafo derivada de un clase texto todos los métodos y variables asociadas con la clase texto son automáticamente heredados por la subclase párrafo. La herencia, junto con la encapsulación y el polimorfismo, es una de las tres características principales (o "pilares") de la programación orientada a objetos. La herencia permite crear nuevas clases que reutilizan, extienden y modifican el comportamiento que se define en otras clases. La clase cuyos miembros se heredan se denomina clase base y la clase que hereda esos miembros se denomina clase derivada.

Tipos de Herencia

  • Herencia Simple
    Herencia Simple: Indica que se pueden definir nuevas clases solamente a partir de una clase inicial
  • Herencia Multiple
    Herencia Multiple: Indica que se pueden definir nuevas clases a partir de dos o más clases iniciales.
  • Herencia de implementación: La implementación de los métodos es heredada. Puede sobreescribirse en las clases derivadas.
  • Herencia de interfaz: Sólo se hereda la interfaz, no hay implementación a nivel de clase base (interfaces en Java, clases abstractas en C++)

Ejemplo

En el ejemplo siguiente se muestra cómo se expresan en C# las relaciones de clase presentadas en la ilustración anterior. En el ejemplo también se muestra cómo WorkItem invalida el método virtual Object.ToString y cómo la clase ChangeRequest hereda la implementación de WorkItem del método. // WorkItem implicitly inherits from Object class public class WorkItem {

   private static int nextID;
   protected int ID { get; set; }
   protected TimeSpan jobLength { get; set; }
   protected string Title { get; set; }
   protected string Description { get; set; }
   // Default constructor
   public WorkItem() 
   {
       ID = 0;
       Title = "Default title";
       Description = "Default description.";
       jobLength = new TimeSpan();
   }
   // Static constructor for static member.
   static WorkItem()
   {
       nextID = 0;
   }
   // Instance constructor.
   public WorkItem( string title, string desc, TimeSpan joblen)
   {
       this.ID = GetNextID();                
       this.Title = title;
       this.Description = desc;
       this.jobLength = joblen;
   }
   protected int GetNextID()
   {
      return ++nextID;
   }
   public void Update(string title, TimeSpan joblen)
   {
       this.Title = title;
       this.jobLength = joblen;
   }

   // Virtual method override.
   public override string ToString()
   {
       return String.Format("{0} - {1}", this.ID, this.Title); 
   }

}

// ChangeRequest derives from WorkItem and adds two of its own members. public class ChangeRequest : WorkItem {

   protected int originalItemID {get; set;}
   public ChangeRequest() { }
   public ChangeRequest(string title, string desc, TimeSpan jobLen, int originalID)
   {
       this.ID = GetNextID();
       this.Title = title;
       this.Description = desc;
       this.jobLength = jobLen;
       this.originalItemID = originalID;
   }

}

class Program {

   static void Main()
   {
       WorkItem item = new WorkItem(                                
                       "Fix Bugs", 
                       "Fix all bugs in my source code branch",
                       new TimeSpan(3, 4, 0, 0));

       ChangeRequest change = new ChangeRequest("Change design of base class",
                                                "Add members to base class",
                                                new TimeSpan(4, 0, 0),
                                                1);

       Console.WriteLine(item.ToString());

       // ChangeRequest inherits WorkItem's override of ToString
       Console.WriteLine(change.ToString()); 

       // Keep the console open in debug mode.
       Console.WriteLine("Press any key to exit.");
       Console.ReadKey();
   }

}

Fuente