Me preguntaba cómo decidieron ustedes cuándo utilizar la clase abstracta o de interfaz durante el desarrollo de la aplicación, ya que ambos proporcionan funcionalidades similares con un poco de diferencia. Agradezco cualquier ayuda. Gracias.php: ¿Cuándo usar la clase abstracta y de interfaz?
Respuesta
Cuando estoy desarrollando e intentando decidir si usar una interfaz o una clase abstracta, generalmente pienso si las clases que heredarán contendrán solo la misma estructura (métodos, propiedades, etc.) pero diferentes implementaciones.
si la implementación de los métodos será diferente, pero quiero asegurar la uniformidad desde un punto de vista estructural uso una interfaz. si la estructura y la implementación son las mismas, tiendo a usar clases abstractas.
No deja claro por qué 'si la estructura y la implementación son lo mismo, tiendo a usar clases abstractas. ¿Usas clases abstractas si se necesita la misma estructura e implementación? –
@RNKushwaha, quiero decir que si quiero compartir una implementación idéntica de un método/propiedad entre múltiples clases heredadas, crearía una clase abstracta para que la implementación pueda vivir en la clase abstracta. Las interfaces no permiten ninguna implementación. ¿Eso tiene más sentido? –
Uso las clases abstractas cuando deseo que las clases heredadas hereden cierta funcionalidad, y las interfaces cuando quiero establecer algunos criterios estructurales mínimos para un grupo de clases.
Una cosa para recordar es que cualquier clase dada puede "heredar" (implementar técnicamente) muchas interfaces pero solo una subclase (sea abstracta o no).
Los lenguajes como PHP admiten la implementación de múltiples interfaces pero no la herencia de clases múltiples, y esto a menudo es parte de la decisión: ¿admitirá su clase comportamientos múltiples (interfaces) o actuará como un tipo de cosa (clase base)?
También está la cuestión de cómo se implementa la funcionalidad básica. Si está utilizando un enfoque como el template method pattern, donde tiene un código de implementación común para todas las clases derivadas, querrá usar una clase base abstracta.
Utilice la abstracción si tiene métodos predeterminados (con código adjunto) para herederos. Use interfaces si solo necesita asegurarse de que las clases heredadas de este elemento primario implementen todos los métodos definidos. Advertencia: use clases e interfaces abstractas solo si tiene la intención de imponer la estructura y la organización (generalmente con un equipo). Hay una sobrecarga de rendimiento.
Aquí hay un buen artículo explicando el concepto de interfaz y por qué usarlo y cómo declarar clases abstractas en PHP. Aunque no diferencia cuándo usar ambos conceptos.
Understanding and Applying (Interfaces) Polymorphism in PHP
cuando se requiere cierta funcionalidad, use interfaz.pero si desea alguna funcionalidad opcional, use la clase abstracta. por ejemplo, si isi (instituto estándar indio) establece estándares para el monitor de la computadora con funcionalidad (debería tener) - Pantalla, botón de encendido, setter de contraste. si las 3 funciones son obligatorias, utilice la interfaz, que obliga a la empresa fabricante del monitor a implementar las 3 funciones. si alguno es opcional, utiliza la clase abstracta.
- 1. Cuándo usar la clase o interfaz abstracta?
- 2. Cómo y cuándo usar una clase abstracta
- 3. Clase abstracta 100% frente a la interfaz
- 4. ¿Qué es una CLASE ABSTRACTA e INTERFAZ y cuándo las usarías en PHP?
- 5. php clase abstracta extendiendo otra clase abstracta
- 6. clase abstracta no implementa interfaz
- 7. Java clase abstracta implementa la interfaz
- 8. ¿Razones para no usar clase abstracta en lugar de interfaz?
- 9. crear objeto de clase abstracta e interfaz
- 10. ¿Qué es la clase abstracta en php?
- 11. ¿Cómo se decide entre usar una clase abstracta y una interfaz?
- 12. C# Interfaz implementada por clase abstracta vacía
- 13. Cuándo usar interfaces o clases abstractas? Cuándo usar ambos?
- 14. ¿Ventajas de usar la interfaz sobre la clase abstracta para el patrón de repositorio?
- 15. Cuándo deberíamos usar la clase y cuándo no debemos
- 16. C# implementación anónima de la interfaz (o clase abstracta)
- 17. Cuándo usar un módulo y cuándo usar una clase
- 18. ¿Cuál es la clase o Interfaz rápida, abstracta?
- 19. Cuándo usar la clase Partitioner?
- 20. Cuándo usar Ruby vs Cuándo usar PHP
- 21. Derivar clase abstracta de la clase no abstracta
- 22. ¿Clase o interfaz abstracta para el servicio de IoC?
- 23. Interfaz o clase abstracta para cumplir el requisito
- 24. Las interfaces (interfaz/clase abstracta) no son abstracciones?
- 25. ¿Necesita una clase abstracta así como una interfaz?
- 26. Implementación dinámica para clase de interfaz/abstracta en Java
- 27. Diferencia entre la clase abstracta y Rasgo
- 28. Patrón de diseño del constructor: sin clase/interfaz abstracta
- 29. PHP y mySQL: ¿Cuándo usar htmlentities exactamente?
- 30. ¿Es una interfaz de Java una clase abstracta?
posible duplicado de [interfaz vs clase abstracta] (http://stackoverflow.com/questions/1814821/interface-vs-abstract-class) – VolkerK
posible duplicado de [PHP: ¿Cuál es la diferencia entre una interfaz y clase abstracta? ?] (http://stackoverflow.com/questions/1913098/php-what-is-the-difference-between-an-interface-and-abstract-class) – Gordon