El otro día estaba impartiendo un curso sobre UML y Diseño en POO, cuando comentando el hecho de que Java no soporta herencia múltiple un alumno me preguntó “y cual es el número máximo de interfaces que una clase puede implementar”.
En aquel momento repase mentalmente mis conocimientos en Java y al cabo de cinco segundos me rendí a la evidencia y respondí “esa es una buena pregunta, para la que no tengo una buena respuesta”, obviamente los alumnos en la clase se rieron y acto seguido intente salvaguardar mi honor de javero de pro con la siguiente respuesta “en principio no conozco ningún limite, pero lo comprobare y os contaré lo que averigüe”.
El domingo siguiente, repasando la agenda de la semana dedique cinco minutos a buscar información sobre la limitación de Java en el número máximo de Interfaces implementables por una clase y fue cuando me di cuenta que estoy severamente perjudicado, paso a explicarlo:
¿Qué hace un ingeniero de 26 años un domingo a las 10:00 de la noche buscando mediante Google la respuesta a semejante pregunta?. Rápidamente pensé “lo hago por que soy un buen profesional”, negándome a aceptar el hecho de que soy un friki de la informática y que estoy tremendamente perjudicado.
Lo realmente triste no fue eso, sino que los primeros resultados de mi búsqueda me llevaron a unos foros donde un chaval había codificado, compilado y ejecutado una clase que implementaba 126 interfaces… ese tío si que estaba tremendamente perjudicado, a su lado parezco una persona cuasi normal.
En un post posterior, otro sujeto probó otro ejemplo con una clase que implementaba 511 interfaces (también funcionaba correctamente decía dicho post), yo honestamente no pude por menos que reírme y seguir buscando, para descubrir poco después que en la especificación de la JVM no aparecía nada sobre la insidiosa pregunta. Tampoco aparecía nada en la información que encontré sobre el compilador de Java en la web del JCP.
Pero fue todavía más triste cuando empecé a divagar sobre otras posibles limitaciones de Java: ¿cuál sería el número máximo de métodos en una clase?, en este punto preferí centrarme en darle una solución racional al problema:
“¿A quien se le ocurriría montar una clase que implementa 500 interfaces?” desde el punto de vista de diseño es tan absurdo como hacer que una clase implemente ¿qué se yo?, ¡¿20 interfaces?!, eso ya me parece absurdo (así a priori).
El momento triste de la noche fue que a continuación se me ocurrieron mas de dos desarrolladores de java (con nombre, apellidos y cierta experiencia) que no tendrían problema en hacer clases que implementaran 20, 30 o 70 interfaces, no comment.
En definitiva, el lunes volví a clase y comente a los alumnos que si implementaban más de 4 interfaces en una clase mejor sería por que tuvieran un motivo de peso o de lo contrario alguien les ajusticiaría con un sable de luz… nos echamos unas risas, eso si, yo sigo sin saber si existe un límite.