PDA

Ver la Versión Completa : Introducción a GH Freebrary


Al González
18-03-2013, 10:11:54
Generalidades y licencia

GH Freebrary es una biblioteca de programación Delphi de propósito general, disponible con todo su código fuente y libre de ser utilizada en cualquier proyecto y de ser adaptada a cualquier otro lenguaje, ya que su tipo de licencia es uno de los más permisivos: BSD (http://es.wikipedia.org/wiki/Licencia_BSD). Hubiera sido incongruente darle a este trabajo, hecho bajo un entorno de programación actualmente no libre (Delphi), una licencia restrictiva que solamente permitiera su uso en la construcción de software libre. La licencia BSD parece ser idónea, por ser una de las que más libertades otorga al usuario de un producto sin desconocer la autoría original del mismo.

Si alguna persona u organización emplea GH Freebrary para crear software libre, estupendo. Si utiliza esta biblioteca para crear software privativo, no hay problema. Si con ella alguien crea un producto con el cual consigue importantes ganancias, y no tiene la urbanidad de hacer un donativo a los autores de la biblioteca, tampoco habrá problema.

Objetivo

El objetivo de GH Freebrary es ayudar a crear más y mejores soluciones de software, en menor tiempo, a menor costo y con menos esfuerzo. Para alcanzarlo es muy importante el apoyo de la Comunidad.

Premisas

Esta biblioteca fue construida bajo las siguientes proposiciones o premisas, las cuales no están exentas de controversia o posible revisión:


Conforme se construye software, debería ser cada vez menor la cantidad de recursos (tiempo, dinero, esfuerzo) destinados a escribir código para necesidades comunes o ya experimentadas, de tal suerte que los recursos deberían enfocarse cada vez más a necesidades nuevas y particulares de los proyectos y tecnologías que van surgiendo.
Al menos el 50% del código escrito para desarrollar una aplicación de software debería quedar asentado en bibliotecas de programación que puedan usarse después para crear más aplicaciones.
Los bloques de código comunes, es decir, que se repiten, deberían reducirse a sentencias fáciles de leer, abstrayendo los detalles mediante la colocación de éstos en el interior de rutinas (funciones o métodos).
En un buen compilador no hay límite de rutinas que pueden llamarse en cadena unas a otras, y la repercusión de esto en la eficiencia de ejecución es rara vez significativa.
Hay muy pocas razones válidas por las cuales una rutina deba tener más de 20 líneas de código fuente (esto no quiere decir que todas las de 21 o más estén mal). El aprovechamiento del código es, hasta cierto punto, directamente proporcional a la descomposición de rutinas grandes en rutinas más pequeñas.
Ninguna clase debería esconder parte de sí a las clases que descienden de ella; toda clase debería poder acceder a cualquiera de los elementos que la componen (incluyendo los que le heredan clases ascendentes).
Marcar una clase como sellada para que no pueda derivarse de ella o un método virtual como final para que no pueda redefinirse una vez más, no parecen ser una buena idea.
Cada biblioteca de programación, incluso las nativas de un lenguaje o entorno de desarrollo, debería emplear algún tipo de prefijo (http://delphiprefix.href.com/) en sus identificadores para evitar conflictos de nombres o posibles ambigüedades.
CamelCase es el más bello estilo de escritura de palabras compuestas en programación, pero las siglas deberían permanecer en mayúsculas aun cuando formen parte de un identificador de programa (vtANSIString y no vtAnsiString).
Al programar software debería evitarse en lo posible el uso del guion bajo ("_"), salvo en casos muy especiales.

NOTA: La actual versión de GH Freebrary no atiende impecablemente a las premisas anteriores, pero se orienta a conseguirlo.

Descarga

Esta es la dirección de Internet para su descarga: http://terawiki.clubdelphi.com/Delphi/Componentes-Funciones/__GH_Freebrary__/. Se trata de la carpeta pública del proyecto, en la cual pueden encontrarse las más recientes versiones, algunos programas de ejemplo y otro material.

Organización

Como muchas bibliotecas, GH Freebrary se compone de constantes, tipos, clases, procedimientos, funciones y variables contenidos en archivos .pas, formalmente conocidos como unidades. El nombre de todas las unidades comienza con las letras GHF. Casi todas las clases se encuentran en unidades exclusivas, es decir, archivos .pas creados con el propósito de contener de forma aislada el código fuente de una sola clase, siendo pocos los casos de unidades que, por razones especiales, contienen más de una. Las rutinas que no pertenecen a una clase, conocidas como funciones sueltas, se encuentran en su gran mayoría dentro de las unidades GHFRTL, GHFVCL y GHFUtils.

GHFRTL es la única unidad que no depende de ninguna otra de GH Freebrary, es decir, en sus cláusulas Uses solamente hay referencias a unidades nativas y, más concretamente, sólo unidades nativas que se consideran parte de la RTL (Run Time Library). A este respecto, la forma de averiguar si una unidad nativa pertenece o no a la RTL es verificando su existencia en el directorio Source\RTL de Delphi (incluyendo subdirectorios). GHFRTL contiene la mayor parte de las constantes, tipos, funciones sueltas y variables globales de la biblioteca, es el núcleo de la misma y no declara ninguna clase pública.

GHFVCL también contiene o puede contener constantes, tipos, funciones sueltas y variables globales, pero sólo cuando esos elementos dependan o tengan relación con unidades nativas que se consideran parte de la VCL (Visual Component Library) o, por extensión, que no pertenezcan a la RTL. En sus cláusulas Uses la única unidad no nativa que aparece es GHFRTL (GHFVCL depende de GHFRTL). No declara ninguna clase pública.

GHFUtils fue creada para contener constantes, tipos, funciones sueltas y variables globales que dependen de elementos de GH Freebrary no contenidos en las unidades GHFRTL y GHFVCL (por lo regular clases TghXXX). Esta unidad no declara ninguna clase pública.

En su gran mayoría el resto de las unidades contienen clases, generalmente sólo una y nada más (GHFClientDataSet contiene a la clase TghClientDataSet, GHFObjList contiene a la clase TghObjList, GHFOpenXMLSpreadsheet contiene a las clases TghOpenXMLSpreadsheet y TghOpenXMLSpreadsheetBook, y así).

Por último, hay unidades que son creadas para contener constantes, tipos, funciones sueltas y variables globales de ámbito especial, concerniente a un país o a un idioma. En la versión actual de GH Freebrary existe una unidad llamada GHFEN, para cuestiones relacionadas con el idioma inglés, otra de nombre GHFES, para cuestiones relacionadas con el idioma español, y una GHFMEX, para cuestiones relacionadas con México. Para los nombres de este tipo de unidades se optó por emplear los códigos ISO de países (en su sistema de tres letras) y los códigos ISO de idiomas (en su sistema de dos letras).