Header Ads Widget

Ticker

6/recent/ticker-posts

Ejemplos de interfaz para PHP orientado a objetos

 

En este tutorial, echaremos un vistazo a los ejemplos de interfaz mientras programamos en PHP orientado a objetos. Las interfaces son uno de los principales bloques de construcción del patrón SOLID. Cuando vi por primera vez la palabra SÓLIDO, como en alguien que se refiere a la programación SÓLIDA, pensé que se referían a que era sólido, como en fresco o legítimo. 🙂 LOL. Por supuesto, en realidad, SOLID es la idea del grupo de patrones de diseño, convenciones y filosofías popularizadas por el tío Bob MartinEstos son el principio de responsabilidad única, abierto cerrado, sustitución de Liskov, segregación de interfaz e inversión de dependencia. Cubriremos todas estas ideas en el futuro. Por ahora, asegurémonos de que la idea de una interfaz esté sólidamente cimentada en nuestra materia gris cuando programación orientada a objetos .

¿Qué es una interfaz?

Una interfaz es un esquema de lo que puede hacer un objeto en particular. A menudo oirá que una interfaz es un contrato . Esto es cierto en la medida en que una interfaz define los métodos públicos que debe implementar una clase Por ejemplo, si tiene dos objetos que son instancias de una clase diferente, pero implementan la misma interfaz, ambos objetos deben ofrecer como mínimo los métodos públicos definidos en la interfaz que implementan. Una interfaz no contiene lógica. Además de esto, las interfaces no contienen variables de datos, solo prototipos de funciones.

Sintaxis de la interfaz

Al mirar el código, una interfaz casi parece una definición de clase. Sin embargo, en lugar de usar la palabra clave class, simplemente usamos la interfacepalabra clave al codificar. Además, los métodos que definamos en la interfaz no tendrán llaves {} , ya que no hay lógica. Veamos un ejemplo de interfaz.

Eso es. No es muy emocionante, ¿verdad?🙂

Implementar una interfaz

Nosotros implementamos una interfaz para hacer cumplir el comportamiento . Considere que está comprando un cortacésped nuevo. Lo ha reducido a tres modelos. Uno de Kubota, uno de John Deere y uno de CrappyMowersInc. Dos de ellos implementan la Lawnmowerinterfaz, es decir, tienen la garantía de poder hacerlo cut_grass()El tercero no implementa la interfaz de cortacésped. Vayamos a comprar cortadoras de césped en nuestro código.

Como vemos aquí, los dos modelos que implementan la interfaz correcta son los que nos gustan. Además, dado que las dos clases que nos gustan implementan nuestra Lawnmowerinterfaz, son esencialmente intercambiables . Por lo tanto, no hace una gran diferencia si opta por el Kubotao el JohnDeere, ambos cortarán el césped sin problemas. CrappyMowersIncpor otro lado no implementa nuestra Lawnmowerinterfaz, y por lo tanto no brinda el resultado que queremos.

Programar a una interfaz

Ahora llegamos a otra idea relacionada con las interfaces, y es programar en una interfaz, no en una implementación. Lo que significa es que si tiene una clase que necesitará tener varias formas diferentes de hacer lo mismo, puede crear una interfaz. Imaginemos una empresa de paisajismo que va a utilizar nuestras segadoras. La empresa necesitará cortar el césped de sus clientes. No importa si lo hacen con una JohnDeere, una Kubota, una podadora de empuje o un par de tijeras. Siempre que hagan bien el trabajo, el cliente estará feliz. En primer lugar, creemos una clase de paisajista que utilice una JohnDeere para cortar el césped.

Las cosas van muy bien. Ya hemos ayudado a dos clientes hoy y están encantados. Desafortunadamente, la hoja de nuestro JohnDeeregolpeó una roca y ahora está dañada. No tenemos piezas de repuesto, por lo que parece que tendremos que usar nuestra copia Kubotade seguridad para terminar el último trabajo del día. Probemos eso.

🙁¡Oh no! Los Henry están molestos porque no podemos terminar el trabajo. El problema es que pasamos una concreción o implementación al constructor de la Landscapingclase. En cambio, deberíamos haberlo programado en una interfaz. De esta manera, podemos cambiar el John Deere por un Kubota y funcionará bien. La razón por la que funcionará bien es porque tanto la JohnDeereclase como la Kubotaclase implementan la misma interfaz. Esto significa que pueden completar exactamente el mismo comportamiento, que en este caso es cut_grass()Actualicemos nuestro código para ser más flexibles. Mira este pequeño cambio que hacemos en nuestra clase de paisajista.

Observe que ahora pasamos una interfaz al constructor de la Landscaperclase. Ahora, cuando volvamos a esa clase más adelante en nuestro código de cliente, podemos pasar a JohnDeereo a Kubota, ¡y nadie se queja! A la clase ya no le importa lo que le des ni cómo completa su trabajo. Mientras pueda completar el trabajo, que en este caso es cortar césped, todo funciona. ¿No me crees? Hagamos que el equipo de jardinería corte el césped con unas tijeras.

Programación a concreción vs programación a una interfaz

Para ilustrar mejor cómo funciona esto, veamos esto desde la perspectiva de la clase Paisajista. En nuestro primer ejemplo, programamos a una concreción. Podemos ver esto, porque pasamos en un JohnDeere que es una clase concreta (una clase real con lógica que hace algo). Esto significa que la clase de paisajista le está diciendo al mundo: “Oye, necesito una JohnDeere para hacer mi trabajo. No me des un Kubota, ni un Craftsman, ni un Honda, ni un Pushmower, ni un par de tijeras. Si me da algo que no sea un JohnDeere, voy a croar ".

Por supuesto, esta no es la solución más flexible del mundo. En el segundo ejemplo, programamos en una interfaz . Esto significa que pasamos una interfaz al constructor en lugar de una concreción. Esto cambia lo que la clase Paisajista le dice al mundo. Ahora dice: “Para hacer mi trabajo, debes proporcionarme algo que pueda cut_grass()Si me proporciona algo que pueda cortar césped, haré mi trabajo. No me importa lo que me des, siempre que pueda cortar el césped ".

Ejemplos de interfaz para resumen de PHP orientado a objetos

Las interfaces brindan muchos beneficios al programador. Proporcionan la capacidad para que un desarrollador haga referencia a objetos de una manera más abstracta. Las interfaces también brindan la capacidad de intercambiar implementaciones mucho más rápida y fácilmente que si hubiera programado una concreción. Finalmente, el uso de interfaces se puede utilizar para hacer cumplir contratos en nuestro código. Podemos especificar explícitamente qué comportamientos o métodos debe tener una clase cuando implementa nuestra interfaz. Al final del día, casi todo el conjunto de principios SOLID se relaciona con el uso de una interfaz de una forma u otra, por lo que vale la pena saber cómo funcionan las interfaces.



Publicar un comentario

0 Comentarios