✅ Noticias, temas, complementos de WEB y WordPress. Aquí compartimos consejos y las mejores soluciones para sitios web.

Clases abstractas, Parte 2 – Clases abstractas e interfaces

16

En la publicación anterior de esta serie, expuse:

  • los fundamentos de las clases abstractas,
  • cómo implementarlos,
  • y proporcionó ejemplos de código de trabajo.

Y aunque creo que comprender las clases abstractas es clave para sentar una base sólida para la programación orientada a objetos, a menudo veo que puede ser confuso compararlas con las interfaces y saber cuándo usarlas.

Clases abstractas e interfaces

Entonces, en esta publicación, voy a compartir:

  • un repaso rápido sobre qué son las interfaces,
  • qué son las clases abstractas,
  • y luego cómo saber cuándo usar uno sobre el otro.

Este no debería ser un artículo intensivo en codificación, pero debería ayudar a saber cuándo escribir código de cierto tipo para ayudar a organizar mejor sus proyectos.

1 interfaces

Recuerde que cuando se trata de interfaces, también usamos el término "programar a una interfaz" con la idea de que la interfaz define los métodos que debe implementar una clase para cumplir el "contrato" con dicha interfaz.

El código utilizado para demostrar una interfaz básica fue:

<?php

interface iCache 
{
  public function set($key, $value);
  public function get($key);
  public function has($key);
}

Pero recuerde, el propósito de la interfaz no es definir después de que se haya escrito el código. En cambio, es una herramienta utilizada para diseñar qué clases deberían implementar si siguen un determinado paradigma o si requieren un determinado conjunto de funciones.

Es decir, si va a diseñar un conjunto de clases que funcionan con el almacenamiento en caché, no escriba las clases primero. Primero escribe la interfaz y luego las clases implementan dicha interfaz.

La idea es que se garantice que cualquier clase que implemente la interfaz tenga esas funciones.

2 clases abstractas

Las clases abstractas, por otro lado, nos permiten hacer dos cosas:

  1. implementar funcionalidad que puede ser utilizada por subclases,
  2. implementar firmas de métodos que las subclases deben implementar.

Esto puede parecer un poco incongruente al principio, pero considere esto:

Cuando tiene una clase de cierto tipo que tendrá una funcionalidad consistente sin importar la subclase, la funcionalidad va a la clase abstracta. Cuando otros métodos necesitan tener su implementación de un método, simplemente proporcione la firma del método y márquelo como abstract.

Aquí hay un ejemplo de una publicación anterior:

Ahora, esto nos pone al día con los ejemplos anteriores y las cosas anteriores en las que debemos centrarnos con respecto a las interfaces y las clases abstractas, pero para algunos, esto todavía no proporciona mucha claridad.

Específicamente, esto todavía no responde la pregunta: ¿Cómo decidimos cuándo usar una clase abstracta y cuándo usar una interfaz?

En la superficie, puede sonar un poco confuso, pero hay algunas cosas que puede usar para ayudar a tomar una decisión.

¿Cuándo usamos cada uno?

Recuerde que cuando se trata de programación orientada a objetos, podemos dividirla en tres formas distintas:

  • Las clases representan una cosa. Puedes considerar estos como un sustantivo.
  • Los atributos o propiedades son como adjetivos. Describen el objeto o algo que el objeto puede contener.
  • Los métodos o funciones son como los verbos. Describen lo que se oponen puede hacer.

Ahora, cuando se trata de una interfaz, piense en lo que hace la interfaz: describe, sin implementación, lo que puede hacer un objeto. Y cuando se trata de una clase abstracta, describe qué es un objeto durante el tiempo de ejecución.

En otras palabras, una buena regla general es que si necesita proporcionar un conjunto de comportamientos para un objeto, una interfaz es el camino a seguir. Si necesita describir qué es un objeto, use una clase abstracta.

Para las clases abstractas, también llevaría esto un paso más allá y diría que ayuda a describir un nivel básico de datos que describe un objeto o lo que podría almacenar además de un nivel básico de funcionalidad.

¿Tienes un ejemplo?

Al igual que con la mayoría del contenido de cada una de estas publicaciones, trato de dar ejemplos incluso si no se hace específicamente en el código. Quizás esto ayude a explicarlo aún más:

  • Las interfaces no tienen implementación. Solo garantizan lo que hará una clase.
  • Las clases abstractas deben tener un nivel base de implementación. Esto debería representar lo que una clase puede contener y hacer, pero no está completa. Requieren un poco más de implementación de la subclase.

Cuando trabaje con código orientado a objetos, espero que esto ayude a proporcionar algunas pautas sobre cuándo usar qué. Si no, no dudes en dejar un comentario (algo que los miembros tienen permiso para hacer :).

Además, veremos esto en la práctica cuando comencemos a escribir código orientado a objetos (sobre todo para WordPress, pero no siempre).

Fuente de grabación: tommcfarlin.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More