Beruflich Dokumente
Kultur Dokumente
Facultad de Ingeniera
Departamento de Ingeniera Informtica
Paradigmas de programacin
Parametrizacin, sobrecarga
y espacios de nombres
TIPOS DE DATOS ABSTRACTOS PARAMETRIZADOS
Como hemos visto en clases anteriores, uno de los pilares fundamentales de la POO
corresponde a los tipos de datos abstractos. Se ha estudiado la herencia como una
estrategia para la reutilizacin de cdigo y el aumento de la productividad. Sin
embargo, muchas veces resulta engorroso crear una nueva subclase a partir de la clase
padre para dar soporte a un nuevo tipo de dato que slo se diferencia en uno que otro
detalle. Esto es especialmente cierto para los tipo de datos colecciones.
Una coleccin es una clase que representa un conjunto de objetos y define mtodos
para trabajar sobre ese conjunto. Por ejemplo, en clases anteriores se defini un mtodo
que recibe como parmetro una lista de automviles.
Lista de automviles
// Metodo que recorre la lista de automoviles y llama al
// metodo DibujaAuto
public static void MuestraAutomovilesSimple(List<Automovil> unidades) {
// Por cada automovil en la lista...
foreach (Automovil automovil in unidades)
{
// ...Llama al metodo DibujaAuto()
automovil.dibujaAuto();
}
}
La clase List recibe como argumento (entre parntesis angulares) el tipo de dato
abstracto Automovil. Esto quiere decir que la lista contendr slo objetos de la clase
especificada y que los mtodos de List trabajarn sobre este tipo de dato abstracto.
En C# al igual que en JAVA los tipos de datos parametrizados se conocen como
Generics. Estas clases y mtodos proveen reusabilidad, type safety (chequeo de tipos)
y eficiencia. La clase List as como otras clases genricas que representan colecciones
de objetos (collections) se pueden encontrar en el espacio de nombres
System.Collections.Generic.
1
Unidad 5 Programacin orientada a objetos 2-2013
http://msdn.microsoft.com/en-us/library/512aeb7t(v=vs.110).aspx
SOBRECARGA
La sobrecarga permite que operadores y mtodos se comporten de distinta manera
dependiendo de los parmetros actuales ingresados.
2
Unidad 5 Programacin orientada a objetos 2-2013
SOBRECARGA DE OPERADORES
Muchos lenguajes de programacin incluyen sobrecarga de operadores. Por ejemplo, la
operacin suma de enteros y la operacin suma de punto flotantes usualmente se
representan por el mismo smbolo, en este caso +. Cuando se suman un entero y un
punto flotante, se promueve el entero a punto flotante (casting implcito) para luego
realizar la suma de punto flotante. En lenguajes como JAVA y C#, la operacin
concatenar strings tambin se representa por el smbolo +.
As mismo, el programador tambin puede definir nuevos comportamientos para los
operadores de C#:
Sobrecarga del operador +
public class Complejo {
/*
* En C# es posible utilizar propiedades.
* En este caso utilizamos propiedades auto implementadas
* para los metodos get y set.
* Ms informacion en:
* http://msdn.microsoft.com/es-es/library/x9fsa0sw(v=vs.110).aspx
*/
public int Real { get; set; }
public int Imaginario { get; set; }
// Constructores de la clase complejo
// Mas sobre this en
// http://msdn.microsoft.com/es-es/library/dk1507sz(v=vs.110).aspx
public Complejo() {
this.Real = 0;
this.Imaginario = 0;
}
public Complejo (int real, int imaginario) {
Real = real;
Imaginario = imaginario;
}
// Se define un metodo que sobrecarga el operador "+" para definir
// la suma de complejos. Note el uso de la palabra reservada operator
public static Complejo operator +(Complejo opIzq, Complejo opDer) {
return new Complejo (
opIzq.Real + opDer.Real, opIzq.Imaginario + opDer.Imaginario);
}}
3
Unidad 5 Programacin orientada a objetos 2-2013
http://msdn.microsoft.com/en-us/library/8edha89s(v=vs.110).aspx
SOBRECARGA DE MTODOS
A diferencia de la sobrecarga de operadores, la sobrecarga de mtodos depende no slo
del tipo de parmetros que recibe, sino tambin el nmero de stos, el tipo de
retorno e incluso, en algunos casos, el orden de los parmetros. En el cdigo visto
anteriormente, se definen dos constructores para la clase complejo: uno que no recibe
parmetros y otro que recibe dos enteros. En este sentido, cada mtodo sobrecargado
tiene diferente protocolo (firma o declaracin).
En C# no es posible construir dos mtodos con el mismo nombre, parmetros de entrada
y diferente tipo de salida. En otras palabras, C# utiliza slo los parmetros de entrada
para encontrar el mtodo correcto en tiempo de ejecucin.
Los mtodos que normalmente se sobrecargan son los constructores de clases.
ESPACIOS DE NOMBRES
Hasta el momento hemos hablado de clases como el mecanismo (junto con las
estructuras en C#, que no hemos cubierto en los documentos) que provee la POO para
representar un tipo de dato abstracto. El proceso de abstraccin de datos se ve reflejado
en una clase, la cual encapsula atributos y mtodos necesarios para representar y operar
con el nuevo tipo de dato.
4
Unidad 5 Programacin orientada a objetos 2-2013
5
Unidad 5 Programacin orientada a objetos 2-2013
Cmo defino qu clase estoy utilizando? Esto se hace a travs de la palabra reservada
using. En el cdigo anterior, si se quiere utilizar la clase List<T> implementada por el
desarrollador basta con cambiar:
// Todas las referencias List<T> corresponde a la clase definida en
// el espacio de nombres System.Collections.Generic.
using System.Collections.Generic;
por:
// Todas las referencias List<T> corresponde a la clase definida en
// el espacio de nombres misContenedores.
using misContenedores;
En Java los espacios de nombres se definen con la palabra reservada package, y para
acceder a las clases se utiliza la palabra reservada import.
Tambin es posible acceder a clases encapsuladas en un espacio de nombre sin
necesidad de utilizar using. Por ejemplo:
System.Console.writeLine();
6
Unidad 5 Programacin orientada a objetos 2-2013