Código y Datos: Privado o Público


En los proyectos visuales, todos los datos y constantes de los objetos Window, MDIWindow o DialogBox son privados, es decir, sólo accesibles al propio objeto y a sus controles hijo. Para compartir los datos con otros objetos del proyecto, puede agregar archivos Include u objetos Módulo. Los Módulos son objetos de código, que significa que no tienen ninguna ventana ni pueden contener controles, pero todo las variables y procedimientos que hay en ellos es Public por defecto, es decir, comunes a todo el proyecto. Esto NO es aplicable a las macros ni a las estructuras, que solamente son visibles dentro de la ventana o módulo donde están definidas (a menos que se definan en un archivo include como se detalla a continuación).

Los archivos Include también pueden ser comunes a todo el proyecto si se agregan del modo correcto. Si desea que un archivo Include sea común a todo el proyecto, haga lo siguiente:

Para archivos include de MASM32 SDK o de programación de drivers, use la opción de menú "Proyecto=>Agregar archivos Include (*.inc)..."
Para cualquier otro tipo de archivo include, use la opción de menú "Proyecto=>Agregar Archivos..." (si el archivo está en otra carpeta, será copiado a la carpeta del proyecto)
Si se agregan de este modo, los archivos include se incluyen siempre cuando se compilan todos los demás archivos del proyecto (ventanas y módulos), por consiguiente, no pueden tener procedimentos ni declaraciones de variables, de lo contrario, se producirán errores de redefinición (unos buenos ejemplos de archivos include son los que vienen con MASM32 SDK). Por otra parte, los archivos include son muy útiles para definir macros y/o estructuras que deban ser comunes a todo el proyecto (por ejemplo, el archivo Common.inc del proyecto NetMon, en la carpeta Examples).

Los objetos Módulo son propios de Easy Code y deben estar estructurados correctamente para evitar errores de programación. Para que los módulos funcionen debidamente, debe tenerse en cuenta una regla muy importante:
Las secciones .Const, .Data? y .Data, deben estar SIEMPRE antes de la sección .Code de la siguiente manera:
.Const

.Data?

.Data

.Code
De hecho, el orden de las secciones .Const, .Data? y .Data no tiene importancia alguna, lo que es imprescindible es que solamente haya una sección .Code en un módulo y que ésta sea la última de todas las secciones.
Un módulo puede ser muy útil para contener variables y procedimientos que sean referenciados por cualquier otro objeto (ventana o módulo), puesto que todas sus variables y procedimientos son comunes a todo el proyecto. Sin embargo, si desea que los datos de un módulo sean privados, haga lo siguiente:

Para proyectos visuales:

Ponga la propiedad PublicData a FALSE

Para proyectos clásicos:

Desmarque la opción Hacer globales todas las variables de las Propiedades del proyecto


Para los objetos Window, MDIWindow y DialogBox, Easy Code declara los procedimientos como Private por defecto, mientras que para los objetos Module los declara como Public. Puesto que Easy Code ignora la directiva Option Proc, todos los procedimientos son Public, si no se declaran explícitamente como Private, para que puedan ser accedidos por cualquier otro objeto del proyecto. De hecho, todos los procedimientos son Public por defecto si no se declaran Private ni Public, por lo que los procedimientos siguientes son exactamente iguales:

AnyName Proc
    Ret
AnyName EndP

y

AnyName Proc Public
    Ret
AnyName EndP


Si desea que un procedimiento sea privado, debe añadirle la correspondiente palabra reservada (Private), y entonces sólo será accessible dentro del
objeto en el que se encuentra:

AnyName Proc Private
    Ret
AnyName EndP

Por consiguiente, si pone la propiedad PublicData a FALSE (proyectos visuales), o desmarca la opción Hacer globales todas las variables (proyectos clásicos), y todos los procedimientos son declarados como Private, tendrá un módulo privado, es decir, sólo accessible desde el propio módulo. Por otra parte, poniendo la propiedad PublicData a TRUE (proyectos visuales), o marcando la opción Hacer globales todas las variables (proyectos clásicos), y no declarando como Private ninguno de sus procedimientos, dará como resultado un módulo público, donde los datos y el código serán accessibles desde cualquier otro objeto del proyecto.

Es una buena práctica mantener como Private todos los procedimientoss de un objeto ventana (proyectos visuales) y agregar uno o más archivos Include (o módulos) para compartir el código y los datos que sean comunes. De esta manera su código será mas claro, parecido a lengujes de mas alto nivel, y menos expuestos a errores. Así funciona Easy Code cuando escribe código para un procedimiento: todos los procedimientos de un objeto ventana son declarados Private (a menos que usted los haga Public), mientras que todos los procedimientos de un objeto módulo son declarados Public (a menos que usted los haga explícitamente Private). De hecho, Easy Code no escribe ni Public ni Private, lo cual significa que son Public.

OBSERVACIONES: Easy Code se cuida de los prototipos de todos los procedimientos existentes en el proyecto. Por lo tanto, NO HACE FALTA que escriba ni incluya ninguna sentencia Proto, puesto que no se necesitan en los proyectos de Easy Code.

IMPORTANTE: Recuerde que Easy Code ignora la directiva Option Proc, por lo tanto, para que un procedimiento sea privado, debe incluir la palabra reservada correspondiente (Private). Si no lo declara ni Public ni Private, el procedimiento será considerado Public.