abstract-class - metodos - metodo abstracto ejemplo
¿Cuándo y por qué usar clases/métodos abstractos? (6)
Tengo algunas preguntas básicas sobre clases / métodos abstractos. Sé que el uso básico de las clases abstractas es crear plantillas para clases futuras. ¿Pero hay más usos de ellos? ¿Cuándo debería preferirlos a través de las interfaces y cuándo no? Además, ¿cuándo son útiles los métodos abstractos?
Sé que el uso básico de las clases abstractas es crear plantillas para clases futuras. ¿Pero hay más usos de ellos?
No solo puede definir una plantilla para niños, sino que las Clases abstractas ofrecen el beneficio adicional de permitirle definir la funcionalidad que sus clases secundarias pueden utilizar más adelante.
No puede proporcionar una implementación para una interfaz.
¿Cuándo debería preferirlos a través de las interfaces y cuándo no?
Las Clases abstractas son una buena opción si desea proporcionar detalles de implementación a sus hijos, pero no desea permitir que una instancia de su clase sea instanciada directamente (lo que le permite definir parcialmente una clase).
Si quiere simplemente definir un contrato para que los objetos lo sigan, entonces use una interfaz.
Además, ¿cuándo son útiles los métodos abstractos?
Los métodos abstractos son útiles de la misma manera que la definición de métodos en una interfaz es útil. Es una forma para que el diseñador de la clase Abstracta diga "cualquier hijo mío DEBE implementar este método".
En un nivel muy alto:
La abstracción de cualquier tipo se reduce a separar las preocupaciones. El código "cliente" de una abstracción no se preocupa de cómo se cumple el contrato expuesto por la abstracción. Por lo general, no le importa si una clase de cadena utiliza una implementación de almacenamiento interno con terminación nula o de longitud de almacenamiento intermedio, por ejemplo. La encapsulación oculta los detalles, pero al hacer clases / métodos / etc. Además, permite que la implementación cambie o que se agreguen nuevas implementaciones sin afectar el código del cliente.
Las clases / métodos abstractos se usan generalmente cuando una clase proporciona alguna funcionalidad de alto nivel, pero deja de lado ciertos detalles para ser implementados por las clases derivadas. Hacer que la clase / método sea abstracto garantiza que no se pueda usar solo, sino que debe estar especializado para definir los detalles que se han quedado fuera de la implementación de alto nivel. Esto se usa con mayor frecuencia con el patrón de método de plantilla:
Normalmente, uno usa una clase abstracta para proporcionar alguna funcionalidad incompleta que será desarrollada por subclases concretas. Puede proporcionar métodos que son utilizados por sus subclases; también puede representar un nodo intermedio en la jerarquía de clases, para representar una agrupación común de subclases concretas, distinguiéndolas de alguna manera de otras subclases de su superclase. Como una interfaz no puede derivar de una clase, esta es otra situación en la que sería necesaria una clase (abstracta o de otro tipo) frente a una interfaz.
Una buena regla general es que solo los nodos hoja de una jerarquía de clases deben ser instanciados. Hacer abstractos nodos de hojas es una manera fácil de garantizar eso.
Si está buscando una buena documentación de Ingeniería y Diseño de Software, le aconsejo que eche un vistazo allí:
https://prof.hti.bfh.ch/index.php?id=3494&L=2
Sobre la introducción de clases abstact:
https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/script/udp-advancedclassmodeling-200910.pdf
aclamaciones
Daniel
lea el siguiente artículo http://mycodelines.wordpress.com/2009/09/01/in-which-scenario-we-use-abstract-classes-and-interfaces/
Clases abstractas
-> Cuando tenga un requisito en el que su clase base debe proporcionar la implementación predeterminada de ciertos métodos, mientras que otros métodos deben estar abiertos a ser reemplazados por clases secundarias, use clases abstractas.
Por ejemplo, nuevamente tome el ejemplo de la clase de Vehículo arriba. Si queremos que todas las clases derivadas de Vehicle implementen el método Drive () de una manera fija, mientras que los otros métodos pueden ser reemplazados por clases secundarias. En tal escenario implementamos la clase Vehicle como una clase abstracta con una implementación de Drive mientras dejamos los otros métodos / propiedades como abstractos para que puedan ser reemplazados por clases secundarias.
-> El objetivo de una clase abstracta es proporcionar una definición común de una clase base que múltiples clases derivadas puedan compartir.
Por ejemplo, una biblioteca de clases puede definir una clase abstracta que se usa como parámetro para muchas de sus funciones y requiere que los programadores que usan esa biblioteca proporcionen su propia implementación de la clase creando una clase derivada.
Usa una clase abstracta
Al crear una biblioteca de clases que será ampliamente distribuida o reutilizada, especialmente a los clientes, use una clase abstracta con preferencia a una interfaz; porque, simplifica el control de versiones. Esta es la práctica utilizada por el equipo de Microsoft que desarrolló la biblioteca de clases base. (COM se diseñó alrededor de las interfaces.) Use una clase abstracta para definir una clase base común para una familia de tipos. Use una clase abstracta para proporcionar un comportamiento predeterminado. Subclase solo una clase base en una jerarquía a la que la clase pertenece lógicamente.