Atributos en .NET. Definición de atributos

Introducción

Una de las posibilidades que incluye .NET es el uso de atributos para proporcionar metainformación añadida a las distintas partes del código que creamos.

Los atributos de .NET nos proporcionan una poderosa herramienta para añadir información a nuestras clases, métodos, propiedades etc.

Un atributo puede aplicarse puede aplicarse sobre cualquier elemento básico de .NET es decir, clases, eventos, propiedades, métodos, etc y añadirá información a dicho elemento que posteriormente podremos consultar en tiempo de diseño, compilación o ejecución.

Aspect Oriented Programming (Programación orientada a aspectos)

El uso de atributos nos permite acercar la programación en .NET al concepto de AOP, que son las siglas inglesas de Aspect Oriented Programing o Programación arientada a aspectos.

Para comprender correctamente en que consiste el paradigma de programación orientada a aspectos debemos partir de la base de las limitaciones de la programación orientada a objetos. En el paradigma orientado a objetos, el concepto de herencia describe las relaciones jerárquicas entre los distintos objetos que a su vez modelan el mundo real (o conceptos de este).

Tutorial de SQL. SELECT Parte I

Introducción

En la entrega anterior vimos una pequeña introducción al comando SELECT de SQL. En él vimos el uso más básico de este comando, es decir, su uso para realizar consultas sencillas de selección y obtener datos de una o varias tablas.

En un 90% de las situaciones ese será el tipo de consultas que utilicemos, sin embargo en ocasiones, ese 10% restante, necesitamos algo más preciso, un comando de selección que nos permita obtener justamente los datos que necesitamos y que no se refieren directamente a una tabla sino que son, quizá, suma de dos o más tablas, intersecciones, obtener los resultados agrupados, ordenados, etc... La sentencia SELECT nos permite hacer todo este tipo de cosas.

Sintaxis

Como ya vimos en la introducción anterior la sintaxis general de una consulta de selección SELECT es la siguiente:

SELECT Tabla1.campo1, Tabla2.campo2 FROM Tabla1, Tabla2 WHERE condiciones

aunque una descripción más detallada es

SELECT [DISTINCT] t1.campo2 [AS NombreCampo1], t2.campo2 [AS NombreCampo2] {,....}
[FROM Tabla1 [t1], Tabla2 [t2] {,...} WHERE condiciones]
[GROUP BY {campos}]
[HAVING condiciones]
[ORDER BY {campos}]

Tutorial de SQL. Introducción

Introducción

SQL son las siglas de Structured Query Language, que traducido significa Lenguaje de consulta estructurado y que es el estandar de facto para acceso a base de datos.

En lenguaje SQL surgió a raiz de la creación en IBM durante la decada de los 70 de un sistema de base de datos llamado "System R". Para manipular y recuperar datos de dicho sistema se diseño un lenguaje llamado SEQUEL (Standard English Query Language) que finalmente se convertiría en SQL (la historia del cambio de nombre es curiosa y se debió a que el nombre SEQUEL ya estaba registrado por otra compañía, aún así hoy en día una de las pronunciaciones para SQL es, precisamente SEQUEL).

Este no pretende ser un tutorial de base de datos sino una pequeña introducción a SQL de forma que es recomendable saber algo de bases de datos antes de meterse en SQL. Es conveniente saber lo que es una base de datos, su estructura y cuanto menos algunos conceptos básicos (como el hecho de que está organizada en tablas, campos y registros). Si no lo has hecho ya y no tienes esos conceptos sería mejor que comenzaras por la Introducción a Bases de Datos. Además esto es, como se indica, solo una introducción, en posteriores entregas iremos viendo métodos más complejos, especialmente en lo que a los operadores de selección se refiere e iremos entrando con más profundidad en cada uno de ellos.

Introducción a Bases de Datos

Introducción

En estos tiempos, con las modernas aplicaciones informáticas que existen hoy en día, los programadores en ocasiones olvidamos que tanto los propios ordenadores como los programas que ejecutan sobre ellos no son más que procesadores de datos, procesadores rápidos, pero procesadores a fin de cuentas.

Los programas en realidad recojen datos del usuario, de archivos en el ordenador, de la entrada de los periféricos y los transforman para producir otros datos. Una aplicación como el photoshop por ejemplo recoje los datos almacenados en forma de bytes en un fichero y permite al usuario mediante la introducción de toda una serie de datos modificarlos para crear otra imagen distinta. La tarjeta gráfica transforma una serie de datos en forma de stream de bytes en secuencias de 24 bits que a su vez el monitor transforma en pixels en la pantalla.

Todo en informática está basado en los datos. Mucha gente, cuando oye hablar de base de datos automáticamente piensa en Microsoft Access o en Oracle o en cualquiera de los motores de bases de datos disponibles en el mercado. En realidad una base de datos es, como su nombre indica, cualquier almacen de datos, ni siquiera es en realidad necesario que dicho almacen sea informático, el termino podría valer para cualquier almacen de datos, como por ejemplo una biblioteca. Las bases de datos actuales, con su organización y sus características propias (SQL, indices, etc) responden a una necesidad creciente de acceder a los datos de la forma más rápida y estructurada posible.

Comentado de código y documentación.

Table of Contents [hide]

Comentando código

Realizar comentarios en el código es algo fundamental para la mantenibilidad de este cuando lo volvamos a coger más adelante.

Muchas veces, sobre todo en los proyectos esos que son "para anteayer" las prisas y la necesidad de tener la versión o el producto listo para una determinada fecha hacen que los comentarios de código sean escasos, malos o inexistentes.

Al contrario de lo que puedan decir por ahí no voy a decir, "comenta siempre aunque tengas que retrasarte"; nada más lejos de la realidad, acaba el proyecto, entregalo y consigue el dine

Safeguards en Delphi.

Introducción

Los safeguards son el nombre que recibe un ingenioso mecanismo que nos permite, en cierto sentido, olvidarnos de los problemas asociados a liberar memoria en Delphi y que simulan de alguna forma el funcionamiento de un recolector de basura. En C++, para aquellos que han trabajado alguna vez con él, este mecanismo se conoce como Smart Pointers.

El truco

El truco para "olvidarnos" de liberar los objetos cuando terminamos con ellos consiste en el uso de interfaces. En delphi los interfaces incorporan un mecanismo de conteo referencial automático. Esto significa que cuando no se van a usar más (por ejemplo cuando salen de ámbito o cuando se "sobreescriben" y no quedan referencias al objeto que implementa dicho interface) se destruyen automáticamente.

Utilizando esto podemos utilizar el mecanismo de Safeguards para encapsular cualquier objeto dentro de un interface de forma que cuando dicho interface se destruya (porque cualquiera de los motivos expuestos antes) nuestro objeto se libere automáticamente sin que tengamos que preocuparnos nosotros de ello.

Aplicaciones Multihilo en Delphi. Multihilo y el BDE

Introducción

Uno de los problemas del multihilo en Delphi se da a la hora de acceder a la base de datos. En Delphi no podemos sencillamente ejecutar el siguiente código desde una tarea por que, probablemente, nos de un error en tiempo de ejecución

procedure MiAccesoABD;
var
  qry : TQuery;
begin
  qry.DatabaseName := 'MiBaseDeDatos';
  qry.Sql.Add('SELECT * FROM Productos');
  qry.Open;
  .
  .  // Más código
  .
end;

El mundo del runtime en delphi.

Tiempo de diseño y tiempo de ejecución

En Delphi existen dos conceptos que suelen surgir bastante a menudo, tiempo de diseño (design time) y tiempo de ejecución (run time).

El concepto de tiempo de diseño se refiere, de alguna forma, al sistema de diseño del IDE de Delphi, es decir, la parte en la que arrastramos forms, botones, campos de texto, etc ... y los situamos en las posiciones que queremos, es decir, realizamos el diseño de nuestra aplicación.

El tiempo de ejecución se refiere al tiempo durante el cual el programa esta ejecutando, es decir, el tiempo de vida de la aplicación.

Tiempo de diseño vs Tiempo de ejecución

Cuando estamos creando nuestra aplicación, la forma más natural de definir el aspecto de esta ir creando los forms que necesitemos e ir añadiendo botones, campos de texto y otros y situandolos en pantalla hasta encontrar el diseño que buscamos.

Aplicaciones Multihilo en Delphi. Primitivas de sincronización de Windows

Introducción

En las anteriores partes, en los dos primeros articulos, hemos visto como crear y sincronizar hilos usando las clases predefinidas de Delphi. Estas clases son en realidad un encapsulamiento de las primitivas que nos proporciona windows para el control de hilos de ejecución pero hay determinadas cosas que no se pueden hacer con ellas y debemos recurrir directamente a los servicios que nos proporciona el sistema operativo.

Aplicaciones Multihilo en Delphi. Los problemas del multihilo

Introducción

En los dos artículos anteriores hemos visto una pequeña introducción a la programación multihilo en delphi así como a las funciones de sincronización que Delphi proprociona. Estas funciones de sincronización y el mero hecho de programar usando varios hilos tiene aparejados una serie de problemas a los que deberemos hacer frente si queremos que nuestra aplicación funcione correctamente y sin problemas.

Condición de carrera y exclusión mútua

Una condición de carrera es una situación indeseable en programación y que consiste en que el correcto funcionamiento del programa (o de un segmento del código del programa) depende del orden de ejecución de las tareas.

El problema principal de las condiciones de carrera es que son dificiles de identificar y encontrar y, dado que dos ejecuciones de un mismo programa pueden tener dos planificaciones completamente distintas para sus hilos, muy dificiles de reproducir.