-
Manual del programador, Parte 1: Programacin en Visual
FoxPro
30/05/2000
Manual del programador, Parte 1: Programacin en Visual
FoxPro
Visual FoxPro es una eficaz herramienta de administracin de
datos, pero adems podr beneficiarse de toda su eficacia para crear
aplicaciones. Comprender las tcnicas de programacin orientada a
objetos y el modelo controlado por eventos puede aumentar su
productividad como programador.
Captulo 1 Introduccin a la programacin
Si est empezando a programar, aprenda el proceso y el mtodo de
programacin en Visual FoxPro.
Captulo 2 Programar una aplicacin
Cuando programe una aplicacin, organice sus componentes con el
Administrador de programas, una forma integrada de generar y probar
su aplicacin a medida que la cree.
Captulo 3 Programacin orientada a objetos
Con la programacin orientada a objetos, puede crear componentes
de aplicacin independientes que respondan a acciones del usuario y
al sistema y que se puedan mantener y reutilizar fcilmente.
Captulo 4 Descripcin del modelo de eventos
El modelo de eventos define cundo y cmo tienen lugar las
interacciones con el usuario y el sistema.
Captulo 1: Introduccin a la programacinEn Visual FoxPro
funcionan juntas la programacin por procedimientos y la programacin
orientada a objetos para permitirle crear aplicaciones potentes y
flexibles. Conceptualmente, puede imaginarse que la programacin
consiste en escribir una secuencia de instrucciones con el fin de
realizar tareas especficas. A un nivel estructural, la programacin
en Visual FoxPro precisa la manipulacin de los datos
almacenados.
Si no tiene experiencia en programacin, este captulo le ayudar a
ponerse en marcha. Si ya conoce otros lenguajes de programacin y
desea compararlos con Visual FoxPro, vea el tema Visual FoxPro y
otros lenguajes de programacin. Si desea una descripcin de la
programacin orientada a objetos, consulte el captulo 3, Programacin
orientada a objetos.
sinopsisCross-Out
-
Manual del programador, Parte 1: Programacin en Visual
FoxPro
file://C:\temp\~hh52BB.htm 30/05/2000
En este captulo se abordan los temas siguientes:
l Ventajas de la programacinl La mecnica de la programacin en
Visual FoxProl Conceptos bsicos de programacinl El proceso de la
programacinl Usar procedimientos y funciones definidos por el
usuariol Pasos siguientes
Ventajas de la programacin
Normalmente, cualquier funcin que pueda realizar con un programa
podr realizarla tambin a mano, si dispone de suficiente tiempo. Por
ejemplo, si desea consultar informacin sobre un cliente en una
tabla de clientes, como por ejemplo la empresa Ernst Handel, podra
hacerlo manualmente si sigue una secuencia concreta de
instrucciones.
Para buscar manualmente un nico pedido en una tabla
1. En el men Archivo, elija Abrir.
2. En el cuadro Archivos de tipo, elija Tabla.
3. Haga doble clic en Customer.dbf en la lista de archivos.
4. En el men Ver, elija Examinar.
5. Desplcese por la tabla, examinando el campo Company de los
registros hasta encontrar Ernst Handel.
Mediante programacin podra conseguir el mismo resultado
escribiendo los siguientes comandos de Visual FoxPro en la ventana
Comandos:
USE CustomerLOCATE FOR Company = "Ernst Handel"BROWSE
Cuando haya localizado el pedido de esta empresa, tal vez desee
incrementar la cantidad mxima del pedido en un 3%.
Para incrementar manualmente la cantidad mxima del pedido
1. Presione la tecla Tab para desplazarse hasta el campo
max_ord_amt.
2. Multiplique el valor mostrado en el campo max_ord_amt por
1,03 y escriba el nuevo valor en el campo.
Para conseguir el mismo resultado mediante programacin, escriba
el siguiente comando de Visual FoxPro en la ventana Comandos:
2 of 804
-
Manual del programador, Parte 1: Programacin en Visual
FoxPro
30/05/2000
REPLACE max_ord_amt WITH max_ord_amt * 1,03
Es relativamente sencillo cambiar la cantidad mxima del pedido
para un cliente, ya sea manualmente o escribiendo las instrucciones
en la ventana Comandos. Sin embargo, suponga que desea incrementar
en un 3% la cantidad mxima de pedido de todos los clientes. Podra
hacerlo manualmente, pero le llevara mucho tiempo y es posible que
cometiese errores. Si especifica las instrucciones correctas en un
archivo de programa, Visual FoxPro podr realizar esta tarea con
rapidez y facilidad, sin cometer ningn error.
Programa de ejemplo para incrementar las cantidades mximas de
pedido de todos los clientes
Cdigo Comentarios
USE customer Abre la tabla CUSTOMER.
SCAN Examina todos los registros de la tabla y realiza todas las
instrucciones comprendidas entre SCAN y ENDSCAN para cada
registro.
REPLACE max_ord_amt WITH ; max_ord_amt * 1.03
Incrementa la cantidad mxima de pedido en un 3%. (El punto y
coma (;) indica que el comando sigue en la lnea siguiente).
ENDSCAN Final del cdigo que se ejecuta para cada registro
contenido en la tabla.
La ejecucin de un programa ofrece numerosas ventajas en
comparacin con la introduccin de distintos comandos en la ventana
Comandos:
l Los programas se pueden modificar y volver a ejecutar. l Se
pueden ejecutar programas desde los mens, formularios y barras de
herramientas. l Los programas pueden ejecutar otros programas.
En las siguientes secciones se describe la mecnica, los
conceptos y los procesos que subyacen a ste y otros programas de
Visual FoxPro.
La mecnica de la programacin en Visual FoxPro
Puede programar en Visual FoxPro escribiendo cdigo:
instrucciones en forma de comandos, funciones u operaciones que
Visual FoxPro puede entender. Puede incluir estas instrucciones
en:
l La ventana Comandos. l Archivos de programa l Ventanas de
cdigo de eventos o de mtodos en el Diseador de formularios o en el
Diseador
de clasesl Ventanas de cdigo de procedimientos en el Diseador de
mensl Ventanas de cdigo de procedimientos en el Diseador de
informes
3 of 804
-
Manual del programador, Parte 1: Programacin en Visual
FoxPro
30/05/2000
Usar la ventana Comandos
Puede ejecutar un comando de Visual FoxPro si lo escribe en la
ventana Comandos y presiona ENTRAR. Para volver a ejecutar el
comando, lleve el cursor a la lnea que contiene el comando y
presione nuevamente ENTRAR.
Puede ejecutar varias lneas de cdigo en la ventana Comandos como
si constituyeran un programa.
Para ejecutar varias lneas de cdigo en la ventana Comandos
1. Seleccione las lneas de cdigo.
2. Presione ENTRAR o elija Ejecutar seleccin en el men
emergente.
Como la ventana Comandos es una ventana de edicin, puede
modificar comandos con las herramientas disponibles en Visual
FoxPro. Puede modificar, insertar, eliminar, cortar, copiar o pegar
texto en la ventana Comandos.
La ventaja que supone poder escribir cdigo en la ventana
Comandos radica en el hecho de que las instrucciones se ejecutan de
inmediato. No es necesario guardar un archivo y ejecutarlo como un
programa.
Adems, las opciones que elige en los mens y los cuadros de
dilogo aparecen en la ventana Comandos como comandos. Puede copiar
y pegar estos comandos en un programa de Visual FoxPro y a
continuacin ejecutar el programa repetidamente, lo cual facilita la
ejecucin de miles de comandos, una y otra vez.
Crear programas
Un programa de Visual FoxPro es un archivo de texto que contiene
una serie de comandos. Puede crear un programa en Visual FoxPro de
una de las siguientes maneras:
Para crear un programa
1. En el Administrador de proyectos, seleccione Programas en la
ficha Cdigo.
2. Elija Nuevo.
O bien
1. En el men Archivo, elija Nuevo.
2. En el cuadro de dilogo Nuevo, seleccione Programa.
3. Elija Nuevo archivo.
O bien
4 of 804
-
Manual del programador, Parte 1: Programacin en Visual
FoxPro
file://C:\temp\~hh52BB.htm 30/05/2000
l En la ventana Comandos, escriba:
MODIFY COMMAND
Visual FoxPro abrir una nueva ventana denominada Programa1. Podr
entonces escribir su programa en esta ventana.
Guardar programas
Una vez creado un programa, asegrese de guardarlo.
Para guardar un programa
l En el men Archivo, elija Guardar.
Si intenta cerrar un programa sin antes guardarlo, aparecer un
cuadro de dilogo en el que se le preguntar si desea guardar o
descartar los cambios realizados en el mismo.
Si guarda un programa creado a partir del Administrador de
proyectos, el programa se agregar al proyecto.
Si guarda un programa al que todava no ha asignado un nombre, se
abrir el cuadro de dilogo Guardar como, en el que podr especificar
el nombre del programa. Cuando haya guardado el programa, podr
ejecutarlo o modificarlo.
Modificar programas
Despus de guardar el programa, podr modificarlo. En primer
lugar, abra el programa de una de las siguientes maneras:
Para abrir un programa
l Si el programa forma parte de un proyecto, seleccinelo en el
Administrador de proyectos y elija Modificar.
O bien
l En el men Archivo, elija Abrir. Aparecer un cuadro de dilogo
en el que se muestra una lista de los archivos disponibles. En la
lista Archivos de tipo, elija Programa. En la lista de archivos,
seleccione el programa que desea modificar y elija Abrir.
O bien
l En la ventana Comandos, escriba el nombre del programa que
desea modificar:
MODIFY COMMAND miprogram
O bien
5 of 804
sinopsisInserted Text
-
Manual del programador, Parte 1: Programacin en Visual
FoxPro
file://C:\temp\~hh52BB.htm 30/05/2000
l En la ventana Comandos, escriba:
MODIFY COMMAND ?
Cuando aparezca la lista de archivos, seleccione el programa que
desea modificar y a continuacin elija Abrir.
Despus de abrir el programa, podr realizar cambios en el mismo.
Cuando haya terminado de introducir los cambios, asegrese de
guardar el programa.
Ejecutar programas
Despus de crear un programa, podr ejecutarlo.
Para ejecutar un programa
l Si el programa forma parte de un proyecto, seleccinelo en el
Administrador de proyectos y elija Ejecutar.
O bien
l En el men Programa, elija Ejecutar. Cuando aparezca la lista
de programas, seleccione el programa que desea ejecutar y a
continuacin elija Ejecutar.
O bien
l En la ventana Comandos, escriba DO y el nombre del programa
que desea ejecutar:
DO miprogram
Escribir cdigo en las herramientas de diseo de Visual FoxPro
El Diseador de formularios, el Diseador de clases y el Diseador
de mens le permiten integrar fcilmente cdigo de programas mediante
la interfaz de usuario, de forma que el cdigo apropiado se ejecute
como respuesta a las acciones del usuario. El Diseador de informes
le permite crear informes complejos y personalizados integrando
cdigo en el archivo del informe.
Para aprovechar plenamente la eficacia de Visual FoxPro, debe
utilizar estas herramientas de diseo. Si desea ms informacin sobre
el Diseador de informes, consulte el captulo 7, Disear informes y
etiquetas, del Manual del usuario. Para obtener informacin ms
detallada sobre el Diseador de formularios, consulte el captulo 3,
Programacin orientada a objetos, de este manual. Para obtener
informacin ms detallada sobre el Diseador de formularios, consulte
el captulo 9, Crear formularios, y si desea ms informacin acerca
del Diseador de mens, consulte el captulo 11, Disear mens y barras
de herramientas.
Conceptos bsicos de programacin
6 of 804
-
Manual del programador, Parte 1: Programacin en Visual
FoxPro
file://C:\temp\~hh52BB.htm 30/05/2000
Cuando se programa, se almacenan datos y se manipulan mediante
una serie de instrucciones. Los datos y los contenedores en los que
se almacenan los datos constituyen la materia prima de la
programacin. Las herramientas utilizadas para manipular esta
materia prima son comandos, funciones y operadores.
Almacenar datos
Los datos con los que trabaja probablemente incluyan perodos de
tiempo, dinero y elementos contables, as como fechas, nombres,
descripciones, etc. Cada dato corresponde a un determinado tipo, es
decir, pertenece a una categora de datos que se manipula de maneras
similares. Podra trabajar directamente con estos datos sin
almacenarlos, si bien perdera la mayor parte de la flexibilidad y
potencia que ofrece Visual FoxPro. Visual FoxPro aporta numerosos
contenedores de almacenamiento con el fin de ampliar su capacidad
para manipular fcilmente los datos.
Los tipos de datos determinan la manera en que se almacenan los
datos y la forma en que se pueden utilizar tales datos. Puede
multiplicar dos nmeros, pero no puede multiplicar caracteres. Puede
imprimir caracteres en maysculas, pero no puede imprimir nmeros en
maysculas. En la tabla siguiente se muestran algunos de los
principales tipos de datos de Visual FoxPro.
Tipos de datos
Tipo Ejemplos
Numeric 1233,1415 7
Character Prueba12301/01/98
Logical .T. (verdadero).F. (falso)
Date
DateTime
{^1998-01-01}
{^1998-01-01 12:30:00 p}
Contenedores de datos
Los contenedores de datos le permiten realizar las mismas
operaciones con varios datos. Por ejemplo, sumar las horas que ha
trabajado un empleado, multiplicarlas por el salario por hora y
restar los impuestos para determinar el sueldo que ha percibido el
empleado. Deber realizar estas operaciones para cada empleado y
para cada perodo de pago. Si almacena esta informacin en
contenedores y realiza las operaciones sobre stos, bastar con
sustituir los datos antiguos por los nuevos datos y volver a
ejecutar el mismo programa. En la siguiente tabla se enumeran
algunos de los principales contenedores de datos disponibles en
Visual FoxPro:
7 of 804
-
Manual del programador, Parte 1: Programacin en Visual
FoxPro
file://C:\temp\~hh52BB.htm 30/05/2000
Tipo Descripcin
Variables Elementos individuales de datos almacenados en la
memoria RAM (memoria de acceso aleatorio) del PC.
Registros de tabla Varias filas de campos predeterminados, cada
uno de los cuales puede contener un dato definido previamente. Las
tablas se guardan en disco.
Matrices Varios elementos de datos almacenados en la memoria
RAM.
Manipular datos
Los contenedores y los tipos de datos le ofrecen los mdulos que
necesita para manipular los datos. Los elementos finales son los
operadores, las funciones y los comandos.
Usar operadores
Los operadores se utilizan para vincular los datos. A
continuacin se muestran los operadores utilizados habitualmente en
Visual FoxPro.
Operador Tipos de datos vlidos Ejemplo Resultado
= Todos ? n = 7 Imprime .T. si el valor almacenado en la
variable es 7; de lo contrario, imprime .F.
+ Numeric, Character,Date, DateTime
? "Fox" + "Pro" Imprime FoxPro
! or NOT Logical ? !.T. Imprime .F. (falso)
*, / Numeric ? 5 * 5? 25 / 5
Imprime 25Imprime 5
Nota Un signo de interrogacin (?) situado delante de una
expresin imprime el resultado de la expresin y un carcter de nueva
lnea en la ventana de salida activa, que es normalmente la ventana
principal de Visual FoxPro.
Recuerde que debe utilizar el mismo tipo de datos con cada
operador. Las siguientes instrucciones almacenan dos datos numricos
en dos variables. Los nombres de variable empiezan con la letra n,
por lo que se puede determinar de inmediato que contienen datos
numricos, pero puede nombrarlas con cualquier combinacin de
caracteres alfanumricos y caracteres de subrayado.
nPrimero = 123nSegundo = 45
8 of 804
-
Manual del programador, Parte 1: Programacin en Visual
FoxPro
file://C:\temp\~hh52BB.htm 30/05/2000
Las instrucciones siguientes almacenan dos datos de caracteres
en dos variables. Los nombres de variable empiezan con la letra c
para indicar que contienen datos de tipo character.
cPrimero = "123"cSegundo = "45"
Las dos operaciones siguientes, suma y concatenacin, producen
resultados distintos, ya que el tipo de datos es diferente en cada
una de ellas.
? nPrimero + nSegundo? cPrimero + cSegundo
Resultado
16812345
Puesto que cPrimero contiene caracteres y nSegundo contiene
datos numricos, se producir un error de tipo de datos incorrecto si
se intenta ejecutar el siguiente comando:
? cPrimero + nSegundo
Puede evitar este problema si utiliza funciones de conversin.
Por ejemplo, STR( ) devuelve el valor de tipo Character equivalente
de un valor de tipo Numeric, mientras que VAL( ) devuelve el
equivalente numrico de una cadena de caracteres formada por nmeros.
Estas funciones y LTRIM( ), que elimina los espacios iniciales, le
permiten realizar las operaciones siguientes:
? cPrimero + LTRIM(STR(nSegundo))? VAL(cPrimero) + nSegundo
Resultado
12345168
Usar funciones
Las funciones devuelven un tipo especfico de datos. Por ejemplo,
las funciones STR( ) y VAL( ) utilizadas en la seccin anterior
devuelven valores de tipo Character y Numeric, respectivamente. Al
igual que ocurre con todas las funciones, estos tipos devueltos
estn documentados con las funciones.
Hay cinco maneras de llamar a una funcin de Visual FoxPro:
l Asignar a una variable el valor que devuelve la funcin. La
siguiente lnea de cdigo almacena la fecha actual del sistema en una
variable denominada dHoy:
dHoy = DATE( )
l Incluir la llamada a la funcin en un comando de Visual FoxPro.
El siguiente comando establece el directorio predeterminado como el
valor devuelto por la funcin GETDIR( ):
9 of 804
-
Manual del programador, Parte 1: Programacin en Visual
FoxPro
file://C:\temp\~hh52BB.htm 30/05/2000
CD GETDIR( )
l Imprimir el valor devuelto en la ventana de salida activa. La
siguiente lnea de cdigo imprime la hora actual del sistema en la
ventana principal de Visual FoxPro:
? TIME( )
l Llamar a la funcin sin almacenar en ningn lugar el valor
devuelto. La siguiente llamada de funcin desactiva el cursor:
SYS(2002)
l Incluir la funcin dentro de otra funcin. La siguiente lnea de
cdigo imprime el da de la semana:
? DOW(DATE( ))
A continuacin se enumeran otros ejemplos de funciones utilizados
en este captulo:
Funcin Descripcin
ISDIGIT( ) Devuelve el valor verdadero (.T.) si el carcter
situado al comienzo de una cadena es un nmero; de lo contrario,
devuelve el valor falso (.F.).
FIELD( ) Devuelve el nombre de un campo.
LEN( ) Devuelve el nmero de caracteres de una expresin de
caracteres.
RECCOUNT( ) Devuelve el nmero de registros de la tabla que est
activa en este momento.
SUBSTR( ) Devuelve el nmero especificado de caracteres a partir
de una cadena de caracteres, empezando en una posicin especificada
de la cadena.
Usar comandos
Un comando hace que se realice una determinada accin. Cada
comando dispone de una sintaxis especfica que indica lo que se debe
incluir con el fin de que se ejecute correctamente el comando. Hay
tambin clusulas opcionales asociadas a los comandos que permiten
especificar de forma ms detallada la accin que se desea
realizar.
Por ejemplo, el comando USE permite abrir y cerrar tablas:
Sintaxis de USE Descripcin
USE Cierra la tabla que aparece en el rea de trabajo actual.
USE customer Abre la tabla CUSTOMER en el rea de trabajo actual
y cierra cualquier tabla que ya est abierta
10 of 804
-
Manual del programador, Parte 1: Programacin en Visual
FoxPro
file://C:\temp\~hh52BB.htm 30/05/2000
en el rea de trabajo.
USE customer IN 0 Abre la tabla CUSTOMER en la siguiente rea de
trabajo disponible.
USE customer IN 0 ; ALIAS miCliente
Abre la tabla CUSTOMER en la siguiente rea de trabajo disponible
y asigna al rea de trabajo el alias miCliente.
A continuacin se muestran algunos ejemplos de comandos
utilizados en este captulo:
Comando Descripcin
DELETE Selecciona registros especificados de una tabla para su
eliminacin.
REPLACE Sustituye el valor almacenado en el campo del registro
por un nuevo valor.
Go Coloca el puntero de registro en una posicin especfica de la
tabla.
Control del flujo del programa
Visual FoxPro incluye una categora especial de comandos que
"envuelven" a otros comandos y funciones, y determinan cundo y con
qu frecuencia se ejecutan. Estos comandos permiten realizar
bifurcaciones condicionales y bucles, dos herramientas de
programacin muy eficaces. El siguiente programa muestra el uso de
las bifurcaciones y los bucles condicionales. Estos conceptos se
describen de forma ms detallada despus del ejemplo.
Suponga que su empresa cuenta con 10.000 empleados y desea
conceder a todos aqullos que ganan 3.000.000 de pesetas o ms un
aumento salarial del 3%, y a todos los que ganan menos de 3.000.000
de pesetas un aumento del 6%. El siguiente ejemplo de programa le
permite hacerlo.
Este programa presupone que en el rea de trabajo actual est
abierta una tabla que contiene un campo numrico denominado salario.
Si desea obtener informacin sobre las reas de trabajo, consulte
"Usar mltiples tablas" en el captulo 7, Trabajar con tablas..
Programa de ejemplo para aumentar el salario de los
empleados
Cdigo Observaciones
SCAN El cdigo comprendido entre SCAN y ENDSCAN se ejecuta tantas
veces como registros haya en la tabla. Cada vez que se ejecuta el
cdigo, el puntero de registro se desplaza al siguiente registro de
la tabla.
IF salario >= 3000000 REPLACE salary WITH ; salario *
1,03
Para cada registro, si el salario es mayor o igual que
3.000.000, este valor se sustituye por un nuevo salario que es un
3% superior.
11 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 12 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
El signo de punto y coma (;) que aparece despus de WITH indica
que el comando contina en la siguiente lnea.
ELSE REPLACE salario WITH ; salario * 1,06
Para cada registro, si el salario no es mayor o igual que
3.000.000, se sustituye este valor por un nuevo salario que es un
6% superior.
ENDIFENDSCAN
Final de la instruccin condicional IF.
Final del cdigo que se ejecuta para cada registro de la
tabla.
Este ejemplo utiliza comandos de bifurcacin y bucle condicional
para controlar el desarrollo del programa.
Bifurcacin condicional
La bifurcacin condicional permite someter a prueba condiciones
y, a continuacin, en funcin del resultado de la prueba, realizar
distintas operaciones. Visual FoxPro ofrece dos comandos que
permiten realizar una bifurcacin condicional:
l IF ... ELSE ... ENDIFl DO CASE ... ENDCASE
El cdigo comprendido entre la instruccin inicial y la instruccin
ENDIF o ENDCASE slo se ejecuta si una condicin lgica se evala como
verdadera (.T.). En el programa de ejemplo, el comando IF se
utiliza para distinguir entre dos estados: o el salario es de
3.000.000 pesetas o ms, o no lo es. Se adoptan diferentes medidas,
dependiendo del estado.
En el siguiente ejemplo, si el valor almacenado en la variable
nTempAgua es menor que 100, no se realizar ninguna accin:
* definir una variable lgica como Verdadera si se cumple una
condicin.IF nTempAgua >= 100 lEbullicin = .T.ENDIF
Nota Un asterisco al principio de una lnea de un programa indica
que la lnea es un comentario. Los comentarios ayudan al programador
a recordar la funcin que debe realizar cada segmento de cdigo, si
bien Visual FoxPro los pasa por alto.
Si se desea comprobar varias condiciones posibles, un bloque DO
CASE ... ENDCASE puede resultar ms eficaz que varias instrucciones
IF y adems es ms fcil realizar un seguimiento del mismo.
Bucles
Un bucle le permite ejecutar una o ms lneas de cdigo tantas
veces como sea necesario. En Visual
12 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 13 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
FoxPro hay tres comandos que permiten realizar bucles:
l SCAN ... ENDSCANl FOR ... ENDFORl DO WHILE ... ENDDO
Utilice SCAN cuando realice una serie de acciones para cada uno
de los registros de una tabla, como en el ejemplo de programa
descrito anteriormente. El bucle SCAN permite escribir el cdigo una
vez y ejecutarlo para cada registro a medida que el puntero de
registro se desplaza por la tabla.
Utilice FOR cuando sepa cuntas veces debe ejecutarse la seccin
de cdigo. Por ejemplo, sabe que una tabla contiene un nmero
especfico de campos. Puesto que la funcin FCOUNT( ) de Visual
FoxPro devuelve este nmero, puede utilizar un bucle FOR para
imprimir los nombres de todos los campos de la tabla:
FOR nRecuento = 1 TO FCOUNT( ) ? FIELD(nRecuento)ENDFOR
Utilice DO WHILE cuando desee ejecutar una seccin de cdigo
mientras cumpla una determinada condicin. Tal vez no sepa cuntas
veces debe ejecutarse el cdigo, pero s sabe cundo debe detenerse la
ejecucin. Por ejemplo, supongamos que dispone de una tabla en la
que figuran los nombres y las iniciales de una serie de personas y
desea utilizar las iniciales para consultar los nombres de las
personas. Surgira un problema la primera vez que intentase agregar
una persona cuyas iniciales fuesen las mismas que las de otra
persona contenida en la tabla.
Para resolver este problema, podra agregar un nmero a las
iniciales. Por ejemplo, el cdigo de identificacin de Miguel Surez
podra ser MS. La siguiente persona cuyas iniciales fuesen las
mismas, Margarita Snchez, sera MS1. Si a continuacin anexase Mara
Sanz a la tabla, su cdigo de identificacin sera MS2. Un bucle DO
WHILE permite localizar el nmero correcto que se debe adjuntar a
las iniciales.
Programa de ejemplo que utiliza DO WHILE para generar un nmero
de identificacin nico
Cdigo Comentarios
nAqu = RECNO() Guardar la posicin del registro.
cIniciales = LEFT(nombre,1) + ; LEFT(apellido,1)nSufijo = 0
Obtener las iniciales de la persona a partir de las primeras
letras de los campos nombre y apellido.
Si es necesario, establecer una variable que contenga el nmero
que se debe agregar al final de las iniciales de una persona.
LOCATE FOR id_persona = cIniciales Comprobar si hay otra persona
en la tabla cuyas iniciales son las mismas.
DO WHILE FOUND( ) Si en otro registro de la tabla hay un valor
id_persona que coincide con cIniciales, la
13 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 14 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
funcin FOUND( ) devolver el valor verdadero (.T.) y se ejecutar
el cdigo contenido en el bucle DO WHILE.Si no se encuentra ninguna
coincidencia, la siguiente lnea de cdigo que se ejecute ser la lnea
que figura a continuacin de ENDDO.
nSufijo = nSufijo + 1 cIniciales = ; LEFT(cIniciales,2); +
ALLTRIM(STR(nSufijo))
Preparar un sufijo nuevo y anexarlo al final de las
iniciales.
CONTINUE CONTINUE hace que se vuelva a evaluar el ltimo comando
LOCATE. El programa comprueba si el nuevo valor contenido en
cIniciales ya existe en el campo id_persona de otro registro. Si es
as, FOUND( ) seguir devolviendo el valor .T. y se volver a ejecutar
el cdigo contenido en el bucle DO WHILE. Si el nuevo valor
contenido en cIniciales es efectivamente nico, FOUND( ) devolver el
valor .F. y la ejecucin del programa continuar con la lnea de cdigo
que figura a continuacin de ENDDO.
ENDDO Final del bucle DO WHILE.
GOTO nAquREPLACE id_persona WITH cIniciales
Volver al registro y almacenar el cdigo de identificacin nico en
el campo id_persona.
Puesto que no hay manera de saber de antemano cuntas veces se
encontrarn los cdigos de identificacin coincidentes que ya se estn
utilizando, se utiliza el bucle DO WHILE.
El proceso de la programacin
Cuando entienda los conceptos bsicos, la programacin ser un
proceso reiterativo. Los pasos se repiten numerosas veces,
perfeccionndose el cdigo a medida que se avanza. Al principio,
someter el cdigo a prueba frecuentemente mediante un sistema de
prueba y tanteo. Cuanto ms conozca el lenguaje, mayor ser la
rapidez con que pueda programar y podr realizar ms pruebas
preliminares mentalmente.
Entre los pasos bsicos de la programacin cabe citar los
siguientes:
l Definir el problema. l Desglosar el problema en elementos
discretos. l Construir los elementos. l Comprobar y perfeccionar
los elementos. l Ensamblar los elementos.
14 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 15 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
l Comprobar el programa en su conjunto.
A continuacin se enumeran algunos aspectos que debe tener
presentes al empezar a programar:
l Defina claramente el problema antes de intentar resolverlo. Si
no lo hace, acabar por realizar numerosos cambios, desechar cdigo,
tendr que empezar de nuevo o bien terminar con un resultado que no
es realmente lo que deseaba.
l Desglose el problema en pasos manejables, en lugar de intentar
resolver todo el problema de una sola vez.
l Pruebe y depure secciones de cdigo a medida que desarrolla el
programa. Compruebe que el cdigo hace lo que quiere que haga. La
depuracin es el proceso de encontrar y solucionar problemas que
impiden que el cdigo se ejecute correctamente.
l Perfeccione los datos y el almacenamiento de datos para
facilitar la manipulacin de estos datos a travs del cdigo del
programa. Esto suele implicar estructurar las tablas de forma
adecuada.
En el resto de esta seccin se describen los pasos que debe
seguir para construir un pequeo programa Visual FoxPro.
Definir el problema
Antes de poder resolver un problema, debe formularlo claramente.
Algunas veces, si ajusta la formulacin del problema podr ver ms
opciones para resolverlo.
Suponga que obtiene muchos datos de distintos orgenes. Si bien
la mayora de los datos son estrictamente numricos, algunos valores
contienen guiones y espacios en blanco adems de nmeros. Suponga que
quiere eliminar todos los espacios en blanco y los guiones de
dichos campos y guardar los datos numricos.
En lugar de intentar eliminar los espacios en blanco y los
guiones de los datos originales, podra formular el objetivo del
programa como:
Objetivo Reemplazar los valores existentes de un campo por otros
valores que contengan todo lo que contenan los valores originales,
excepto los espacios en blanco y los guiones.
Esta formulacin evita la dificultad que supone manipular una
cadena de caracteres cuya longitud sigue cambiando a medida que
trabaja con ella.
Descomponer el problema
Puesto que tiene que indicar instrucciones especficas a Visual
FoxPro en trminos de operaciones, comandos y funciones, debe
descomponer el problema en pasos discretos. La tarea ms discreta
para este problema sera examinar cada carcter de la cadena. Hasta
que pueda examinar un carcter individualmente, no podr determinar
si desea guardarlo.
Una vez que examine un carcter, deber comprobar si se trata de
un guin o de un espacio en blanco. En este momento, quiz desee
refinar la declaracin del problema. Y si obtuviera ms adelante
datos que contienen parntesis de apertura y de cierre? Y si desea
deshacerse de los smbolos de moneda, las comas y los puntos? Cuanto
ms genrico pueda hacer el cdigo, ms
15 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 16 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
trabajo se ahorrar de ahora en adelante; lo principal es ahorrar
trabajo. He aqu una formulacin del problema vlida para una variedad
mucho mayor de datos:
Objetivo refinado Reemplazar los valores existentes en un campo
por otros valores que contengan nicamente los caracteres numricos
de los valores originales.
Con esta formulacin, ahora puede volver a plantear el problema a
nivel de carcter: si el carcter es numrico, guardar el carcter; si
el carcter es no numrico, pasar al siguiente carcter. Cuando haya
construido una cadena que slo contenga los elementos numricos de la
cadena inicial, podr reemplazar la primera cadena y pasar al
siguiente registro hasta que haya terminado con todos los
datos.
Para resumir, el problema se descompone en los siguientes
elementos:
1. Examinar cada carcter.
2. Decidir si el carcter es numrico o no.
3. Si es numrico, copiarlo a la segunda cadena.
4. Cuando haya terminado con todos los caracteres de la cadena
original, reemplazar la cadena original con la cadena que slo
contiene valores numricos.
5. Repetir estos pasos para todos los registros de la tabla.
Construir los elementos
Cuando sepa qu debe hacer, puede empezar a formular los
elementos en trminos de comandos, funciones y operadores de Visual
FoxPro.
Como los comandos y funciones se usan para manipular datos,
tiene algunos datos de prueba para trabajar con ellos. Los datos de
prueba sirven para simular los datos verdaderos lo mejor
posible.
Para este ejemplo puede almacenar en una variable una cadena de
prueba introduciendo el siguiente comando en la ventana
Comandos:
cTest = "123-456-7 89 0"
Examinar cada carcter
En primer lugar desea buscar un nico carcter en la cadena. Para
obtener una lista de funciones que se pueden utilizar para
manipular cadenas, vea Funciones de carcter.
Ver tres funciones que devuelven determinadas secciones de una
cadena: LEFT( ), RIGHT( ) y SUBSTR( ). De estas tres funciones,
SUBSTR( ) devuelve caracteres de cualquier parte de la cadena.
SUBSTR( ) usa tres argumentos o parmetros: la cadena, la
ubicacin inicial dentro de la cadena y el nmero de caracteres que
se deben devolver de la cadena, empezando por la ubicacin inicial.
Para comprobar si SUBSTR( ) va a hacer lo que usted quiere, podra
escribir los siguientes comandos en la
16 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 17 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
ventana Comandos:
? SUBSTR(cTest, 1, 1)? SUBSTR(cTest, 3, 1)? SUBSTR(cTest, 8,
1)
Resultado
13-
Puede ver que en la ventana principal de Visual FoxPro se
muestran el primer, el tercer y el octavo caracteres de la cadena
de prueba.
Para hacer eso mismo varias veces, utilice un bucle. Puesto que
la cadena de prueba tiene un nmero determinado de caracteres (14),
puede utilizar un bucle FOR. El contador del bucle FOR se
incrementa cada vez que se ejecuta el cdigo del bucle, por lo que
puede utilizar el contador de la funcin SUBSTR( ). Puesto que en la
ventana Comandos no puede comprobar las construcciones de bucles,
deber probar la siguiente seccin de cdigo en un programa de
ejemplo.
Para crear un programa nuevo
1. Escriba el siguiente comando en la ventana Comandos:
MODIFY COMMAND numonly
2. En la ventana que aparecer, escriba las siguientes lneas de
cdigo:
FOR nCnt = 1 TO 14 ? SUBSTR(cTest, nCnt, 1)ENDFOR
Ahora que ha creado un programa, ya puede ejecutarlo.
Para ejecutar un programa
1. En la ventana del programa abierto, presione CTRL+E.
2. Si aparece un cuadro de dilogo Guardar, elija Aceptar.
Cuando ejecute este programa, los caracteres individuales de la
cadena de prueba se imprimirn en lneas distintas en la ventana
principal de Visual FoxPro.
Comprobar parte del programa
17 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 18 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
Ya ha completado la primera tarea. Ahora puede examinar cada
carcter de la cadena.
Decidir si el carcter es numrico
Cuando tenga un nico carcter de la cadena, debe saber si se
trata de un nmero. Puede hacerlo con ISDIGIT( ).
Puede probar los siguientes comandos en la ventana Comandos:
? ISDIGIT('2')? ISDIGIT('-')? ISDIGIT(SUBSTR(cTest, 3, 1))
Resultado
.T.
.F.
.T.
De este resultado se desprende que 2 es un nmero, no es un nmero
y el tercer carcter, 3, es un nmero.
Si el carcter es numrico, copiarlo a la segunda cadena
Ahora que puede examinar los caracteres y determinar si son o no
numricos, necesita una variable
18 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 19 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
para almacenar los valores numricos: cNumOnly.
Para crear la variable, debe asignarle un valor inicial, una
cadena de longitud cero:
cNumOnly = ""
A medida que el bucle FOR recorre la cadena, es conveniente
crear otra variable para almacenar temporalmente cada carcter de la
cadena a medida que sta se manipula:
cCharacter = SUBSTR(cTest, nCnt, 1)
Sugerencia Normalmente es mejor almacenar en una variable de
memoria el resultado de un clculo, evaluacin o funcin. Entonces
puede manipular la variable en lugar de tener que repetir el clculo
o la evaluacin.
La siguiente lnea de cdigo puede utilizarse cada vez que se
encuentra un nmero para sumar el nmero a la segunda cadena:
cNumOnly = cNumOnly + cCharacter
Hasta ahora, el programa es el siguiente:
cNumOnly = ""FOR nCnt = 1 TO 14 cCharacter = SUBSTR(cTest, nCnt,
1) IF ISDIGIT(cCharacter) cNumOnly = cNumOnly + cCharacter
ENDIFENDFOR
Prueba de los elementos
Si agrega un par de comandos al final para imprimir las cadenas
y ejecutar el programa, podr ver que el programa funciona con la
cadena de prueba:
cNumOnly = ""FOR nCnt = 1 TO 14 cCharacter = SUBSTR(cTest, nCnt,
1) IF ISDIGIT(cCharacter) cNumOnly = cNumOnly + cCharacter
ENDIFENDFOR? cTest? cNumOnly
Resultado
123-456-7 89 01234567890
El resultado parece correcto. Pero si cambia la cadena de prueba
mientras comprueba los elementos, puede tener problemas. Escriba el
siguiente comando en la ventana Comandos y ejecute de nuevo el
programa:
19 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 20 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
cTest = "456-789 22"
El programa generar un mensaje de error. El bucle FOR ha
intentado ejecutarse 14 veces, pero en la cadena slo haba 10
caracteres. Necesita una forma de ajustar las longitudes variables
de las cadenas. Use LEN( ) para devolver el nmero de caracteres de
una cadena. Si sustituye este comando en el bucle FOR, ver que el
programa funciona correctamente con ambas cadenas de prueba:
cNumOnly = ""FOR nCnt = 1 TO LEN(cTest) cCharacter =
SUBSTR(cTest, nCnt, 1) IF ISDIGIT(cCharacter) cNumOnly = cNumOnly +
cCharacter ENDIFENDFOR? cTest? cNumOnly
Agrupar los elementos
Para completar la solucin de programacin para este problema,
quiz desee volver a leer sus datos de una tabla. Cuando tenga una
tabla, explore los registros y aplique su cdigo de programa a un
campo de la tabla, en lugar de a una variable.
En primer lugar, podra crear una tabla temporal que contuviera
diversas cadenas de prueba. Dicha tabla podra contener un nico
campo de caracteres llamado Testfield y cuatro o cinco
registros:
Contenido de Testfield
123-456-7 89 0 -9221 9220 94321 99-
456-789 22 000001 98-99-234
Cuando sustituya el nombre de la cadena de prueba por el nombre
del campo, el programa ser similar al siguiente:
FOR nCnt = 1 TO LEN(TestField) cCharacter = SUBSTR(TestField,
nCnt, 1) IF ISDIGIT(cCharacter) cNumOnly = cNumOnly + cCharacter
ENDIFENDFOR? TestField? cNumOnly
Puede ajustar manualmente el puntero de registro si examina la
tabla y se desplaza por ella. Cuando el puntero de registro est en
cada uno de los registros, el programa funcionar de la forma
deseada. O bien, ahora puede envolver el cdigo de desplazamiento
por la tabla en el resto de su programa:
SCAN cNumOnly = "" FOR nCnt = 1 TO LEN(TestField) cCharacter =
SUBSTR(TestField, nCnt, 1) IF ISDIGIT(cCharacter)
20 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 21 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
cNumOnly = cNumOnly + cCharacter ENDIF ENDFOR? TestField?
cNumOnly?ENDSCAN
Resultado
123-456-7 89 01234567890
456-789 2245678922
-9221 9220 94321 99-922192209432199
000001 98-99-2340000019899234
Comprobar todo el programa
En lugar de imprimir la cadena al final del programa, quiz desee
guardarla en la tabla. Para ello, utilice la siguiente lnea de
cdigo:
REPLACE TestField WITH cNumOnly
El programa completo ser el siguiente:
SCAN cNumOnly = "" FOR nCnt = 1 TO LEN(TestField) cCharacter =
SUBSTR(TestField, nCnt, 1) IF ISDIGIT(cCharacter) cNumOnly =
cNumOnly + cCharacter ENDIF ENDFOR REPLACE TestField WITH
cNumOnlyENDSCAN
Cuando tenga el programa completo, necesitar probarlo con los
datos de ejemplo antes de probarlo con los datos reales.
Aumentar la robustez del programa
Un programa robusto hace lo que usted quiere que haga, pero
tambin se anticipa a posibles problemas y se encarga de ellos. Este
programa hace lo que usted quiere, pero hace algunas suposiciones
que deben ser verdaderas para que funcione:
l Hay una tabla abierta en el rea de trabajo actual. l La tabla
tiene un campo de caracteres llamado TestField.
Si la tabla no est abierta en el rea de trabajo actual o si la
tabla no tiene un campo de caracteres con
21 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 22 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
el nombre esperado, el programa generar un mensaje de error y no
realizar la tarea prevista.
Programa para eliminar los caracteres no numricos de todos los
registros de un campo
Cdigo Comentarios
lFieldOK = .F. Esta variable determina si existen las
condiciones necesarias para que el programa funcione. Inicialmente
se establece la variable como falsa (.F.) para suponer que las
condiciones necesarias no existen.
FOR nCnt = 1 TO FCOUNT( ) IF FIELD(nCnt) = ; UPPER("TestField")
IF TYPE("TestField") = "C" lFieldOK = .T. ENDIF EXIT
ENDIFENDFOR
Esta seccin de cdigo recorre todos los campos de la tabla actual
hasta que encuentra un campo de caracteres llamado TestField. En
cuanto se encuentra el campo correcto, lFieldOK se establece como
verdadera (.T.) y EXIT finaliza el bucle (no hay ninguna razn para
continuar con la comprobacin una vez identificado el campo
correcto). Si ningn campo cumple el criterio, lFieldOK seguir
siendo falso (.F.).
IF lFieldOK La seccin de conversin del programa slo se ejecuta
si en la tabla activa actualmente hay un campo de caracteres
llamado TestField.
SCAN cNumOnly = "" FOR nCnt = 1 TO LEN(TestField) cCharacter = ;
SUBSTR(TestField, nCnt, 1) IF ISDIGIT(cCharacter) cNumOnly =
cNumOnly + ; cCharacter ENDIF ENDFOR
El cdigo de conversin.
REPLACE TestField WITH ; cNumOnlyENDSCAN
ENDIF Fin de la condicin IF lFieldOK.
La mayor limitacin de este programa es que slo puede utilizarlo
para un campo. Si desea eliminar los caracteres no numricos de un
campo distinto de TestField, tendr que recorrer el programa y
cambiar cada aparicin de TestField por el nombre del otro
campo.
Convertir el programa a un procedimiento, segn se explica en las
prximas secciones, permite hacer que el cdigo que ha escrito sea ms
genrico y ms reutilizable, con lo que ahorrar trabajo ms
adelante.
22 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 23 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
Usar procedimientos y funciones definidas por el usuario
Los procedimientos y funciones permiten mantener en un nico
lugar el cdigo que utiliza con frecuencia y llamarlo a travs de su
aplicacin siempre que lo necesite. Esto hace que su cdigo sea ms
fcil de leer y mantener, ya que en un procedimiento el cambio se
realiza una sola vez, no varias veces como ocurre en un
programa.
En Visual FoxPro, los procedimientos son similares a ste:
PROCEDURE miproc * Esto es un comentario, pero podra ser cdigo
ejecutableENDPROC
Tradicionalmente, los procedimientos contienen cdigo que usted
escribe para realizar una operacin y funciones que calculan y
devuelven un valor. En Visual FoxPro, las funciones son similares a
los procedimientos:
FUNCTION mifuncin * Esto es un comentario, pero podra ser cdigo
ejecutableENDFUNC
Puede incluir procedimientos y funciones en un archivo de
programa distinto o al final de un archivo de programa que contenga
cdigo normal de programa. En un archivo de programa no puede tener
cdigo ejecutable de programa a continuacin de los procedimientos y
las funciones.
Si incluye sus procedimientos y funciones en un archivo de
programa distinto, podr hacer accesibles estos procedimientos y
funciones desde su programa si utiliza el comando SET PROCEDURE TO.
Por ejemplo, para un archivo llamado FUNPROC.PRG, utilice el
siguiente comando en la ventana Comandos:
SET PROCEDURE TO funproc.prg
Llamar a un procedimiento o a una funcin
Hay dos formas de llamar a un procedimiento o a una funcin en
sus programas:
l Utilizar el comando DO. Por ejemplo:
DO miproc
O bien
l Incluir detrs del nombre de la funcin un par de parntesis. Por
ejemplo:
mifuncin( )
Cada uno de estos mtodos puede ampliarse enviando o recibiendo
valores desde el procedimiento o la funcin.
23 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 24 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
Enviar valores a un procedimiento o a una funcin
Para enviar valores a procedimientos o funciones se incluyen
parmetros. Por ejemplo, el procedimiento siguiente acepta un solo
parmetro:
PROCEDURE miproc( cString ) * La lnea siguiente muestra un
mensaje MESSAGEBOX ("miproc" + cString)ENDPROC
Nota Incluir los parmetros dentro de los parntesis en la lnea de
definicin de un procedimiento o una funcin, por ejemplo PROCEDURE
miproc(cString), indica que el parmetro tiene alcance local al
procedimiento o la funcin. Tambin puede permitir que una funcin o
un procedimiento acepte parmetros de alcance local mediante
LPARAMETERS.
Los parmetros funcionan de manera idntica en una funcin. Para
enviar un valor como un parmetro de este procedimiento o a una
funcin, podra utilizar una cadena o una variable que contuviera una
cadena, como se muestra en la tabla siguiente.
Transferencia de parmetros
Cdigo Comentarios
DO miproc WITH cTestStringDO miproc WITH "cadena de prueba"
Llama a un procedimiento y transfiere una variable de caracteres
o un literal de cadena.
mifuncin("cadena de prueba")mifuncin( cTestString )
Llama a una funcin y transfiere una copia de una cadena literal
o una variable de caracteres.
Nota Si llama un procedimiento o funcin sin usar el comando DO,
la configuracin de UDFPARMS controla cmo se transfieren los
parmetros. De forma predeterminada, UDFPARMS se establece como
VALUE, por lo que se transferirn copias de los parmetros. Cuando
utilice DO, se emplear el parmetro real (el parmetro se transfiere
por referencia) y cualquier cambio realizado en el procedimiento o
en la funcin se reflejarn en los datos originales, cualquiera que
sea la configuracin de UDFPARMS.
Puede enviar mltiples valores a un procedimiento o funcin si los
separa mediante comas. Por ejemplo, el siguiente procedimiento
espera tres parmetros: una fecha, una cadena de caracteres y un
nmero.
PROCEDURE miproc( dDate, cString, nTimesToPrint ) FOR nCnt = 1
to nTimesToPrint ? DTOC(dDate) + " " + cString + " " + STR(nCnt)
ENDFORENDPROC
Podra llamar a este procedimiento mediante la siguiente lnea de
cdigo:
DO miproc WITH DATE(), "Hola", 10
24 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 25 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
Recibir valores desde una funcin
El valor devuelto de forma predeterminada es verdadero (.T.),
pero puede utilizar el comando RETURN para devolver cualquier
valor. Por ejemplo, la siguiente funcin devuelve una fecha
correspondiente a dos semanas despus de la fecha que se ha pasado
como parmetro.
FUNCTION plus2weeksPARAMETERS dDate RETURN dDate + 14ENDFUNC
La siguiente lnea de cdigo almacena el valor devuelto desde esta
funcin en una variable:
dDeadLine = plus2weeks(DATE())
En la tabla siguiente se muestran las formas en que puede
almacenar o mostrar valores devueltos por una funcin.
Manipular valores devueltos
Cdigo Comentarios
var = mifuncin( ) Almacena en una variable el valor devuelto por
la funcin.
? mifuncin( ) Imprime en la ventana activa de salida el valor
devuelto por la funcin.
Comprobar parmetros en un procedimiento o en una funcin
Es conveniente comprobar que los parmetros enviados a su
procedimiento o a su funcin son los que espera recibir. Puede
utilizar las funciones TYPE( ) y PARAMETERS( ) para comprobar el
tipo y el nmero de parmetros enviados a su procedimiento o a su
funcin.
El ejemplo de la seccin anterior necesita recibir un parmetro de
tipo Fecha. Puede utilizar la funcin TYPE( ) para asegurarse de que
el valor que su funcin recibe es del tipo adecuado.
FUNCTION plus2weeks( dDate ) IF TYPE("dDate") = "D" RETURN dDate
+ 14 ELSE MESSAGEBOX( "requiere un parmetro de tipo Fecha" ) RETURN
{} && Devuelve una fecha vaca ENDIFENDFUNC
Si un procedimiento espera menos parmetros de los que recibe,
Visual FoxPro generar un mensaje de error. Por ejemplo, si
especific dos parmetros pero llam al procedimiento con tres
parmetros, obtendr un mensaje de error. Pero si un procedimiento
espera ms parmetros de los que recibe, los parmetros adicionales
simplemente se inicializarn como falso (.F.). Puesto que no hay
ninguna forma de decir si el ltimo parmetro se estableci como falso
(.F.) o se omiti, el siguiente
25 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 26 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
procedimiento comprueba que se ha enviado el nmero correcto de
parmetros:
PROCEDURE SaveValue( cStoreTo, cNewVal, lIsInTable ) IF
PARAMETERS( ) < 3 MESSAGEBOX( "No se han pasado suficientes
parmetros". ) RETURN .F. ENDIF IF lIsInTable REPLACE (cStoreTo)
WITH (cNewVal) ELSE &cStoreTo = cNewVal ENDIF RETURN
.T.ENDPROC
Convertir el programa NUMONLY en una funcin
NUMONLY.PRG, el programa de ejemplo descrito en la seccin El
proceso de la programacin, puede hacerse ms robusto y til si crea
una funcin para la parte del programa que elimina los caracteres no
numricos de una cadena.
Procedimiento de ejemplo para devolver caracteres numricos de
una cadena
Cdigo Comentarios
FUNCTION NumbersOnly( cMixedVal ) Principio de la funcin, que
acepta una cadena de caracteres.
cNumOnly = "" FOR nCnt = 1 TO LEN(cMixedVal) cCharacter = ;
SUBSTR(cMixedVal, nCnt, 1) IF ISDIGIT(cCharacter) cNumOnly = ;
cNumOnly + cCharacter ENDIF ENDFOR
Crea una cadena que slo tiene los caracteres numricos de la
cadena original.
RETURN cNumOnly Devuelve la cadena que slo tiene caracteres
numricos.
ENDFUNC Fin de la funcin.
Adems de permitirle utilizar este cdigo en mltiples situaciones,
esta funcin mejora la legibilidad del programa:
SCAN REPLACE FieldName WITH NumbersOnly(FieldName)ENDSCAN
O, ms sencillo an:
REPLACE ALL FieldName WITH NumbersOnly(FieldName)
26 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 27 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
Cmo avanzar
La programacin por procedimientos, junto con la programacin
orientada a objetos y las herramientas de diseo de Visual FoxPro,
pueden ayudarle a programar una verstil aplicacin de Visual FoxPro.
El resto de este manual explica temas con los que se encontrar a
medida que programe aplicaciones de Visual FoxPro.
Para obtener ms informacin acerca de la programacin orientada a
objetos, consulte el captulo 3, Programacin orientada a objetos.
Para aprender a disear formularios con el Diseador de formularios,
consulte el captulo 9,Crear formularios.
Captulo 2: Programar una aplicacin Una aplicacin de Visual
FoxPro incluye normalmente una o ms bases de datos, un programa
principal que configura el entorno del sistema para la aplicacin y
una interfaz de usuario compuesta por formularios, barras de
herramientas y mens. Las consultas y los informes permiten que los
usuarios extraigan informacin de sus datos.
Este captulo trata los temas siguientes:
l Disear la aplicacinl Crear bases de datosl Crear clasesl
Proporcionar acceso a la funcionalidadl Proporcionar acceso a la
informacinl Pruebas y depuracin
l Para obtener informacin acerca de la programacin de
aplicaciones con el Generador de aplicaciones y el Marco de
aplicaciones mejorado, vea Programar aplicaciones con el Marco de
aplicaciones.
Disear la aplicacin
Un diseo apropiado ahorra tiempo, esfuerzo, dinero y permite
mantener la cordura al programar. Cuanto ms implique a los usuarios
en el proceso de diseo, mejor. No importa lo cuidadosamente que se
disee; aun as, acabar refinando las especificaciones a medida que
avance el proyecto y los usuarios le proporcionen informacin
adicional.
Algunas de las decisiones de diseo que tome afectarn a la forma
en que crear elementos de la aplicacin. Quin utilizar la aplicacin?
Cul es el centro de actividad del usuario? Con qu cantidad de datos
se supone que se trabajar? Se utilizarn servidores de datos de
apoyo o los datos sern exclusivamente locales para un nico usuario
o para mltiples usuarios a travs de una red? Considere estos
factores antes de avanzar demasiado en el proyecto.
Actividades frecuentes de usuario
27 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 28 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
Incluso si sus usuarios finales trabajan con clientes, pedidos y
piezas, lo que determinar la forma en que la aplicacin deber tratar
los datos es el modo en que los usuarios trabajan con esa
informacin. Un formulario de entrada de pedidos, como el de
Tastrade.app (en el directorio ...\Samples\Vfp98\Tastrade de Visual
Studio), puede ser necesario para algunas aplicaciones, pero no
sera una buena herramienta para administrar inventarios o para
hacer un seguimiento de las ventas, por ejemplo.
Tamao de la base de datos
Deber pensar ms en el rendimiento si trata con grandes conjuntos
de datos. En el captulo 15, Optimizar aplicaciones, se explican los
mtodos para optimizar el rendimiento. Tambin puede desear ajustar
el modo en que los usuarios pueden desplazarse por los datos. Si
tiene veinte o treinta registros en una tabla, est bien que permita
que los usuarios desplacen el puntero de registro de una tabla un
registro cada vez. Si tiene veinte o treinta mil registros, deber
proporcionar otros sistemas para obtener los datos deseados:
agregar listas o cuadros de dilogos de bsqueda, filtros,
consultaspersonalizadas, etc. El captulo 10, Usar controles,
explica la forma de utilizar una lista para seleccionar registros
especficos de una tabla. En el captulo 8, Crear vistas, se explica
la creacin de consultas parametrizadas.
Usuario individual frente a mltiples usuarios
Es conveniente crear la aplicacin pensando que mltiples usuarios
tendrn acceso simultneo a la base de datos. Visual FoxPro facilita
la programacin para acceso compartido. En el captulo 17, Programar
para acceso compartido, se describen tcnicas para permitir que
varios usuarios tengan acceso simultneo a la base de datos.
Consideraciones internacionales
Si sabe que su aplicacin slo se utilizar en el entorno de un
nico idioma, no debe preocuparse de la internacionalizacin. Por
otra parte, si desea ampliar su mercado, o si sus usuarios deben
trabajar con datos o configuraciones de entorno internacionales,
deber tener en cuenta estos factores al crear la aplicacin. En el
captulo 18, Programar aplicaciones internacionales, se explican los
puntos que debe tener en cuenta cuando programe aplicaciones
internacionales.
Datos locales frente a datos remotos
Si su aplicacin trata con datos remotos, deber administrarlos de
forma diferente a como administrara los datos nativos de Visual
FoxPro. En el captulo 8, Crear vistas, se explica la forma de crear
vistas para datos locales o remotos. En la parte 6 del Manual del
programador, Crear soluciones cliente-servidor, se explica cmo
disear aplicaciones que trabajen sin problemas con datos
remotos.
Descripcin general del proceso
El proceso de crear una aplicacin es muy repetitivo. Puesto que
no hay dos aplicaciones exactamente iguales, lo que har
probablemente ser definir prototipos y refinar algunos componentes
varias veces antes de obtener un producto final. Las expectativas
de los usuarios finales, o sus solicitudes, tambin pueden cambiar,
lo que har necesario redefinir aspectos de la aplicacin. Adems,
nadie escribe cdigo libre de errores, por lo que las pruebas y la
depuracin conducen a algn tipo de rediseo o
28 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 29 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
rescritura.
El proceso de creacin de una aplicacin
Adems de tener en cuenta la imagen general durante la fase de
diseo, tendrn que decidir cules son las funciones necesarias, qu
datos estn implicados y cmo debe estar estructurada la base de
datos. Tendr que disear una interfaz para que el usuario tenga
acceso a la funcionalidad de la aplicacin. Puede crear informes y
consultas para que los usuarios puedan extraer informacin til de
sus datos.
Iniciar la programacin
Despus de haber pensado qu componentes son necesarios en la
aplicacin, es posible que quiera configurar un conjunto de
directorios y un proyecto para organizar los archivos componentes
que desea crear para la aplicacin. Puede crear el conjunto de
directorios mediante el Explorador de Windows y puede crear el
proyecto en el Administrador de proyectos o usar el Asistente para
aplicaciones para configurarlos a la vez. Este nuevo Asistente para
aplicaciones abre el Generador de aplicaciones para que pueda
personalizar an ms un proyecto y los componentes que inicie en el
Asistente. Por compatibilidad con versiones anteriores, puede
elegir el Asistente para aplicaciones (5.0) anterior.
Usar el Administrador de proyectos
29 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 30 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
El Administrador de proyectos permite compilar la aplicacin
completa. En la fase de programacin de la aplicacin, el
Administrador de proyectos facilita el diseo, la modificacin y la
ejecucin de los componentes individuales de su aplicacin.
El Administrador de proyectos
Cuando utilice el Administrador de proyectos, podr:
l Modificar y ejecutar partes de su aplicacin (formularios,
mens, programas) con tan slo algunos clics.
l Arrastrar clases, tablas y campos desde el Administrador de
proyectos hasta el Diseador de formularios o el Diseador de
clases.
l Arrastrar clases entre bibliotecas de clases. l Ver y
modificar fcilmente sus tablas y bases de datos. l Agregar
descripciones para los componentes de la aplicacin. l Arrastrar y
colocar elementos entre proyectos.
Para obtener informacin detallada acerca del uso del
Administrador de proyectos, consulte el captulo 1, Introduccin, del
Manual del usuario. Para obtener informacin acerca de la compilacin
de aplicaciones, consulte el captulo 13, Compilar una aplicacin, en
este manual.
Crear bases de datos
Puesto que una aplicacin de base de datos depende tanto de los
datos subyacentes, la mejor forma de empezar a disear su aplicacin
es comenzar por los datos. Puede configurar su propia base de datos
y determinar cules sern las relaciones entre las tablas, qu reglas
comerciales va a exigir, etc. antes
30 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 31 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
de disear cualquier componente de interfaz o de manipulacin de
datos. La creacin de una estructura slida de la base de datos har
que el trabajo de programacin sea mucho ms sencillo.
En el captulo 5, Disear bases de datos, el captulo 6, Crear
bases de datos y el captulo 7, Trabajar con tablas, se explican los
temas de diseo y uso de Visual FoxPro para disear tablas y bases de
datos efectivas y eficaces.
Crear clases
Puede crear una aplicacin robusta, orientada a objetos y
controlada por eventos utilizando nicamente las clases de base de
Visual FoxPro. Es posible que no tenga que crear una clase, pero
desear hacerlo. Adems de hacer que el cdigo sea ms manejable y
sencillo de mantener, una biblioteca de clases slida le permite
crear rpidamente prototipos e incorporar funciones a una aplicacin.
Puede crear clases en un archivo de programa, en el Diseador de
formularios (mediante el comando Guardar como clase del men
Archivo) o en el Diseador de clases.
El captulo 3, Programacin orientada a objetos, trata algunos de
los beneficios de la creacin de clases y detalla su creacin con el
Diseador de clases o mediante programacin.
Proporcionar acceso a la funcionalidad
La satisfaccin del usuario se ver influenciada en gran medida
por la interfaz que le proporcione para la funcionalidad de su
aplicacin. Puede tener un modelo de clases muy limpio, cdigo muy
elegante y soluciones muy inteligentes para los problemas difciles
de su aplicacin, pero esto casi siempre est oculto a los clientes.
Lo que ellos ven es la interfaz que usted les proporciona.
Afortunadamente, las herramientas de diseo de Visual FoxPro
facilitan la creacin de interfaces atractivas y ricas en
caractersticas.
La interfaz de usuario consiste principalmente en formularios,
barras de herramientas y mens. Puede asociar toda la funcionalidad
de su aplicacin con controles o comandos de men en la interfaz. En
el captulo 9, Crear formularios, se describe la creacin de
formularios y conjuntos de formularios. La utilizacin de controles
de Visual FoxPro en los formularios se trata en el captulo 10, Usar
controles. Consulte el captulo 11, Disear mens y barras de
herramientas, para dar los ltimos retoques a la aplicacin.
Proporcionar acceso a la informacin
Probablemente muestre cierta informacin para los usuarios en
formularios, pero tambin desear ofrecer a los usuarios la
posibilidad de especificar exactamente la informacin que desean
ver, as como la opcin de imprimirla en informes o etiquetas. Las
consultas, especialmente las consultas que aceptan parmetros
definidos por el usuario, permiten a los usuarios tener ms control
sobre sus datos. Los informes permiten a los usuarios imprimir
imgenes totales, parciales o de resumen de sus datos. Los controles
ActiveX y la automatizacin permiten que su aplicacin comparta
informacin y funciones con otras aplicaciones.
El Diseador de consultas y el Diseador de informes se describen
en los captulos 4 a 7 del Manual del usuario. En el captulo 12 de
este manual, Agregar consultas e informes, se explica la integracin
de consultas e informes en una aplicacin. El captulo 16, Agregar
OLE describe la integracin de
31 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 32 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
OLE en una aplicacin.
Probar y depurar
La prueba y depuracin es algo que la mayora de los programadores
hace en cada paso del proceso de desarrollo. Es conveniente probar
y depurar a medida se va avanzando. Si crea un formulario, querr
asegurarse de que ste hace lo que se desea antes de continuar con
otros elementos de su aplicacin.
En el captulo 14, Probar y depurar aplicaciones, se explica el
uso de las herramientas de depuracin de Visual FoxPro para depurar
sus aplicaciones y se ofrecen sugerencias para que el proceso
resulte ms sencillo.
Captulo 3: Programacin orientada a objetosAunque Visual FoxPro
admite la programacin estndar por procedimientos, se ha ampliado la
capacidad del lenguaje para proporcionar la potencia y la
flexibilidad propias de la programacin orientada a objetos.
El diseo orientado a objetos y la programacin orientada a
objetos representan un cambio de perspectiva con respecto a la
programacin estndar por procedimientos. En lugar de pensar en el
flujo del programa desde la primera hasta la ltima lnea de cdigo,
se debe pensar en la creacin de objetos: componentes autocontenidos
de una aplicacin que tienen funcionalidad privada adems de la
funcionalidad que se puede exponer al usuario.
En este captulo se tratan los temas siguientes:
l Descripcin de los objetos de Visual FoxProl Descripcin de las
clases de Visual FoxProl Adaptar la clase a la tareal Crear clasesl
Agregar clases a formulariosl Definir clases mediante
programacin
Descripcin de los objetos de Visual FoxPro
En Visual FoxPro, los formularios y los controles son objetos
que puede incluir en sus aplicaciones. Puede manipular estos
objetos a travs de sus propiedades, eventos y mtodos.
Las mejoras en el lenguaje orientado a objetos de Visual FoxPro
proporcionan un mayor control sobre los objetos de las
aplicaciones. Asimismo, facilitan la creacin y el mantenimiento de
bibliotecas de cdigo reutilizable, proporcionando:
l Cdigo ms compacto. l Incorporacin ms sencilla del cdigo a las
aplicaciones sin necesidad de elaborar esquemas de
asignacin de nombres. l Menos complejidad al integrar cdigo de
distintos archivos en una aplicacin.
32 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 33 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
La programacin orientada a objetos es en gran medida un modo de
empaquetar cdigo de manera que se pueda volver a utilizar y
mantener ms fcilmente. Los paquetes principales se llaman
clases.
Clases y objetos: los bloques funcionales de las
aplicaciones
Las clases y los objetos estn estrechamente relacionados, pero
no son lo mismo. Una clase contiene informacin sobre cul debe ser
la apariencia y el comportamiento de un objeto. Una clase es el
plano o esquema de un objeto. Por ejemplo, el esquema elctrico y de
diseo de un telfono sera algo similar a una clase. El objeto o una
instancia de la clase sera el telfono.
La clase determina las caractersticas del objeto.
Los objetos tienen propiedades
Un objeto tiene ciertas propiedades o atributos. Por ejemplo, un
telfono tiene un color y un tamao determinados. Cuando se instala
un telfono en la oficina, tiene una determinada posicin sobre la
mesa. El receptor puede estar colgado o descolgado.
Los objetos que se crean en Visual FoxPro tambin tienen
propiedades que estn determinadas por la clase en la que se basa el
objeto. Estas propiedades pueden establecerse en tiempo de diseo o
en tiempo de ejecucin.
Por ejemplo, en la tabla siguiente se indican algunas
propiedades que puede tener una casilla de verificacin.
Propiedad Descripcin
Caption Texto descriptivo que aparece junto a la casilla de
verificacin.
Enabled Especifica si un usuario puede elegir o no la casilla de
verificacin.
ForeColor Color del texto del ttulo.
Left Posicin del extremo izquierdo de la casilla de
verificacin.
MousePointer Apariencia del puntero del mouse (ratn) cuando est
situado sobre la casilla de verificacin.
Top Posicin de la parte superior de la casilla de
verificacin.
33 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 34 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
Visible Especifica si la casilla de verificacin es visible o
no.
Los objetos tienen eventos y mtodos asociados
Cada objeto reconoce y puede responder a determinadas acciones
denominadas eventos. Un evento es una actividad especfica y
predeterminada, iniciada por el usuario o por el sistema. Los
eventos, en la mayor parte de los casos, se generan por interaccin
del usuario. Por ejemplo, con un telfono, se desencadena un evento
cuando un usuario descuelga el receptor. Los eventos tambin se
desencadenan cuando el usuario presiona los botones para efectuar
una llamada.
En Visual FoxPro, las acciones del usuario que desencadenan
eventos incluyen clics, movimientos del mouse y pulsaciones de
teclas. Inicializar un objeto y encontrar una lnea de cdigo que
produce un error son eventos iniciados por el sistema.
Los mtodos son procedimientos asociados a un objeto. Los mtodos
se diferencian de los procedimientos normales de Visual FoxPro en
que estn vinculados inseparablemente a un objeto y tienen nombres
distintos que los procedimientos normales de Visual FoxPro.
Los eventos pueden tener mtodos asociados. Por ejemplo, si
escribe cdigo de mtodo para el evento Click, ese cdigo se ejecutar
cuando se produzca el evento Click. Los mtodos tambin pueden
existir independientemente de los eventos. Se debe llamar a estos
mtodos de forma explcita en el cdigo.
El conjunto de eventos es limitado, aunque amplio. No es posible
crear nuevos eventos. Sin embargo, el conjunto de mtodos puede
ampliarse indefinidamente.
La tabla siguiente muestra algunos de los eventos asociados a
una casilla de verificacin:
Evento Descripcin
Click El usuario hace clic en la casilla de verificacin.
GotFocus El usuario activa la casilla de verificacin al hacer
clic en ella o al llegar a ella a travs de la tecla TAB.
LostFocus El usuario selecciona otro control.
La tabla siguiente muestra algunos mtodos asociados a una
casilla de verificacin:
Mtodo Descripcin
Refresh El valor de la casilla de verificacin se actualiza para
reflejar los cambios que se puedan haber producido en el origen de
datos subyacente.
SetFocus El enfoque se establece en la casilla de verificacin
como si el usuario hubiera presionado la tecla TAB hasta activar la
casilla de verificacin.
Consulte el captulo 4, Descripcin del modelo de eventos si desea
obtener una explicacin del orden
34 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 35 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
en que se producen los eventos.
Descripcin de las clases de Visual FoxPro
Todas las propiedades, eventos y mtodos de un objeto se
especifican en la definicin de clase. Adems, las clases tienen las
siguientes caractersticas que las hacen especialmente tiles para
crear cdigo reutilizable y fcil de mantener:
l Encapsulamiento l Subclases l Herencia
Ocultar la complejidad innecesaria
Cuando instale un telfono en la oficina, lo ms probable es que
no le interese el funcionamiento interno del aparato para la
recepcin de llamadas, la realizacin o la finalizacin de conexiones
con centralitas electrnicas o la conversin de las pulsaciones de
tecla en seales electrnicas. Lo nico que necesitar saber es que
puede levantar el auricular, marcar los nmeros apropiados y hablar
con la persona con la que desea hablar. La complejidad de realizar
esa conexin queda oculta. La ventaja de ignorar los detalles
internos de un objeto para poder centrarse en los aspectos del
objeto que necesita utilizar se denomina abstraccin.
La complejidad interna puede estar oculta
El encapsulamiento, que empaqueta el cdigo de mtodos y
propiedades en un mismo objeto, contribuye a la abstraccin. Por
ejemplo, las propiedades que determinan los elementos de un cuadro
de lista y el cdigo que se ejecuta al elegir un elemento de la
lista pueden encapsularse en un nico control que se agrega a un
formulario.
Aprovechar la potencia de las clases existentes
Una subclase puede tener toda la funcionalidad de una clase
existente, adems de la funcionalidad y los controles adicionales
que quiera darle. Si la clase es un telfono bsico, podr tener
subclases que tengan toda la funcionalidad del telfono original y
todas las caractersticas especializadas que desee darles.
Las subclases le permiten reutilizar cdigo.
35 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 36 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
La creacin de subclases es un modo de reducir la cantidad de
cdigo que hay que escribir. Puede comenzar definiendo un objeto que
sea similar al deseado y personalizarlo.
Simplificar el mantenimiento de cdigo
Con la herencia, si realiza un cambio en una clase, ese cambio
se reflejar en todas las subclases que se basen en ella. Esta
actualizacin automtica ahorra tiempo y trabajo. Por ejemplo, si un
fabricante de telfonos quisiera cambiar los telfonos de tipo
marcacin por aparatos de pulsacin, se ahorrara mucho trabajo si
pudiera hacer el cambio en el diagrama original y hacer que todos
los telfonos fabricados anteriormente con ese diagrama heredaran
automticamente la nueva caracterstica, en lugar de tener que
agregarla a todos los telfonos existentes individualmente.
La herencia facilita el mantenimiento del cdigo.
La herencia no funciona con el hardware, pero s en el software.
Si descubre un error en una clase, en lugar de tener que cambiar el
cdigo de todas las subclases podr corregirlo una nica vez en la
clase y el cambio se propagar a todas las subclases pertenecientes
a ella.
36 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 37 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
Jerarqua de clases de Visual FoxPro
A la hora de crear clases definidas por el usuario, resulta til
comprender la jerarqua de clases de Visual FoxPro.
Jerarqua de clases de Visual FoxPro
Contenedores y no contenedores
Los dos tipos principales de clases de Visual FoxPro y por
extensin, de objetos de Visual FoxPro, son las clases de contenedor
y las clases de control.
Clases de contenedor y clases de control
37 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 38 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
Clases de contenedor
Los contenedores pueden incluir otros objetos y permiten el
acceso a los objetos que contienen. Por ejemplo, si crea una clase
de contenedor que consta de dos cuadros de lista y dos botones de
comandoy, a continuacin, agrega a un formulario un objeto basado en
esta clase, cada objeto individual podr manipularse en tiempo de
ejecucin y en tiempo de diseo. Puede cambiar fcilmente las
posiciones de los cuadros de lista o los ttulos de los botones de
comando. Tambin puede agregar objetos al control en tiempo de
diseo; por ejemplo, puede agregar etiquetas para identificar los
cuadros de lista.
La tabla siguiente muestra los posibles componentes de cada
clase de contenedor:
Contenedor Puede contener
Grupos de botones de comando Botones de comando
Contenedor Cualquier control
Control Cualquier control
Personalizado Cualquier control, marcos de pgina, contenedor,
personalizado
Conjuntos de formularios Formularios, barras de herramientas
Formularios Marcos de pgina, cualquier control, contenedores,
personalizado
Columnas de cuadrcula Encabezados de columnas, cualquier objeto
excepto conjuntos de formularios, formularios, barras de
herramientas, cronmetros y otras columnas
38 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 39 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
Cuadrculas Columnas de cuadrcula
Grupos de botones de opcin Botones de opcin
Marcos de pgina Pginas
Pginas Cualquier control, contenedores, personalizado
Proyecto Archivos, servidores
Barras de herramientas Cualquier control, marcos de pgina,
contenedor
Clases de control
Las clases de control estn ms encapsuladas que las clases de
contenedor, pero por esa misma razn es posible que sean menos
flexibles. Las clases de control no tienen un mtodo AddObject.
Adaptar la clase a la tarea
Es conveniente poder usar clases en muchos contextos distintos.
Un diseo inteligente le permitir decidir con mayor efectividad qu
clases desea disear y qu funcionalidad va a incluir en la
clase.
Decidir cundo crear clases
Puede crear una clase para cada control y cada formulario que
utilice, aunque ste no es el modo ms efectivo de disear
aplicaciones. Es muy probable que acabe con mltiples clases que
tengan prcticamente la misma funcin y que deban mantenerse por
separado.
Encapsular funcionalidad genrica
Cree una clase de control para funcionalidad genrica. Por
ejemplo, los botones de comando que permiten al usuario mover el
puntero de registro en una tabla, un botn para cerrar un formulario
y un botn de ayuda pueden guardarse como clases y agregarse a
formularios en cualquier momento que desee que los formularios
tengan esta funcionalidad.
Puede exponer las propiedades y los mtodos en una clase de modo
que el usuario pueda integrarlos en el entorno de datos concreto de
un formulario o un conjunto de formularios.
Proporcionar una apariencia y un uso coherentes
Puede crear clases de conjunto de formularios, de formulario y
de control con una apariencia caracterstica, de modo que todos los
componentes de la aplicacin tengan la misma apariencia. Por
ejemplo, podra agregar grficos y patrones de color especficos a una
clase de formulario y utilizarla como plantilla para todos los
formularios que cree. Podra crear una clase de cuadro de texto con
una apariencia caracterstica, como un efecto de sombreado, y usar
esta clase en la aplicacin en cualquier momento que desee agregar
un cuadro de texto.
Decidir qu tipo de clase va a crear
39 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 40 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
Visual FoxPro permite crear distintos tipos de clases, cada uno
con sus propias caractersticas. Especifique el tipo de clase que
desea crear en el cuadro de dilogo Nueva clase o en la clusula AS
del comando CREATE CLASS.
Clases de base de Visual FoxPro
En el Diseador de clases puede crear subclases para la mayora de
las clases de base de Visual FoxPro.
Clases de base de Visual FoxPro
ActiveDoc Custom Label PageFrame
CheckBox EditBox Line ProjectHook
Column* Form ListBox Separator
CommandButton FormSet OLEBoundControl Shape
CommandGroup Grid OLEContainerControl Spinner
ComboBox Header* OptionButton* TextBox
Container Hyperlink Object OptionGroup Timer
Control Image Page* ToolBar
* Estas clases son parte integral de un contenedor primario y no
pueden usarse como subclases en el Diseador de clases.
Todas las clases de base de Visual FoxPro reconocen el siguiente
conjunto mnimo de eventos:
Evento Descripcin
Init Ocurre cuando se crea el objeto.
Destroy Ocurre cuando el objeto se libera de la memoria.
Error Ocurre siempre que tiene lugar un error en procedimientos
de evento o de mtodo de la clase.
Todas las clases de base de Visual FoxPro tienen el siguiente
conjunto mnimo de propiedades:
Propiedad Descripcin
Class El tipo de clase de que se trata.
BaseClass La clase de base de la que se deriva, como Form,
Commandbutton, Custom, etc.
40 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 41 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
ClassLibrary La biblioteca de clases en la que est
almacenada.
ParentClass La clase de la que se deriva la clase actual. Si la
clase se deriva directamente de una clase de base de Visual FoxPro,
la propiedad ParentClass es la misma que la propiedad
BaseClass.
Extensin de las clases de base de Visual FoxPro
Puede convertir en subclases estas clases para establecer sus
propias propiedades de control predeterminadas. Por ejemplo, si
quiere que los nombres predeterminados de controles que agregue a
formularios de sus aplicaciones reflejen automticamente sus
convenciones de nombres, puede crear clases basadas en las clases
de base de Visual FoxPro para hacerlo. Puede crear clases de
formulario con una apariencia o un comportamiento personalizado
para que sirvan como plantillas para todos los formularios que
cree.
Tambin podra convertir en subclases las clases de base de Visual
FoxPro para crear controles con funcionalidad encapsulada. Si
quiere que un botn libere formularios cuando haga clic en l, puede
crear una clase basada en la clase de botn de comando de Visual
FoxPro, establecer como ttulo "Salir" e incluir el siguiente
comando en el evento Click:
THISFORM.Release
Puede agregar este nuevo botn a cualquier formulario de la
aplicacin.
Botn de comando personalizado agregado a un formulario
Crear controles con mltiples componentes
Las subclases no estn limitadas a clases de base nicas. Puede
agregar mltiples controles a una nica definicin de clase de
contenedor. Muchas de las clases de la biblioteca de clases de
ejemplo de Visual FoxPro estn incluidas en esta categora. Por
ejemplo, la clase VCR de Buttons.vcx, ubicada en la carpeta
...\Samples\Vfp98\Classes de Visual Studio, contiene cuatro botones
de comando para desplazarse por los registros de una tabla.
Creacin de clases no visuales
41 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 42 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
Una clase basada en la clase personalizada de Visual FoxPro no
tiene un elemento visual de tiempo de ejecucin. Puede crear mtodos
y propiedades para la clase personalizada en el entorno del
Diseador de clases. Por ejemplo, podra crear una clase
personalizada llamada StrMethods e incluir en ella una serie de
mtodos para manipular cadenas de caracteres. Podra agregar esta
clase a un formulario con un cuadro de edicin y llamar a los mtodos
cuando lo necesitara. Si tuviera un mtodo llamado WordCount, podra
llamarlo cuando lo necesitara:
THISFORM.txtCount.Value = ;
THISFORM.StrMethods.WordCount(THISFORM.edtText.Value)
Las clases no visuales (como el control personalizado y el
control cronmetro) tienen una representacin visual, nicamente en
tiempo de diseo, en el Diseador de formularios. Establezca la
propiedad de imagen de la clase personalizada como el archivo .bmp
que desea mostrar en el Diseador de formularios cuando se agregue
la clase personalizada a un formulario.
Crear clases
Puede crear nuevas clases en el Diseador de clases y puede ver
cmo ver el usuario cada objeto a medida que lo disea.
Para crear una clase nueva
l En el Administrador de proyectos, seleccione la ficha Clases y
elija Nuevo.
O bien
l En el men Archivo, elija Nuevo, seleccione Clase y elija Nuevo
archivo.
O bien
l Utilice el comando CREATE CLASS.
El cuadro de dilogo Nueva clase le permite especificar el nombre
de la nueva clase, la clase en la que se basa la nueva clase y la
biblioteca en la que se almacenar.
Crear una clase nueva
42 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 43 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
Modificar una definicin de clase
Cuando haya creado una clase, podr modificarla. Los cambios
realizados a una clase afectan a todas las subclases y a todos los
objetos basados en esta clase. Puede agregar una mejora a una clase
o reparar un error en la clase, y todas las subclases y los objetos
basados en dicha clase heredarn el cambio.
Para modificar una clase en el Administrador de proyectos
1. Seleccione la clase que desea modificar.
2. Elija Modificar.
Se abrir el Diseador de clases.
Tambin puede modificar una definicin de clase visual mediante el
comando MODIFY CLASS.
Importante No cambie la propiedad Name de una clase si la usan
otros componentes de la aplicacin. De lo contrario, Visual FoxPro
no podr encontrar la clase cuando la necesite.
Subclases de una definicin de clase
Hay dos formas de crear una subclase de una clase definida por
el usuario.
Para crear una subclase de una clase definida por el usuario
1. En el cuadro de dilogo Nueva clase, haga clic en el botn de
tres puntos situado a la derecha del cuadro Basada en.
2. En el cuadro de dilogo Abrir, elija la clase en la que desea
basar la nueva clase.
O bien
l Utilice el comando CREATE CLASS.
Por ejemplo, para basar una nueva clase, x, en parentclass de
Mylibrary.vcx, use el cdigo siguiente:
CREATE CLASS x OF y AS parentclass ; FROM mylibrary
Utilizar el Diseador de clases
Cuando especifica la clase en la que est basada la nueva clase y
la biblioteca en la que se va a almacenar, se abre el Diseador de
clases.
Diseador de clases
43 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 44 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
El Diseador de clases proporciona la misma interfaz que el
Diseador de formularios, que le permite ver y modificar las
propiedades de la clase en la ventana Propiedades. La ventana de
edicin de cdigo le permite escribir cdigo para que se ejecute
cuando ocurran eventos o se llame a mtodos.
Agregar objetos a una clase de control o a una clase de
contenedor
Si basa la nueva clase en una clase de control o en una clase de
contenedor, podr agregarle controles del mismo modo que en el
Diseador de formularios: elija el botn del control en la barra de
herramientas Controles de formularios y arrastre para ajustar el
tamao en el Diseador de clases.
Independientemente del tipo de clase en el que base la nueva
clase, puede establecer propiedades y escribir cdigo de mtodo.
Tambin podr crear nuevas propiedades y mtodos para la clase.
Agregar propiedades y mtodos a una clase
Puede agregar tantas propiedades y mtodos nuevos a la nueva
clase como desee. Las propiedades contienen valores, mientras que
los mtodos contienen cdigo de procedimiento que se ejecutar cuando
llame al mtodo.
Crear propiedades y mtodos nuevos
Cuando crea propiedades y mtodos nuevos para clases, las
propiedades y los mtodos tienen como alcance la clase, no los
componentes individuales de la misma.
Para agregar una propiedad nueva a una clase
44 of 804
-
Manual del programador, Parte 1: Programacin en Visual FoxPro
Pgina 45 de 83
file://C:\temp\~hh52BB.htm 30/05/2000
1. En el men Clase, elija Nueva propiedad.
2. En el cuadro de dilogo Nueva propiedad, escriba el nombre de
la propiedad.
3. Especifique la visibilidad: Public, Protected o Hidden.
Puede tener acceso a una propiedad Public desde cualquier lugar
de la aplicacin. Las propiedades Protected y Hidden se tratan en
"Proteger y ocultar miembros de clase" ms adelante en este mismo
captulo.
Cuadro de dilogo Nueva propiedad
4. Elija Agregar.
Tambin puede incluir una descripcin de la propiedad que aparecer
en la parte inferior de la ventana Propiedades en el Diseador de
clases y en el Diseador de formularios cuando se agregue el control
a un formulario.
Solucin de problemas Cuando agregue una propiedad a una clase
que un usuario de la clase pueda establecer, el usuario puede
introducir un valor incorrecto para la propiedad que cause errores
en tiempo de ejecucin. Tiene que documentar de forma explcita los
valores vlidos de la propiedad. Si la propiedad puede establecerse
como 0, 1 2, por ejemplo, indquelo en el cuadro Descripcin del
cuadro de dilogo Nueva propiedad. Tambin es conveniente comprobar
el valor de la propiedad en cdigo que haga referencia a ella.
Para crear una propiedad de matriz
l En el cuadro Nombre del cuadro de dilogo Nueva propiedad,
especifique el nombre, el tamao y las dimensiones de la matriz.
Por ejemplo, para crear una propiedad de matriz llamada mimatriz
con diez filas y dos columnas, escriba lo siguiente en el cuadro
Nombre:
mimatriz[10,2]
La propiedad de matriz es de slo lectura en tiempo de diseo y se
muestra en cursiva en la ventana Propiedades. Se puede administrar
y redimensionar en tiempo de ejecucin. Para ver un ejemplo del
45 of 8