Por qué Java no y .NET sí? – Sobrecarga de operadores
Bueno ya es la 3ª vez que
Todo comenzó haciendo una práctica de la facultad, las cuales siempre me obligaban a utilizar "San Google" preguntándome/le porque el NetBeans no me colorea la palabra Operator y la respuestas que me he encontrado son que java no soporta la sobrecarga de operadores , aunque según he leído si lo utiliza internamente, esto es fácilmente deducible ya que para concatenar 2 cadenas de caracteres se utiliza el signo + al igual que para sumar 2 enteros.
No pienso enrollarme mucho en este post, existen multitud de tutoriales donde explican como funciona la sobrecarga de operadores, tan solo os voy a plasmar el código de una práctica de la facultad en una y otra plataforma, y dejaré que seáis vosotros los que opinéis. La practica requería implementar una clase para trabajar con fracciones matemáticas, también llamados quebrados, a muchos al igual que a mi seguro se os ocurriría que es el típico ejercicio para utilizar la sobrecarga de operadores, al igual que si os comentan el problema de hallar el factorial de un número, se os puede venir a la mente que es el típico ejercicio de recursividad, pero como ya comenté, java no soporta sobrecarga de operadores .
Este sería el código del ejercicio en Java:
Como podéis apreciar es un código bastante sencillo, en donde podemos realizar las operaciones básicas (sumar, restar, simplificar,etc.) con las fracciones, si eres programador en .NET o en C++ o algún otro lenguaje que soporte sobrecarga de operadores, seguramente se te habría ocurrido algo similar a esto:
Bueno, pues aquí está el código de la misma clase para VB.NET, no me voy a meter a fondo a comparar los códigos, pero si señalar un par de detalles. En primer lugar como habréis visto, en esta clase sobrecargado los operadores +,-,*,/ he intentado mantener la misma estructura que marcaba el ejercicio en Java para poder hacer la comparación. Alguien podría pensar que porque no he sobrecargado el operador= para comparar 2 quebrados, bueno creo que es una buena práctica sobrescribir los métodos heredados de la clase Object y también he querido aproximar mi implementación a la propuesta por el ejercicio en Java que me han puesto en la facultad.
Ahora veamos un ejemplo de uso de la clase quebrado y como operar con ella en ambos lenguajes:
JAVA
VB.NET (creo que si lo hubiese hecho en C#, no cambiaba nada salvo el soporte a operadores)
- Operación: (a+b*c) / (d+a)
- Java: (a.mas(b.por(c))).div((d.mas))
- .NET: (a+b*c) / (d+a)
Otra cosa a destacar es que con la sobrecarga no sólo está orientada resolver problemas de ámbito matemático, tal y como comentaba al principio del post sobre la sobrecarga del operador + para concatenar cadenas, nosotros también podremos implementar otro tipo de operaciones
Evidentemente siempre que el uso de operadores tiene sentido siempre y cuando aporte algún beneficio a nuestros desarrollos sobre legibilidad, abstracción, etc.
Nos leemos, René Pacios.
No hay comentarios:
Publicar un comentario