Está en la página 1de 5

Programacin con Atributos

Que son los atributos?


El trmino atributo puede resultar un tanto confuso para quienes no estn habituados a la terminologa .NET, si se tiene en cuenta que este se utiliza en teora de Programacin Orientada a Objetos para referirse a las variables principales de una clase que sirven para almacenar los datos bsicos de los objetos que posteriormente se definirn con ella, o lo que tambin suele identificarse como campos. Sin embargo en la programacin orientada a objetos moderna el trmino atributo se maneja en otro contexto y hace referencia a informacin extra que se adhiere a una clase o a los elementos que la componen. Los atributos son elementos que permiten incluir directivas en las clases y sus elementos para suministrar informacin extra que pueda ser utilizada por el compilador o por otras clases en tiempo de ejecucin. Esta informacin puede exigir que un programa se compile de una u otra forma, dependiendo de las condiciones que se presenten en el momento mismo del proceso, y de hecho determinar la forma como se vaya a ejecutar el cdigo de programacin. En general un atributo es una clase que se deriva de la clase System.Attribute, definida en la biblioteca de clases del Framework .NET. As, por ejemplo, la clase CampoTablaAttribute, definida como se muestra en seguida, es un atributo:
public class CampoTablaAttribute : Attribute { string nombreCampo; public CampoTablaAttribute(string nombreCampo) { this.nombreCampo = nombreCampo; } }

La funcin principal de los atributos consiste en asociar metadatos personalizados a los elementos de un programa. Para esto es importante tener en cuenta que, desde la perspectiva informtica, un metadato cumple la funcin de suministrar informacin relacionada con uno o varios datos especficos, y por esto se dice que un metadato es un dato de un dato. En la programacin con .NET estos metadatos son embebidos dentro del ensamblado durante el proceso de compilacin del mismo.

El Framework .NET incluye en su biblioteca de clases muchos atributos que en su gran mayora cumplen con la funcin principal de suministrar informacin al compilador para determinar la forma como este debe realizar el proceso de compilacin y en consecuencia manipular el comportamiento mismo de un programa dependiendo de las condiciones que puedan darse en tiempo de ejecucin. El otro grupo de atributos correspondera a aquellos que puede definir el programador, como el que pusimos de ejemplo anterior. Estos ltimos tienen la funcin bsica de suministrar informacin de un elemento de programa para que pueda ser utilizada por otras partes del mismo. Pero, antes de entrar a construir nuestros propios atributos, es importante tener bien clara la funcionalidad de los mismos y una buena forma de lograrlo puede ser analizando como funcionan los atributos ya definidos en el Framework .NET.

El atributo ConditionalAttribute
Para entender mejor el concepto de atributo vamos a iniciar con un sencillo ejemplo que hace uso del atributo ConditionalAttribute incluido en la biblioteca de clases del Framework .NET. Este atributo tiene la funcin de condicionar la compilacin de los mtodos de una clase dependiendo de si este proceso se hizo en modo DEBUG o en modo RELEASE. El siguiente proyecto desarrollado en SharpDevelop, al que se ha denominado

CondicionCompilacion condiciona la compilacin del mtodo Division de la clase OperacinMatematica al modo DEBUG. using System; using System.Diagnostics; namespace CondicionCompilacion { public class OperacionMatematica { int numero1 = 0; int numero2 = 0; public OperacionMatematica(int numero1, int numero2) { this.numero1 = numero1; this.numero2 = numero2; } public void Adicion() { int resultado = numero1 + numero2; Console.WriteLine("Suma = {0}", resultado); } [ConditionalAttribute("DEBUG")] public void Division() { int resultado = numero1 / numero2; Console.WriteLine("Cociente = {0}", resultado);
2

} } class Programa { public static void Main(string[] args) { OperacionMatematica operacion; operacion = new OperacionMatematica(30, 5); operacion.Adicion(); operacion.Division(); Console.ReadKey(true); } } }

Lo primero que se debe hacer para utilizar el atributo ConditionalAttribute es incluir el espacio de nombres System.Diagnostics. En seguida se han definido dos clases que conforman el programa de prueba: OperacionMatematica y Programa. La clase OperacionMatematica hace uso del atributo ConditionalAttribute para informarle al compilador que debe compilar el mtodo Division nicamente cuando se haga en modo DEBUG. La segunda clase tan solo implementa el mtodo Main, en el cual se construye un objeto con la clase anterior y se hace un llamado a los mtodos que lo conforman. Si el lector compila y ejecuta el programa en modo DEBUG observar que en la ventana de comandos aparece una salida similar a la siguiente:
Suma = 35 Cociente = 6

En cambio, si la compilacin se hace en modo RELEASE la salida ser similar a la siguiente:


Suma = 35

Lo anterior nos muestra que en la primera compilacin se incluyen todos los mtodos de la clase OperacionMatematica, mientras que en la segunda compilacin no se incluye el mtodo Division al cual se le ha asignado la directiva [ConditionalAttribute("DEBUG")]. Podemos observar claramente que este atributo le informa al compilador cuando debe compilar el mtodo al cual se ha asignado. Adems, en la compilacin en modo RELEASE se ignorar cualquier llamado que se haga al mtodo Division, lo cual garantiza que no se generar ningn error de compilacin por la exclusin del mismo.

El atributo ObsoleteAttribute
Antes de continuar con el uso de atributos es necesario aclarar que por cuestiones de nomenclatura y manejo apropiado de las directrices de codificacin se acostumbra a identificar todas las clases que representan atributos con el sufijo Attribute. Pero en el llamado que se hace de estas clases, la mayora de lenguajes .NET obvian el uso de este sufijo sin que esto implique
3

problema alguno de compilacin. As, por ejemplo, el atributo ObsoleteAttribute puede codificarse simplemente como Obsolete. Esta es un simplificacin resultado de una pequea ayuda que nos da .NET. El atributo Obsolete puede aplicarse a cualquier tipo de C#, excepto a parmetros y valores devueltos. Su funcin es informar al programador que algunos fragmentos de cdigo se han declarado obsoletos y que se han reemplazado por otros o ya no son vlidos de usar. Esto es muy frecuente en la implementacin de nuevas versiones de componentes cuando se ha decidido eliminar una parte del cdigo que se inclua en la antigua versin, pero se desea mantener la compatibilidad con las nuevas implementaciones. La clase ObsoleteAttribute define las propiedades Message e IsError que se encargan de suministrar la informacin necesaria que necesita el compilador para decidir que hacer con los tipos que han sido marcados como obsoletos. Al asignar el valor true a la propiedad IsError el compilador produce un error y genera una cadena de texto sobre dichom, la cual se puede leer a travs de la propiedad Message. El valor por defecto de la propiedad IsError es false lo cual hace que se produzca siempre una aviso cuando se compila el cdigo. El siguiente ejemplo muestra el uso del atributo Obsolete aplicado a la clase LineaRecta:
using System; namespace ClaseObsoleta { class Programa { public static void Main(string[] args) { LineaRecta linea = new LineaRecta(); linea.Largo = 10; linea.Dibujar(); Console.ReadKey(true); } } [Obsolete("Ya existe una clase grfica para esta tarea")] public class LineaRecta { int largo; public int Largo { get { return largo; } set { largo = value; } } public void Dibujar() { for (int i = 0; i < largo; i++) { Console.Write("_"); }
4

Console.WriteLine(); } } }

Al compilar el programa, aunque el proceso se ejecuta completamente, se genera una mensaje de advertencia que corresponde al mensaje asignado al atributo. En este caso el compilador identifica que a la clase LineaRecta se le ha fijado el atributo Obsolete, lee el mensaje que se ha asignado a dicho atributo y finalmente genera el metadato necesario que se escribe sobre el ensamblado de este programa. A su vez el IDE lee el mensaje incluido en los metadatos del ensamblado y lo muestra por medio de la consola de salida. Igual que los anteriores existe una infinidad de atributos integrados en el Framework de .NET. Los ms utilizados son aquellos que le permiten al desarrollador de componentes para interfaces grficas, como los que se agregan a la ventana de Herramientas de los IDEs, suministrar de una forma muy sencilla la informacin necesaria que se debe mostrar en la ventana Propiedades cuando uno de ellos es seleccionado. En estos casos el compilador genera los metadatos necesarios que le permitirn al IDE cargar y mostrar dicha informacin en el lugar y la forma apropiados.
2012 - Tangua, Colombia

También podría gustarte