No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Diferencias entre Clases Abstractas e Interfaces en C#

19/19
Recursos

Nombre del curso: Curso de Programación Orientada a Objetos con C#

Profesor: Miguel Teheran

Dirección: Oscar Barajas

Producción OPS: Lizeth Cáceres y Rocío Martínez

Creación audiovisual: Amelia Amórtegui

Edición de video: Pedro Luis Mendoza

Postproducción de audio: Juan Leon

Diseño gráfico: Amelia Amórtegui

Coordinación General: Andrés Arizmendy, Daniel Gutiérrez, Carol Baquero y Sura Cedeño

Revisión: Belman Marin

Aportes 21

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Faltó otra característica de las clases abstractas, estas clases no se pueden instanciar, además se puede usar la mayoría de las veces como clases padre muy generales.

carambolas, este curso debio salir hace un par de años atras.
genial Miguel como siempre, mil gracias.

Ame este curso, me quedo en claro algunos conceptos que me pasaron de noche en la uni

Me he quedado muy sorprendido por el gran parecido que tiene este tema con el lenguaje de programación java, básicamente cambia la sintaxis pero la lógica es bastante parecida.

Aporte Las interfaces y las clases abstractas son dos conceptos fundamentales en la programación orientada a objetos que comparten algunas similitudes, pero también tienen diferencias clave. Aquí hay algunas diferencias importantes entre interfaces y clases abstractas en C#: 1\. \*\*Implementación de Métodos:\*\* \- \*\*Interfaces:\*\* Solo pueden contener declaraciones de métodos, propiedades, eventos y otros miembros, pero no pueden proporcionar una implementación. Las clases que implementan una interfaz deben proporcionar sus propias implementaciones para todos los miembros de la interfaz. \- \*\*Clases Abstractas:\*\* Pueden contener tanto miembros abstractos (sin implementación) como miembros concretos (con implementación). Las clases que heredan de una clase abstracta pueden optar por implementar o no los miembros abstractos. 2\. \*\*Herencia:\*\* \- \*\*Interfaces:\*\* Pueden ser implementadas por múltiples clases. Una clase puede implementar varias interfaces. \- \*\*Clases Abstractas:\*\* Pueden ser heredadas por una única clase. No permiten la herencia múltiple. 3\. \*\*Constructores:\*\* \- \*\*Interfaces:\*\* No pueden tener constructores. No se pueden instanciar. \- \*\*Clases Abstractas:\*\* Pueden tener constructores y pueden ser instanciadas, pero no directamente. Se requiere una clase derivada para proporcionar la implementación completa. 4\. \*\*Acceso a Miembros:\*\* \- \*\*Interfaces:\*\* Todos los miembros de una interfaz son públicos por defecto y no pueden tener modificadores de acceso. \- \*\*Clases Abstractas:\*\* Pueden tener miembros con diferentes modificadores de acceso (public, protected, etc.). 5\. \*\*Campos (Variables de Clase):\*\* \- \*\*Interfaces:\*\* No pueden tener campos. \- \*\*Clases Abstractas:\*\* Pueden tener campos. 6\. \*\*Palabras Clave:\*\* \- \*\*Interfaces:\*\* Se definen con la palabra clave `interface`. \- \*\*Clases Abstractas:\*\* Se definen con la palabra clave `abstract`. En general, las interfaces son útiles cuando se desea definir un contrato que varias clases pueden implementar, permitiendo así la implementación de múltiples interfaces en una sola clase. Las clases abstractas son más adecuadas cuando se quiere proporcionar una base común con alguna implementación compartida y también definir comportamientos que las clases derivadas deben implementar. La elección entre interfaces y clases abstractas depende de la estructura y los requisitos específicos de tu diseño.

Sigo e insisto,

Que buen profesor es Miguel! explica tranquilamente temas que pueden ser complejos y da esos tips que mejoran la escritura de código.

Un cursito de patrones de diseño en C# por fis!!!

Miguel Teheran, muy crack como siempre en sus cursos!!!
Me ha gustado el curso y he aprendido mucho. Sin embargo, no amo cuando los ejemplos son tan ficticios, es decir, siento que me quedaría mucho más claro si los ejercicios que se usan para las clases están más basados en sus usos en la vida real. En este caso, el uso de los superheroes no lo siento tan realista comparado a lo laboral. En mi caso y para que a mí me quedara más claro, estuve haciendo mis prácticas suponiendo un sistema para una escuela donde se registra la información de alumnos, profesores y las materias de los mismos. Así que tuve que parar contantemente para comparar lo que estaba haciendo el profesor y aplicarlo a lo mío. Aunque bueno, en general ha sido mucho más sencillo de entender.
## **Interfaces vs Clases abstractas** ### Definición y Propósito * **Clases Abstractas**:Se utilizan para definir una base común para una jerarquía de clases. Pueden contener implementación parcial (métodos concretos) y dejar ciertos métodos como abstractos para que las subclases los implementen. * **Interfaces**:Se utilizan para definir un contrato puro sin implementación (hasta C# 8.0). Las clases que implementan la interfaz deben proporcionar la implementación completa de sus miembros. A partir de C# 8.0, las interfaces pueden tener métodos con implementación predeterminada (default methods), pero su principal propósito sigue siendo el contrato. ### **Herencia** * **Clases Abstractas**:Una clase puede heredar de **solo una clase abstracta** (herencia simple), ya que C# no admite herencia múltiple. * **Interfaces**:Una clase o estructura puede implementar múltiples interfaces, lo que permite emular cierta flexibilidad de la herencia múltiple. ### **Implementación** * **Clases Abstractas**:Pueden tener: * Métodos abstractos (sin implementación, deben ser implementados en las subclases). * Métodos concretos (con implementación, pueden ser utilizados directamente por las subclases o sobrescritos). * Campos, constructores, y propiedades con lógica. * **Interfaces**:Antes de C# 8.0, **solo contenían declaraciones**: * Métodos (sin cuerpo). * Propiedades (solo sus firmas).Desde C# 8.0, pueden incluir: * Métodos con implementación predeterminada usando la palabra clave `default`. ### **Accesibilidad y Modificadores** * **Clases Abstractas**:Sus miembros pueden tener diferentes modificadores de acceso (public, protected, private, internal, etc.), lo que permite controlar la visibilidad. * **Interfaces**:Antes de C# 8.0, todos los miembros eran **implícitamente públicos**. Desde C# 8.0, los métodos predeterminados pueden tener restricciones de accesibilidad como `private` o `protected`. ### **Uso con Estructuras** * **Clases Abstractas**:Solo las **clases** pueden heredar de una clase abstracta. **Las estructuras (struct)** no pueden hacerlo. * **Interfaces**:Tanto las clases como las estructuras pueden implementar interfaces.
En C# 8, al implementar métodos por defecto en interfaces, no se utiliza la palabra reservada `override`, ya que no se está sobrescribiendo un método de una clase base, sino proporcionando una implementación en la interfaz. Las clases que implementan la interfaz pueden optar por usar esa implementación o redefinir el método.
Muy complacido con el curso. 5/5 ![](https://static.platzi.com/media/user_upload/Captura%20de%20pantalla%202024-08-31%20a%20la%28s%29%202.28.40p.m.-8517561c-5783-48ed-84c1-177804c60d0e.jpg)
Gracias profe, mejor explicado imposible.
```c# ISuperHeroe avenger = new SuperHeroe { Id = 2, Nombre = "Black Widow", IdentidadSecreta = "Natasha Romanoff" }; Console.WriteLine(avenger.GetSuperHeroe()); ````El metodo GetSuperHeroe() puede ser llamado desde el program, y esto es posible ya que avenger.GetSuperHeroe()`: Llama al método `GetSuperHeroe()` del objeto `avenger`. Aquí, `avenger` es tratado como un `ISuperHeroe`, lo que significa que puede usar métodos definidos en `ISuperHeroe`
No me queda muy claro la diferencia entre interfaz y clase abstracta desde que le metieron la nueva característica a las interfaces (método por defecto en interfaz), dado que esto hace que estos dos tipos se parezcan mucho, aunque entiendo que aún se puede diferenciar en el tema de múltiples implementaciones y otras cositas más.

Wow, realmente me ha gusta el curso, me ha servido mucho, es hora de seguir con los demás cursos, he aprendido mucho, muchas Gracias Platzi

LLegaron un par de años tarde...

Espero poderme explicar:

Imaginen que tienen dos reinos de animales de acuerdo a su forma de nacimiento: viviparos o ovíparos.

Entonces en este caso creamos la clase Animal con el método formaDeNacimiento. Las clases AnimalViviparo y AnimalOviparo heredan de la clase Animal esta característica una y solo una vez y modifican el método formaDeNacimiento a su conveniencia para decir que un animal nace por medio de huevos o desde el vientre de la madre, pero nótese que tu ya sabes que sea cual sea el animal tu debes clasificarlo en uno de los dos tipos, entonces, antes que ser un contrato (como una interfaz por ejemplo), es una base que te ayuda a construir clases.

Ahora, ya sea un animal vivíparo o ovíparo, ambos deben moverse y la forma de movimiento de cada animal es distinto, por lo tanto que debes modificar el comportamiento del método varias veces, dependiendo el animal que hablas. Para esto es lo que sirven las interfaces, para usarlo varias veces y dependiendo del uso que le des.

Dicho esto, la interfaz puedes heredarla varias veces en el código y las clases que tengas en función de las necesidades que necesites (he ahí que se dice que es un contrato, pero he ahí que tu le pongas la letra en cada clase que definas en función del contexto que estás trabajando) pero la clase abtracta solamente puedes heredarla una vez y es igual un contrato, pero que ya viene con letras y te dice que debe tener tu clase para que funcione y herede de su inmediato superior.

Espero no me hice bolas.

Excelente explicacion del curso !!!

buen curso…

NO me salen los recursos, alguien tiene el link para git?