Tema: Sobrecarga.

Anuncio
Programación II. Guía No. 7
1
Facultad:
Ingeniería
Escuela:
Computación
Asignatura: Programación II
Tema: Sobrecarga.
Objetivos

Describir como redefinir (sobrecargar) operadores para que funcionen con nuevos tipos de
datos.

Diferenciar sobrecarga de operadores binarios y unarios.

Identificar cuando sobrecargar operadores.

Implementar programas en C# que sobrecarguen operadores unarios.
Materiales y Equipo
 Computadora con Visual Studio 2013.
 Guía Número 7.
Introducción Teórica
Recordemos que los operadores son un tipo de tokens que indican al compilador la realización
de determinadas operaciones sobre variables u otros objetos (los operandos).
Por ejemplo, cuando encontramos una expresión del tipo:
z = x + y;
// suponemos que x, y, z son de tipo int (1)
Sabemos que la sentencia contiene dos operadores; el de suma (+) y el de asignación (=); que
estos operadores actúan (operan) sobre objetos de tipo int, y que sus reglas de uso y su
significado (que resultados se obtienen) están perfectamente definidos en el lenguaje.
Los operadores aceptan uno o varios operandos de tipo específico (alguno de los tipos básicos
preconstruidos en el lenguaje), produciendo y/o modificando un valor de acuerdo con ciertas
reglas.
Sin embargo, C# permite redefinir la varios de ellos. Es decir, permite que puedan aceptar otro
tipo de operandos (distintos de los tipos básicos) y seguir otro comportamiento, al tiempo que
2
Programación II. Guía No. 7
conservan el sentido y comportamiento originales cuando se usan con los operandos
normales.
Esta posibilidad, que recibe el nombre de sobrecarga del operador, es una consecuencia del
polimorfismo y hace posible que en la expresión:
c = d + e;
// suponemos que c, d, e son de tipo UnaClase (2)
el sentido de la suma y el de asignación sean totalmente específicos y distintos que el de la
expresión “1” anterior cuando se utilizaron los mismos operadores con operandos tipo int.
NOTA: La primera e importantísima advertencia es que la sobrecarga se refiere y tiene
aplicación solo cuando los operandos son instancias de clases. Es decir, no es posible
modificar el sentido de la suma y asignación de la expresión “2” si c, d y e fuesen enteros o de
cualquiera de los tipos básicos preconstruidos en el lenguaje.
La sobrecarga de los operadores es una de las características más interesantes de C# y,
naturalmente, de la programación orientada a objetos.
La sobrecarga hace posible manipular objetos de clases con operadores estándar tales como
+, *, [ ] y <<.
Esta propiedad de los operadores permite redefinir el lenguaje C#, que puede crear nuevas
definiciones de operadores.
La sobrecarga es una característica que ofrece el lenguaje C# para aplicar una misma
operación, a través de operadores o funciones, a diferentes tipos de datos.
Se pueden sobrecargar los operadores predefinidos y funciones definidas por el usuario.
La sobrecarga permite generalizar el uso de operadores y funciones.
Sobrecarga de Operadores.
Es el proceso de asignar dos ó más operaciones al mismo operador.
En otras palabras, permite asignar una o más funciones adicionales a un operador estándar,
con el fin de que ésta sea llamada según el contexto en el cual se utilice el operador.
Un operador sobrecargado no puede tener parámetros predeterminados.
Para sobrecargar un operador, y aplicarlo en operaciones entre clases, se usa la función
especial operador.
Programación II. Guía No. 7
3
Una función operador es una función cuyo nombre consta de la palabra reservada operator
seguida de un operador unitario o binario que se sobrecargará.
La sintaxis para sobrecargar un operador es la siguiente:
public static <tipo de dato retornado> operator <operador a sobrecargar> (lista de
parámetros)
{
//instrucciones que forman el cuerpo del operador
}
Donde:

tipo de dato: indica el tipo de dato que produce el operador sobrecargado, por lo
general es la referencia del objeto y es lo que se retornará.

operator: es una palabra reservada utilizada para realizar la sobrecarga.

Operador a sobrecargar: operador que estamos sobrecargando.

Lista de parámetros: es la lista de objetos (en referencia) o variables que se
procesarán en la sobrecarga.
Operadores sobrecargables.
El lenguaje C# permite redefinir la funcionalidad de los siguientes operadores:
+, -, !, ~, ++, --, true, false, +, -, *, /, %, &, |, ^, <<, >>, ==, !=, <, >, <=, >=, &&, ||, [ ], +=, -=, *=,
/=, %=, &=, |=, ^=, <<=, >>=
Los operadores +, - son sobrecargables en sus dos versiones, unaria y binaria.
Es decir: suma binaria +; más unitario +.
Cabe mencionar que en el caso de los operadores de comparación la sobrecarga se hace por
pares: es decir == y != ; < y > ; <= y >=.
Excepciones:
Operadores que no pueden ser sobrecargados:
= .
?: ??
->
=>
f(x)
as checked unchecked default delegate is new sizeof
typeof
Sobrecarga de Operadores Binarios.
Un operador binario tiene dos operandos o argumentos, uno a cada lado del operador.
El operador “/”, por ejemplo, es binario. Algunos operadores tales como “+” son unitarios y
binarios, dependiendo de su uso.
4
Programación II. Guía No. 7
Sobrecarga de operadores unarios.
Se conocen también como operadores unitarios.
Un operador unitario es un operador que tiene un único operando, en otras palabras, es aquel
que actúa sobre un único operando. El operador “++”, por ejemplo es unario.
Sobrecarga de funciones o métodos.
La sobrecarga de funciones es el proceso de definir dos o más funciones, con el mismo
nombre, que difieren únicamente en los parámetros que requieren y en el tipo de resultado que
generan.
Este tipo de sobrecarga resulta ser una poderosa herramienta de programación. Sin embargo,
debe ser cuidadoso su uso ya que si se utiliza excesivamente el programa podría resultar poco
legible. Además, es importante considerar que no es posible definir dos funciones que difieran
sólo en el tipo de resultado. Deben hacerlo también en la lista de parámetros.
¿Cómo determina C# la función sobrecargada correcta?
Lo determina en base al número y tipo de parámetros pasados a la función sobrecargada.
C# requiere que al menos uno de los parámetros tenga un tipo diferente del que utilizan otras
funciones.
Por consiguiente, es válido declarar dos funciones sobrecargadas, tales como:
int F (int a, int b, int c);
int F (int a, int b, float c);
C# puede llamar a ambas funciones, ya que al menos uno de los valores de los parámetros
tiene un tipo diferente. Sin embargo, si se intenta escribir una función sobrecargada que tenga
tipos similares, C# emitirá un error.
Por ejemplo, las definiciones siguientes no se compilarán, ya que el compilador no diferenciará
una de otra:
int F (int a, int b, int c);
int F (int a, int b, int c);
La sobrecarga de funciones es un tipo específico de polimorfismo. El polimorfismo es una de
las características fundamentales de la programación orientada a objetos.
Programación II. Guía No. 7
5
Procedimiento
Ejemplo
1:
Bibliografía
En C#, el operador de comparación == no permite comparar arreglos para saber si son
iguales
Guíao no,
1 pero ahora lo sobrecargaremos para ello.
Hay que recordar que por ser
comparación se sobrecargan en pareja con !=
Crear un proyecto nuevo y la clase con la que trabajaremos se llama ArregloF , en la clase es
donde crearemos el método para sobrecarga.
Funciones
para
sobrecargar
a == y !=
Ambas deben
ser
public
static
De
6
Programación II. Guía No. 7
En el programa principal:
Aquí
se
está
utilizando
sobrecarga
Ejemplo 2:
En este ejemplo se creará una clase llamada VectorEnteros
aplicando sobrecarga
unitaria haremos que los valores que originalmente almacenamos en el arreglo se
incrementen en una unidad.
Programación II. Guía No. 7
7
En el programa principal:
Aplicando
sobrecarga
unitaria
Ejemplo 3:
En este ejemplo no utilizaremos una clase adicional, sino solamente funciones que
estarán escritas dentro de la clase Program. El nombre genérico de esas funciones es
Prueba y en base a los parámetros que le demos será capaz de realizar tres acciones
diferentes.
De
tipo
static
para
que
no
necesitemos
una
instancia para su
invocación
Programación II. Guía No. 7
8
Análisis de Resultados
Ejercicio No. 1:
Modifique el código del ejemplo 1 de tal forma que se trabaje con vectores de caracteres. En
el primer vector se ingresará la palabra con normalidad y en el vector 2 se invertirá el orden.
Por ejemplo
Vector 1 = UNIVERSIDAD
Vector 2 = DADISREVINU
En dado caso los vectores sean iguales que muestre mensaje “PALÍNDROMO” caso contrario
que diga “NO ES PALÍNDORMO”
Ejercicio No. 2:
Modifique el código del ejemplo No. 2, de tal manera que el programa sea una simulación del
manejo de vectores en el espacio y que se maneje a través de un menú que contenga las
siguientes opciones:
a) Crear los objetos de tipo vector, solicitando los datos al usuario.
b) Realizar la suma de vectores.
c) Realizar la resta de vectores.
d) Encontrar el módulo de vectores
e) Realizar el producto escalar de vectores.
f)
Realizar el producto vectorial de vectores.
g) Salir de la aplicación.
El programa debe estar debidamente comentado.
Investigación Complementaria
Tarea No. 1:
Crear un programa que incluya dos funciones sobrecargadas:
Max: que permitirá encontrar el máximo entre dos números que pueden ser del tipo entero o
real de precisión doble.
Programación II. Guía No. 7
9
Raíz: que permitirá calcular la raíz cuadrada de un número que puede ser del tipo entero o
real de precisión doble.
La funcionalidad debe implementarse con un menú con las siguientes opciones:
Opción de menú 1: Encontrar el máximo de dos números introducidos por el usuario.
Opción de menú 2: Calcular la raíz cuadrada de un número introducido por el usuario.
Opción de menú 3: Salir del programa.
El menú deberá estar siempre activo, en la misma posición en pantalla, hasta que el usuario
seleccione la opción salir.
El programa debe estar debidamente comentado.
Tarea No. 2:
Investigue qué es el override, cómo se utiliza y en qué casos es más conveniente. Cree un
ejemplo de ello.
Qué es polimorfismo y cómo debe ser implementado en clases. Cree un ejemplo de ello.
Fuentes de consulta
https://msdn.microsoft.com/es-sv/library/8edha89s.aspx. Sitio de Microsoft C# sobrecarga de
operadores. Consultado febrero 2016.
Descargar