Clase abstracta vs clase concreta
La mayoría de los populares lenguajes de programación orientados a objetos modernos como Java y C # están basados en clases. Logran los conceptos orientados a objetos tales como encapsulación, herencia y polimorfismo mediante el uso de clases. Las clases son una representación abstracta de objetos del mundo real. Las clases pueden ser concretas o abstractas según el nivel de implementación de las funcionalidades de sus métodos. Una clase concreta implementa completamente todos sus métodos. Una clase abstracta puede considerarse como una versión limitada de una clase regular (concreta), donde puede contener métodos parcialmente implementados. Normalmente, las clases concretas se denominan (solo) clases.
Que es la clase concreta?
La clase por defecto es una clase concreta. La palabra clave de clase se utiliza para definir clases (por ejemplo, en Java). Y, por lo general, se los denomina simplemente clases (sin el adjetivo concreto). Las clases concretas representan la representación conceptual de los objetos del mundo real. Las clases tienen propiedades llamadas atributos. Los atributos se implementan como variables globales y de instancia. Los métodos en las clases representan o definen el comportamiento de estas clases. Los métodos y atributos de las clases se llaman los miembros de la clase. Normalmente, la encapsulación se logra al hacer que los atributos sean privados, mientras se crean métodos públicos que se pueden usar para acceder a esos atributos. Un objeto es la instancia de una clase. La herencia le permite al usuario extender las clases (llamadas subclases) de otras clases (llamadas súper clases). El polimorfismo permite al programador sustituir un objeto de una clase en lugar de un objeto de su superclase. Normalmente, los nombres encontrados en la definición del problema se convierten directamente en clases en el programa. Y de manera similar, los verbos se convierten en métodos. Público, privado y protegido son los modificadores de acceso típicos utilizados para las clases..
Que es clase abstracta?
Las clases abstractas se declaran usando la palabra clave Abstract (por ejemplo, en Java). Normalmente, las clases abstractas, también conocidas como clases base abstractas (ABC), no se pueden crear instancias (no se puede crear una instancia de esa clase). Por lo tanto, las clases abstractas solo tienen significado si el lenguaje de programación admite la herencia (capacidad para crear subclases a partir de la extensión de una clase). Las clases abstractas generalmente representan un concepto abstracto o entidad con implementación parcial o nula. Por lo tanto, las clases abstractas actúan como clases primarias de las que se derivan las clases secundarias, de modo que la clase secundaria compartirá las características incompletas de la clase principal y se pueden agregar funciones para completarlas.
Las clases abstractas pueden contener métodos abstractos. Las subclases que extienden una clase abstracta pueden implementar estos métodos abstractos (heredados). Si la clase secundaria implementa todos estos métodos abstractos, se convierte en una clase concreta. Pero si no lo hace, la clase infantil también se convierte en una clase abstracta. Lo que todo esto significa es que, cuando el programador designa una clase como Resumen, está diciendo que la clase estará incompleta y tendrá elementos que las subclases hereditarias deben completar. Esta es una buena forma de crear un contrato entre dos programadores, lo que simplifica las tareas en el desarrollo de software. El programador, que escribe el código para heredar, necesita seguir exactamente las definiciones de los métodos (pero, por supuesto, puede tener su propia implementación).
¿Cuál es la diferencia entre la clase abstracta y la clase concreta??
Las clases abstractas usualmente tienen implementación parcial o nula. Por otro lado, las clases concretas siempre tienen plena implementación de su comportamiento. A diferencia de las clases concretas, las clases abstractas no pueden ser instanciadas. Por lo tanto, las clases abstractas tienen que extenderse para hacerlas útiles. Las clases abstractas pueden contener métodos abstractos, pero las clases concretas no pueden. Cuando una clase abstracta se extiende, todos los métodos (tanto abstractos como concretos) se heredan. La clase heredada puede implementar cualquiera o todos los métodos. Si no se implementan todos los métodos abstractos, entonces esa clase también se convierte en una clase abstracta.