Tabla de Contenido
0. Introducción1. Problema
2. Solución
3. Discusión de la Solución
4. Práctica: Ejemplos en Código Fuente C#
4.1 Ejemplo Palabra
4.2 Ejemplo Número Complejo
5. Conclusiones
6. Glosario
7. Enlaces & Literatura
0. Introducción
Los
lenguajes de programación modernos poseen compiladores más robustos y sofisticados
capaces de llevar a cabo operaciones avanzadas sobre las construcciones
existentes y sobre las que puede construir el propio programador. El lenguaje
de programación C# no se queda atrás en este aspecto, y nos ofrece la
posibilidad de manipular las construcciones sintácticas de los operadores
estándar (+, -, *, /, entre muchos más como veremos más adelante).
¡Bienvenidos!
1. Problema
Se poseen tipos de datos en el modelo del dominio del problema candidatos para operaciones arbitrarias, y ahora al equipo de programación se le ha solicitado la refactorización de las clases que para actuar de manera arbitraria sobre los operadores estándar del lenguaje de programación C#: +, -, *, &c.
2. Solución
Gracias a que el lenguaje de programación C# permite la sobrecarga de operadores, podemos crear versiones sobrecargadas de los operadores estándar del lenguaje (i.e., +, -, *, !, --, ++, &c.) a través de dos construcciones clave: static y operator (en la siguiente sección hablaremos de esta palabra clave).
3. Discusión de la Solución
Por definición, una clase que sobrecarga un operador estándar (ver Figura 1 [3] de la lista completa de operadores sobrecargables) es requisito indispensable el uso de las siguientes construcciones:
- static
- operator [6]
Éste último es una palabra clave (o reservada, como prefieran) que debe especificarse en la firma del método. Así:
public static TipoRetorno operator +(Tipo, Tipo)
Particularizamos, y asumimos que TipoRetorno es string y en código cliente procederíamos de la siguiente manera:
string resultado = objTipo1 + objTipo1;
objTipo1 y objTipo2 son instancias de Tipo.
Por otro lado, la sobrecarga también de un operador está permitida en el ámbito de declaración de una clase de objeto, es decir, vale tener otro método de sobrecarga del operador + con un conjunto de argumentos (tipos y cantidad) diferentes. Veámoslo:
public static TipoRetorno operator +(Tipo, Int)
De este modo podríamos formar una sentencia con la expresión del lado izquierdo, así:
Tipo objTipo4 = objTipo3 + 7;
Como podemos observar en la sentencia anterior, el uso del operador (+) sigue siendo intuitiva y sencilla como lo haríamos con las versiones estándar definidas por la CLR.
Figura 1. Operadores estándar relacionados con la capacidad de sobrecarga. |
4. Práctica: Ejemplos en Código Fuente C#
Esta sección será muy interesante. Estará divida en dos ejemplos de aplicación de operadores sobrecargados para demostrar su utilidad en la composición de estructuras de datos: clases; que requieren sobrecargar cualquiera de los operadores estándar de la especificación del lenguaje de programación C#.
4.1 Ejemplo Palabra
En este primer ejemplo veremos cómo sobrecargar el operador de adición (+) para concatenar dos objetos de la clase Palabra, y, también el texto de una instancia Palabra con un número entero de 32 bits.
Archivo Palabra.cs:
Compilación:
- csc /target:exe /out:Palabra.exe Palabra.cs
Ejecución:
En la salida estándar obtendremos el siguiente resultado:
Archivo NumeroComplejo.cs:
Compilación:
Ejecución:
> Prueba de ejecución.
[Nota: En [5] y en [7] podrán encontrar otras descripción y ejemplos interesantes para ir más a fondo de este tópico.]
- ./Palabra.exe
En la salida estándar obtendremos el siguiente resultado:
Figura 2. Prueba de ejecución de Palabra.exe. |
4.2 Ejemplo Números Complejos
En este siguiente ejemplo veremos cómo podemos crear una clase para representar números complejos. La nueva clase con operadores sobrecargados tendrá la capacidad de adicionar, substraer, multiplicar números complejos.Archivo NumeroComplejo.cs:
Compilación:
- csc /target:exe /out:NumeroComplejo.exe NumeroComplejo.cs
Ejecución:
- ./NumeroComplejo.exe
> Prueba de ejecución.
[Nota: En [5] y en [7] podrán encontrar otras descripción y ejemplos interesantes para ir más a fondo de este tópico.]
Conclusiones
A lo largo de todo este artículo aprendimos cómo sobrecargar operadores a través de la descripción y uso sintáctico, y el reconocimiento de una nueva palabra clave (o reservada): operator. Luego a través de ejemplos prácticos, vimos su uso concreto en dos clases: Palabra, y NumeroComplejo. Este es el poder y flexibilidad expresiva del lenguaje de programación que otorga al programador de una herramienta para cumplir objetivos de desarrollo específicos.
Glosario
- CLR
- Construcción
- Estándar
- Lenguaje
- Operador
- Refactorización
- Sobrecarga
Enlaces & Literatura
[1]: Visual C# 2010 Recipes by Allen Jones and Adam Freeman. Copyright 2010 Allen Jones and Adam Freeman, 978-1-4302-2525-6.
[2]: Operator Overloading Tutorial (C#) - http://msdn.microsoft.com/en-us/library/aa288467%28v=vs.71%29.aspx
[3]:
Overloadable Operators (C# Programming Guide) - http://msdn.microsoft.com/en-us/library/8edha89s.aspx
[4]:
.net# operator overload for "+="? - Stack Overflow - http://stackoverflow.com/questions/6587107/c-sharp-operator-overload-for
[5]: C#
Operator Overloading - http://www.dotnetperls.com/operator
[6]:
operator (C# Reference) - http://msdn.microsoft.com/en-us/library/s53ehcz3.aspx
[7]: A
Beginner's Tutorial on Operator Overloading in C# - http://www.codeproject.com/Articles/452727/A-Beginners-Tutorial-on-Operator-Overloading-in-Cs
M
No hay comentarios:
Publicar un comentario
Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.