Herencia

3/35
Recursos

La herencia en la programación funciona del mismo modo que en la vida real, un padre puede dejar en herencia ciertas características y atributos a sus hijos.

Aprendamos a utilizar la herencia en nuestro código y veamos como una clase hijo puede heredar ciertas características o funciones de la clase padre, también veremos que estas funciones o métodos heredados se pueden sobrescribir.

Al momento de programar nuestras clases padre podemos usar la palabra clave abstract para que dicha clase solamente pueda ser heredada, pero nunca instanciada. Por el contrario, tenemos la palabra clave sealed permite generar instancias de la clase, pero no permite heredarla.

Aportes 40

Preguntas 7

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

Los términos de programación que cuestan tanto trabajo explicar aquí se aclaran de manera fácil. “Una clase abstracta es una idea”.

  • Una clase abstracta (asbtract) puede ser heredada pero no instanciada
  • Una clase sellada (sealed) no puede ser heredada pero si instaciada

¿Cómo aplicarlas?

public abstract/sealed class dummy()
{
	//props and methods
}

Yo hice lo de esta clase en el curso pasado asi que me siento orgulloso de ello.

CLASE OBJECT
La clase Object es la clase raíz de todo el árbol de jerarquía de clases, esto quiere decir que cada vez que vamos a crear una clase, implícitamente vas a **heredar ** los métodos de la clase Object, por eso cuando instanciamos la clases vamos a ver unos métodos que no hemos creado ni en la clase hija no en la clase padre:

Referencia:
https://docs.microsoft.com/en-us/dotnet/api/system.object?view=net-5.0

Gracias, se entiende la esencia del concepto de herencia, pero siendo un poco pragmáticos creo que no es el mejor ejemplo dado a que Escuela no comparte una relación de origen con las clases que está heredando. El razonamiento sería: si yo tengo un objeto BaseEscuela esperaría que los heredaran otros tipos de escuelas personalizadas ejemplo : EscuelaDanza, EscuelaArtesMarciales, EscuelaPrescolar etc.

En éste caso para que el concepto fuera coherente me gustaría llamar a la base:
ObjetoNegocioBase.
Ya que así, siendo más general (abstracto) sé que las propiedades y métodos que puedo concentrar en base comparten comportamientos en común con un objeto de negocio y no con un concepto al que no tienen una relación clara.
Espero haberme dado a entender.

clases abstract: ok-heredar no-instanciar. clases sealed: no-heredar ok-instanciar.

ohhh waw, siempre tuve un miedo por la herencia irracional. Ahora entiendo que era más sencillo de lo que creí. Definitivamente platzi vale la pena.

Tanto que en la universidad me explicaban esto y no entendía, en platzi solo en minutos aprendes algo nuevo.

Clases tipo Sealed y Abstractas Sealed -> No puedo heredar pero si puedo instanciar. Abstract -> Puedo heredar pero no puedo instanciar.

Una clase abstracta se define como una clase que declara la existencia de métodos pero no la implementación de dichos métodos

Una explicación sencilla y muy clara de lo que es una clase abstracta…
Excelente clase…

clases abstractas, se pueden heredar pero no se pueden crear instancias 😃

Excelente explicación

Abstract

Al anteponer la clase con la palabra abstract le decimos que solamente puede ser heredada, pero nunca instanciada.

Sealed

Al anteponer la clase con la palabra sealed le decimos que puede ser instanciada, pero no permita que sea heredada.

Una clase puede **Heredar ** de otra clase “Padre” todo los atributos, métodos y demás contenido dentro de la clase.
La palabra clave sealed se usa para indicar que esa clase no permitirá que herede sus propiedades y métodos a ninguna otra clase pero si se pueda instanciar.
La palabra clave abstract se usa para indicar que esa clase no permitira que se instancie en ninguna otra clase pero si permitirá que se hereden sus propiedades y métodos.

Por fin re-subieron el curso que antecede a este, ahora sí que estoy entendiendo como funciona y me está gustando como explica el profesor. Justo me salió la posibilidad de entrar como trainee con .NET a una empresa, así que me vino genial que hayan solucionado eso que hace unos meses me hizo desistir de continuar la ruta de aprendizaje de .NET. Muchas gracias!

Al fin veo alguna diferencia con Java, la palabra reservada sealedno la conocía hasta éste momento y me parece genial.

  • Herencia : En POO , una clase HIJA puede HEREDAR de su clase PADRE cualquier OBJETO que este tenga. Existen diferentes formas de aplicar la herencia :

    • Puede ser que se elija que va heredar todos los atributos y métodos de mi clase PADRE.

    • Puede ser que se elija pasar todo, excepto un método que quiero que la clase HIJA implemente de acuerdo a su necesidad, es decir solo heredo la estructura de dicho método pero dejo que
      su construcción, su estructura interna lo haga la clase HIJA.(Sobre escritura de métodos).

    • Si solo quiero utilizar una clase para que hereden de ella se debe utilizar un modificador de acceso llamado “abstract”.

    • Si quiero que de una clase solo se pueda realizar instancias de la misma debo utilizar el modificador de acceso llamado " selead".

Dos conceptos que no sabía, abstract y sealed, gracias, buena explicación! 😄

En este caso yo realice el siguiente ejercicio

Clase abstracta

<using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Estudiantes
{
    abstract class Figura
    {
          void CalculcarArea() {
         }

    }
}
>

Yo realice el siguiente ejercicio

<using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Estudiantes
{
    abstract class Figura
    {
          void CalculcarArea() {
         }

    }
}
>

Ahora hereda la clase triangulo

<using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Estudiantes
{
    class Triangulo:Figura
    {
        public void CalculcarArea() {
            Console.WriteLine((2 * 5) / 10);
        }
    }
}
>

Lo implementa el siguiente boton

<using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Estudiantes
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Triangulo triangulo = new Triangulo();
            triangulo.CalculcarArea();
        }
    }
}
>

La herencia permite rescribir el código en la mayoría de caso se utiliza para facilitar, ya que en proyectos complejos es mas fácil heredar de una clase especifica y no saturar de códigos las demás clases del proyecto

Una buena explicación de herencia, bastante clara y muy práctica, también queda muy claro los modificadores de acceso abstract y sealed. (y)

Magnifica explicación, lo que más me gusta es que lo explica de una manera fácil de entender y sin palabras rebuscadas

Muy buena explicación Juank

Modificador de acceso Abstract, es solo una idea solo pra herencia, nadie puede crear objetos de la clase Abstracta. Solo heredan de esa clase

Modificador de acceso Abstract, “es solo una idea” solo pra herencia, nadie puede crear objetos de la clase Abstracta. Solo heredan de esa clase

Modificador de acceso sealed (Sellada) No permite que otras clases Herenden de esta sellada, pero si rear instancias de ella

Para hacerlo más simple, una herencia es como incluir todas las funcionalidades de la clase padre, en sus clases hijos.

Por otro lado, si queremos que la clase solo se pueda heredar y no manejar como objeto, usamos el modificador de acceso “abstract”. Lo inverso se daría con un “sealed”

Buena explicación

Claro, COnciso y veloz … para que mas we :v

el nuevo conocimiento de hoy, clases
Sealed = clases selladas, se pueden crear instancias pero no se pueden heredar

la herencia ayuda pero se tiene que entender como funciona.

Al momento de programar nuestras clases padre podemos usar la palabra clave abstract para que dicha clase solamente pueda ser heredada, pero nunca instanciada. Por el contrario, tenemos la palabra clave sealed permite generar instancias de la clase, pero no permite heredarla.

Aprendamos a utilizar la herencia en nuestro código y veamos como una clase hijo puede heredar ciertas características o funciones de la clase padre, también veremos que estas funciones o métodos heredados se pueden sobrescribir.

Herencia
La herencia en la programación funciona del mismo modo que en la vida real, un padre puede dejar en herencia ciertas características y atributos a sus hijos.

Una pregunta, para evitar que se instancie un objeto con la clase objetoescuelabase no serviria también el static?

Uffff! Juan es el mejor maestro en Platzi jaja, explica muy bien.

Les comparto una breve explicación de este tema.
La herencia funciona de la misma manera que en la vida real, es decir un padrep uede dejar en herencia ciertas características a sus hijos.

Ya trasladando ésto a nuestro código queremos agrupar en una clase los atributos que comparten todas las clases que hemos creado hasta el momento . Para eso creamos la clase ObjetoEscuelaBase.cs

Aquí se añadirán los atributos bases que son los siguientes:

 public string Nombre {get;set;}
        public string UniqueId {get;private set;}
        public ObjetoEscuelaBase()
        {
            UniqueId=Guid.NewGuid().ToString();

        }

Posterior a eso, se procede a cambiar en cada clase creada suprimiendo los atributos ya definidos y heredando de la clase que hemos creado así:

public class Alumno: ObjetoEscuelaBase

Luego de haber hecho esto nos encontramos con dos funcionalidades que nos servirá, ahí como está nuestro código nos permite instanciar la clase que hemos creado, lo cual no está correcto para eso usaremos Abstract
Y qué es Abstract es sólo una idea, que quiere decir que dicha clase sólamente pueda ser heredada pero nunca instanciada.

Dentro de esta misma conceptualización nos encontramos con otro modificador de clase que nos pueda servir este modificador es sealed, que significa clase sellada este modificador nos permite instanciar una clase pero no heredarla

public  sealed class EscuelaEngine

Sealed = Celladas Son clases que no se pueden heredar pero si se pueden instanciar