Los términos de programación que cuestan tanto trabajo explicar aquí se aclaran de manera fácil. “Una clase abstracta es una idea”.
Introducción
Todo lo que aprenderás sobre C#
Etapa 5 – POO reutilicemos nuestro código
Reutilizando nuestro Código
Herencia
Polimorfismo
Problemas del polimorfismo
Lista de Objetos polimórfica
Utilizando ToString para mejorar la depuración
Etapa 6- Ajustes y funcionalidad
Implementación de interfaces
Uso de interfaces
Creación y uso de regiones
Etapa 7 – Preparando información para nuestros reportes
Parámetros de salida
Probando funcionalidades de parámetros de salida
Sobrecargas de métodos
Listas de solo Lectura
Diccionario Polimórfico
Implementación de un diccionario
Uso de numeraciones en diccionario
Introduciendo datos en un diccionario
Recorrido de datos en diccionario
Impresión de objetos de un diccionario
Uso de la sentencia switch
Eventos
Recapitulemos
Etapa 8 – Consultas
Creación del reporteador
Extrayendo datos de un diccionario de manera segura
Aprendiendo linq
Sentencia where de linq
Divide y triunfarás
Agrupamientos en linq
Tipos anónimos en consultas linq
Segundo Reto
Etapa 9 – Creando una UI de Consola
Excepciones y cascadeo de excepciones
Sentencia finally
Reto final
Cierre del curso
Crea una cuenta o inicia sesión
¡Continúa aprendiendo sin ningún costo! Únete y comienza a potenciar tu carrera
Juan Carlos Ruiz
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 48
Preguntas 7
Los términos de programación que cuestan tanto trabajo explicar aquí se aclaran de manera fácil. “Una clase abstracta es una idea”.
¿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.
clases abstract: ok-heredar no-instanciar. clases sealed: no-heredar ok-instanciar.
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.
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".
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.
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.
Clases tipo Sealed y Abstractas Sealed -> No puedo heredar pero si puedo instanciar. Abstract -> Puedo heredar pero no puedo instanciar.
Tanto que en la universidad me explicaban esto y no entendía, en platzi solo en minutos aprendes algo nuevo.
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.
La clase ObjetoEscuelaBase, se debería llamar solo EscuelaBase, pues con la palabra Objeto confunde el concepto, una clase no es un objeto.
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
Una Explicacion muy practica y entendible,
La palabra clave sealed (sellada) en una clase evita que sea heredada, es similar a final en otros lenguajes.
La palabra clave abstract en una clase evita que sea instanciada pero si heradada. Esto es util para reutilizar código asegurando su uso.
El comando Console.Beep no está disponible en MAC. se debe agregar controlar con bloques try/catch para evitar errores
La nomenclatura para heredar clases en C# es, con dos punto, asi: clase hija:padre {}
Documentación sobre lo visto en esta clase: https://docs.microsoft.com/es-es/dotnet/csharp/programming-guide/classes-and-structs/abstract-and-sealed-classes-and-class-members
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 sealed
no la conocía hasta éste momento y me parece genial.
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”
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
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
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?