Programación Orientada a Objetos (V)

En este artículo tratamos dos temas de suma importancia a la hora de trabajar con métodos en clases, sobre todo, cuando hay herencia de por medio: la sobrecarga de métodos, y la sobrescritura de los mismos.

Con estas técnicas, veremos como flexibilizar más aún el uso de métodos en clases, así cómo sacarles mayor partido, pudiendo hacer que su comportamiento varíe, manteniendo o alterando el código a nuestra conveniencia.

El uso de estas técnicas supone un avance sustancial en la línea de flexibilizar nuestro código, manteniendo su legibilidad y optimización, por lo que son de suma importancia en la programación actual, como podrás comprobar cuando sigas leyendo.

SOBRECARGA DE MÉTODOS

Se conoce como sobrecarga de métodos el hecho de que un método de una clase tenga distintos comportamientos según el número o tipo de argumentos que se le pasen. Así, el mismo método puede usarse para distintas finalidades, pasándole una lista de argumentos u otra. Ojo con esto. Esta técnica puede parecer una especie de panacea para que nuestra clase tenga un sólo método que sirva «para todo». Nada más lejos de la realidad. Debemos ser coherentes con la programación que realizamos. Cuando decimos que un método «puede tener distintas finalidades» nos estamos refiriendo al hecho de que puede cumplir objetivos muy similares o relacionados entre sí, o que puede llevar a cabo una misma tarea de distintos modos. Un viejo adagio dice que lo que sirve para todo no vale para nada.

En muchos lenguajes se obtiene la sobrecarga de métodos declarando varios métodos con el mismo nombre, pero con distintas líneas de parámetros. Si has leído algo sobre Java o C++ te resultará familiar algo como esto:

Esto en PHP no funciona así. De hecho, este lenguaje emplea una solución más simple y, a mi entender, mucho más elegante. Dentro del cuerpo de una función (que es, en definitiva, un método) existen funciones propias del lenguaje que pueden determinar los argumentos que ha recibido, así como el tipo o el valor de los mismos. Las funciones de PHP que nos interesan son:

  • func_get_args. Devuelve una matriz con los argumentos que ha recibido la función.
  • func_get_arg. Devuelve el valor de un argumento específico de la función.
  • func_num_args. Devuelve el número total de argumentos que ha recibido la función.
  • gettype. Devuelve el tipo de un dato.

En realidad, PHP cuenta con más funciones para el control de la operativa de funciones definidas por el desarrollador, que puedes conocer, si lo deseas, en este enlace. Sin embargo, las cuatro que te comento en este artículo (sobre todo las tres primeras), son lo que nos permite crear la sobrecarga de métodos en PHP.

Vamos a ver como operan, mediante un ejemplo muy simple. Empleamos una variante de la clase CrearTelevisorClass.php, que tiene un método sobrecargado, como ves a continuación:

Analiza el código resaltado, donde he incluido los comentarios necesarios para que veas como funciona. A continuación te reproduzco el archivo index.php, donde creamos un objeto de la clase CrearTelevisorClass, y llamamos al método sobrecargado, sin pasarle ningún argumento.

Como vemos en la definición de la clase, si el valor de func_num_args() es 0 (como ocurre en este caso), se nos da un mensaje informando de que hay un error, y se abandona el método. Esto es lo que vemos en la pantalla del navegador:

Has cogido el mando, pero no has pulsado ningún botón.

Ahora vamos a ver una variante del uso del método, en la que le pasamos el primer argumento, con el valor true, para «encender» el televisor:

El resultado en pantalla es, como cabría esperar, el siguiente:

El televisor está encendido.

Sin embargo, no nos dice nada relativo al canal, porque no le hemos pasado el segundo argumento. En index.php sustituye la línea:

$miTele->manejarTelevisor(true);

por

$miTele->manejarTelevisor(true, 10);

El resultado en pantalla es:

El televisor está encendido.
El canal seleccionado es 10.

De esta forma, un mismo método opera de diferente manera, según los argumentos que le hayamos pasado. Ahora es cuestión de que pruebes cambiando los valores (e, incluso, los tipos de datos que le pasas), para que te familiarices con esta técnica.

SOBRESCRITURA DE MÉTODOS

Esta es una técnica que se emplea cuando recurrimos a la herencia entre clases. Consiste en que, en la clase derivada, creamos un método con el mismo nombre que uno ya existente en la clase padre, pero con diferente operativa. De este modo, si el objeto lo declaramos de la clase padre, el método actuará como se define en esta clase. Sin embargo, si el objeto lo declaramos cono de la clase derivada, el método actuará como se define en esta última.

Puede que aún no hayas reparado en ello, pero esta es una técnica tan habitual que, sin proponérnoslo ya la hemos usado, con el constructor en este artículo. Del mismo modo, se puede emplear con cualquier otro método que necesitemos. Como tienes los ejemplos a tu disposición, no vamos a repetirnos aquí.

CONCLUYENDO

En este artículo hemos visto la sobrecarga de métodos en PHP, y nos hemos dado cuenta de que ya conocemos, también, la sobrescritura de métodos. Como siempre, aquí te dejo el enlace para descargar los ficheros de este artículo. En el próximo hablaremos de las limitaciones a la herencia, mediante lo que se conoce como finalización.

   

Deja un comentario