2010-09-06 22 views
7

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?

+0

posible duplicado de [interfaz vs clase abstracta] (http://stackoverflow.com/questions/1814821/interface-vs-abstract-class) – VolkerK

+0

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

Respuesta

3

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.

+0

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? –

+0

@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? –

4

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).

1

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.

6

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.

0

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.

Cuestiones relacionadas