René Pacios

/* Overflow My Brain & More */

Por qué Java no y .NET sí? – Sobrecarga de operadores

Tal vez porque las prácticas de la facultad eran en Java o porque me pareció más sencillo empezar con .NET o por la cantidad de documentación que existe por la red, o porque al principio para mí fue tan fácil implementar auténticas burradas y que funcionasen igual, o por mil razones, la gente que me conoce es consciente de mi predisposición al uso de tecnologías Microsoft.
Bueno ya es la 3ª vez que copio reescribo este post que publiqué hace tiempo en otro sitio, pero montar un blog sin contenido creo que es como ir a misa y no rezar, que una vez que estás allí pues bueno….
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)
Como podéis apreciar con la sobrecarga de operadores nuestro código quedará bastante más legible con un lenguaje mucho más natural.
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.


Acerca de René

René Pacios es un apasionado de la tecnología, autodidacta, emprendedor, le encanta el desarrollo web, para moviles, aplicaciones, todo aquello que automatice tareas y haga que las máquinas trabajen para él. Es un gran fan de las tecnologías Microsoft, y le encanta estar a la última siempre que el tiempo se lo permite. Siempre quiso ser cantante, pero creo que en esta vida se va a quedar sólo en canta-mañanas

No hay comentarios:

Publicar un comentario