Llamar a un procedimiento o a una función
Hay dos formas de llamar a un procedimiento o a una función en sus
programas:
- Utilizar el comando DO Por ejemplo:
·
DO myproc
–O bien–
- Incluir detrás del nombre de la
función un par de paréntesis. Por ejemplo:
·
myfunc( )
Cada uno de estos métodos puede ampliarse enviando o recibiendo valores
desde el procedimiento o la función.
Enviar valores a un
procedimiento o a una función
Para enviar valores a procedimientos o funciones se incluyen parámetros.
Por ejemplo, el procedimiento siguiente acepta un solo parámetro:
PROCEDURE
myproc( cString )
* The following line displays a message
MESSAGEBOX ("myproc" + cString)
ENDPROC
Nota Incluir
los parámetros entre paréntesis en la línea de definición de un procedimiento o
una función, por ejemplo PROCEDURE
myproc(cString), indica que el parámetro tiene alcance local al procedimiento o la
función. También puede permitir que una función o un procedimiento acepte
parámetros de alcance local mediante LPARAMETERS
Los parámetros funcionan de manera idéntica en una función. Para enviar un
valor como un parámetro a este procedimiento o a una función, podría utilizar
una cadena o una variable que contuviera una cadena.
Transferencia de parámetros
 |
| Nota Si llama a un procedimiento o función sin usar el comando DO, la configuración de UDFPARMScontrola cómo se transfieren los parámetros. |
Puede enviar múltiples valores a un procedimiento o función si los separa mediante comas. Por ejemplo, el siguiente procedimiento espera tres parámetros: una fecha, una cadena de caracteres y un número.
PROCEDURE myproc( dDate, cString, nTimesToPrint )
FOR nCnt = 1 to nTimesToPrint
? DTOC(dDate) + " " + cString + " " + STR(nCnt)
ENDFOR
ENDPROC
Podría llamar a este procedimiento mediante la siguiente línea de código:
DO myproc WITH DATE(), "Hello World", 10
Clases de Visual FoxPro
Todas las propiedades, eventos y métodos de un objeto se especifican en la definición de clase. Además, las clases tienen las siguientes características que las hacen especialmente útiles para crear código reutilizable y fácil de mantener:
- Encapsulamiento
- Subclases
- Herencia
ENCAPSULAMIENTO
El encapsulamiento, que empaqueta el código de métodos y propiedades en un mismo objeto, contribuye a la abstracción. Por ejemplo, las propiedades que determinan los elementos de un cuadro de lista y el código que se ejecuta al elegir un elemento de la lista pueden encapsularse en un único control que se agrega a un formulario.
SUBCLASES
Una subclase puede tener toda la funcionalidad de una clase existente, además de la funcionalidad y los controles adicionales que quiera darle. Si la clase es un teléfono básico, podrá tener subclases que tengan toda la funcionalidad del teléfono original y todas las características especializadas que desee darles. La creación de subclases es un modo de reducir la cantidad de código que hay que escribir. Puede comenzar definiendo un objeto que sea similar al deseado y personalizarlo.
HERENCIA
Con la herencia, si realiza un cambio en una clase, ese cambio se reflejará en todas las subclases que se basen en ella. Esta actualización automática ahorra tiempo y trabajo. Por ejemplo, si un fabricante de teléfonos quisiera cambiar los teléfonos de dial por teléfonos de botones, se ahorraría mucho trabajo si pudiera hacer el cambio en el diagrama original y hacer que todos los teléfonos fabricados anteriormente con ese diagrama heredaran automáticamente la nueva característica, en lugar de tener que agregarla a todos los teléfonos existentes individualmente. 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 código de todas las subclases podrá corregirlo una única vez en la clase y el cambio se propagará a todas las subclases pertenecientes a ella.
Contenedores y no contenedores
Los dos tipos principales de clases de Visual FoxPro y por extensión, de objetos de Visual FoxPro, son las clases de contenedor y las clases de control.
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 comando y, a continuación, agrega a un formulario un objeto basado en esta clase, cada objeto individual podrá manipularse en tiempo de ejecución y en tiempo de diseño. Puede cambiar fácilmente las posiciones de los cuadros de lista o los títulos de los botones de comando. También puede agregar objetos al control en tiempo de diseño; por ejemplo, puede agregar etiquetas para identificar los cuadros de lista.
La tabla siguiente muestra los posibles componentes de cada clase de contenedor: