Atributos (Parte I)

Delphi Prism, Delphi Win32 3 Comentarios »

Bueno pues para comenzar mis entradas técnicas voy a escribir acerca de un concepto de programación que no sé si los programadores Delphi usen en sus aplicaciones los “Atributos”. Debo confesar que yo no conocía su utilidad hasta que entre al mundo .NET, recuerdo que cuando comencé a leer sobre los atributos no entendí su utilidad si no hasta ahora que los estoy aplicando en un proyecto real. En ese entonces Delphi Win32 todavía no los soportaba y me preguntaba ¿hasta cuando los implementaría? No recuerdo bien en que versión de Delphi Win32 fueron soportados pero sé que en la versión 2010 si están soportados.

Voy a tratar de explicarlos de forma general, es decir, tanto para Delphi Prism como para Delphi Win32, hablo un poco más de los atributos dentro de .NET porque fue donde aprendí a usarlos pero pondré ejemplos también en Delphi win32.

Bueno sin más preámbulos comencemos.

Concepto

El atributo es un concepto ya con algún tiempo en la programación, y es utilizado mucho dentro del .NET Framework. La idea es que (independientemente del lenguaje que usemos) algunos aspectos de una aplicación no pueden expresarse con simples instrucciones ejecutables. Por ejemplo, todos los lenguajes anteriores a .NET ofrecí¬an su propia forma de definir propiedades en el nivel de proyecto, como el nombre de la aplicación y la versión, y en lenguajes como C++ utilizan programas para modificar el comportamiento del compilador. Antes del .NET Framework, no habí¬a ninguna consistencia en la manera de asociar esta información con el código; cada lenguaje tení¬a su propia forma, y diferentes tipos de información con frecuencia requerí¬an técnicas distintas, aun dentro del mismo lenguaje. Lo peor es que no podí¬amos extender estas técnicas para definir tipos de información para nuestros propósitos.

Los atributos de .NET resuelven todos estos problemas y ofrecen una forma dinámica y estándar para asociar información adicional con piezas especificas de código. En la práctica, los atributos nos permiten extender los metadatos asociados con un ensamblado, una clase o un método. Lenguajes diferentes utilizan una sintaxis ligeramente distinta para los atributos, pero hay un mecanismo unificado, denominado reflexión (RTTI en Delphi Win32), para recuperar todos los atributos asociados con un fragmento de código. Mejor aún, los atributos en sí¬ son un tipo de datos y es posible definir atributos personalizados con la simple creación de una clase nueva que se herede de System.Attribute en Delphi Prism y TCustomAttribute en Delphi Win32.

Podemos considerar a los atributos como anotaciones que intercalamos en nuestro código. Es posible aplicar atributos a casi cualquier entidad de programación que soporta Delphi y Prism, incluidas las clases, registros, propiedades, métodos y enumeraciones. No todos los atributos pueden aplicarse a todas las entidades, pero la sintaxis general que se emplea para insertarlos es consistente en cada lenguaje de .NET. Por ejemplo, todos los atributos de Delphi Prism requieren una sintaxis idéntica, que es diferente de la sintaxis de C# o Visual Basic .NET.

Bajo Delphi Prism un atributo se encierra ente corchetes ([ ]) y se inserta antes del elemento al que se hace referencia. Por ejemplo, podemos aplicar System.ComponentMo- del.DescriptionAttribute (que lo que hace es asignar una descripción a un miembro del código, para después saber para que se utiliza) a una clase como sigue:

 type
  [System.ComponentModel.Description('Persona')]
   TPersona = public class
    private
    public
   end;

Y en Delphi Win32 podríamos aplicar el atributo TNoCadenaVaciaAttribute para validar que una propiedad de tipo String no pueda quedar vacía:

TGiros = class
   private
    FNombre : string;
    FModoMuestra : TModoMuestra;
    FErroresValidacion : TList<TResultadosValidacion>;
    FID_Giro : Integer;
    FError : string;
    procedure LlenaDatosModifica;
    procedure Set_Errores(AErrores : TList<TResultadosValidacion>);
    procedure Set_ModoMuestra(AValue : TModoMuestra);
    function Get_Errores : TList<TResultadosValidacion>;
   public
    constructor Create;
    destructor Destroy;override;
    function EsValido : Boolean;
    function Guardar : Boolean;
    function Eliminar : Boolean;
    [TNoCadenaVaciaAttribute('edtNombre','Falta dato : El giro requiere un nombre')]
    property Nombre : string read FNombre write FNombre;
    property ID_Giro : Integer read FID_Giro write FID_Giro;
    property ModoMuestra : TModoMuestra read FModoMuestra write Set_ModoMuestra;
    property Errores : TList<TResultadosValidacion> read Get_Errores write Set_Errores;
    property Error : string read FError write FError;
  end;

Hasta aquí vamos avanzando, pero quiero que quede claro ¿qué son los atributos? Vamos a resumir. Los atributos son la forma de indicar dentro del código fuente que ciertos métodos, propiedades o clases tienen un comportamiento especial que los hacen diferentes de los otros y este comportamiento especial es definido mediante los atributos y esto con la finalidad de poder incluir toda una serie de metadatos dentro del código ejecutable para que sirva a nuestros propósitos o a los del entorno de ejecución. En pocas palabras, es mediante el uso de atributos como .NET sabe la mayoría de cosas sobre el código que está ejecutando, así como su comportamiento.
En el ejemplo anterior el atributo “TNoCadenaVaciaAttribute” está indicando al compilador y al entorno de ejecución que la propiedad asociada no puede contener cadenas vacías. Con el simple echo de asociar el atributo “TNoCadenaVaciaAttribute” a la propiedad nombre el compilador ya sabe que la propiedad “Nombre” no puede contener cadenas vacías, aunque realmente hay un trabajo oculto, pero esto lo veremos en el siguiente post.

De regreso!!!

Uncategorized 1 Comentario »

Bueno, después de mucho tiempo sin blog y sin escribir (y no por falta de material, es por falta de tiempo) pues estoy de vuelta.

No había podido escribir por tanto trabajo que tengo, pero me anime porque mi amigo Edgar Ramírez (Poliburro) ya lo hizo y pues no me quiero quedar atrás, además de que tengo mucho que compartir con la comunidad Delphi.

Espero esta vez si quedarme por un buen tiempo y estar escribiendo seguido.  Poco a poco iré mejorando mi blog (tanto en apariencia como en contenido) espero que sea de su agrado.

Cabe mencionar que tengo pensado escribir acerca de Delphi Win32, Delphi Prism (que aunque hay incertidumbre de si seguira siendo Prism o Oxygene también voy a escribir acerca de él) y SQL Server principalmente.

Tema de Wordpress & Iconos creados por N.Design Studio y traducido por Carballo de enGeneral
RSS Entradas RSS Comentarios Log in