- ¿Cuándo debería
implement
oextend
utilizarse? - ¿Cuáles son algunos ejemplos del mundo real?
¿Es esto correcto?
La implementación parece ser una forma de hacer cumplir ciertos métodos en una clase y que las llamadas a funciones de estos métodos están formateadas correctamente. ¿Implementar no es una forma de pasar variables o "configuraciones" a la clase?
Escenario esperado de la vida real: tengo una plataforma de comercio electrónico con múltiples clases de pago que siguen el mismo diseño. Cuando se debe agregar una nueva clase de pago, es muy fácil seguir el diseño definido del interface
para garantizar que todos los bits y piezas estén ahí, desde el principio.
La extensión de clases hace que la clase extendida (¿hijo?) Herede todo de su clase padre, excepto los métodos y variables declarados como private
?
Escenario esperado de la vida real: tengo una clase llamada sessions
con dos clases secundarias llamadas sessioncookies
y databasesessions
. sessioncookies
y databasesessions
, juntos, heredan una serie de opciones de configuración mutuas de sus sesiones principales, lo que facilita el cambio de una opción de configuración para afectar todo tipo de almacenamiento de datos de visitantes eventuales.
Respuestas:
La herencia es útil para reducir la cantidad de código que reescribe. Si tiene varias clases con algunos métodos o campos comunes, en lugar de definir estos métodos y campos una y otra vez, puede factorizarlos en una clase base y hacer que cada una de las clases secundarias amplíe esa clase base.
Las interfaces (y
implements
) son útiles cuando desea definir un protocolo común sobre cómo debe comportarse un grupo de objetos. Por ejemplo, es posible que desee exigir que los objetos que son comparables se puedan comparar por igualdad y hash, etc.El uso de la herencia es, en última instancia, una elección de diseño. Esté atento a los casos en los que defina los mismos métodos en varias clases; esos son casos excelentes en los que puede factorizar esos métodos en una clase base. Lo mismo ocurre con las clases que observan algunas de las mismas características: puede garantizar la consistencia colocando esas características en una interfaz para ser implementadas por esas clases relacionadas.
La herencia es un gran concepto en OOP que va mucho más allá de PHP. Te recomiendo que leas el artículo de Wikipedia sobre herencia y tal vez Patrones de diseño de la banda de los cuatro .
Creo que su comprensión de la herencia es principalmente correcta. El siguiente paso sería utilizarlo en producción.
fuente
Implementar:
Las interfaces son clases abstractas, por lo que solo puede declarar cosas. Una clase implementa una interfaz. Puede implementar múltiples interfaces.
Ampliar:
Usted extender las clases cuando se desea una versión más específica de una clase.
Ejemplo:
// Contract: a pet should play public interface Pet { public void play(); } // An animal eats and sleeps class Animal { public void eat(); public void sleep(); } public class Camel extends Animal { } public class Dog extends Animal implements Pet { public void play() {...} }
Tanto Camel como Dog son animales, por lo que amplían la
Animal
clase. Pero solo el Perro es un tipo específico deAnimal
que también puede ser unPet
fuente