Scripting en Rational Rose (LSI-2000-01) : Versión Borrador
Full text
Scripting en Rational Rose (Version b orrador) Octavio Martn Daz Dpto. de Lengua jes y Sistemas Informaticos Facultad de Informatica y Estadstica, Universidad de Sevilla Avda. de la Reina Mercedes s/n, Sevilla 41.012 Tel/Fax: 95.455.71.39, e-mail: octa[email protected] 26 de Enero de 2.000
Captulo 1 Intro duccion El presente manual se ha realizado a partir de la ayuda ofrecida p or Rational Rose 98 . 1.1 Extensibilidad de Rational Rose Rational Rose p ermite la p osibilidad de extender y p ersonalizar su funcionalidad a aquellas necesidades de desarrollo de software esp eccas para un proyecto determinado. Son entre otras: Automatizar las acciones del usuario en el entorno de Rational Rose con scripts (p or ejemplo, creacion de diagramas y clases, mo dicaciones del mo delo, generacion de do cumentos y otras). Ejecutar las funciones de Rose desde otras aplicaciones mediante la automatizacion OLE . Acceder a las clases, propiedades y meto dos de un mo delo de Rose desde un entorno de desarrollo de softw are mediante la inclusion de la librera de extension de tip os. Personalizar los men us de la aplicacion. Utilizar el administrador de anexos ( Add{ins ). 1.1.1 Scripting El lengua je de scripting de Rational Rose es una version ampliada del lengua je Summit BasicScript . Las extensiones realizadas a este lengua je permiten automatizar las acciones del usuario en el entorno de la aplicacion yen algunos casos realizar funciones que no estan disp onibles directamente a traves del interfaz de usuario. 1.1.2 Automatizacion OLE La automatizacion OLE p ermite la integracion de otras aplicaciones con Rational Rose de dos formas: Utilizando R ose como un controlador de la automatizacion: un ob jeto OLE puede ser llamado desde un script . Por ejemplo: un script puede ejecutar funciones en aplicaciones tales como Word o Visual Basic . 1
Script de Rose Elementos del Modelo Diagramas Interfaz de Extensión de Rose (REI) Aplicación Rose Automatización de Rose Figura 1.1: El diagrama de comp onentes de Rational Rose . Utilizando Rose como un servidor de automatizacion: el ob jeto OLE de la aplicacion puede ser llamado desde otras aplicaciones que act uen como un controlador OLE . Por ejemplo: Visual Basic , Excel , Summit BasicScript , Softbridge Basic Language , C++ yotros. 1.1.3 El mo delo de comp onentes de Rational Rose La aplicacion Rational Rose esta basada en comp onentes y esta enfo cada hacia el desarrollo de software basado en comp onentes. To da la funcionalidad de la aplicacion es accesible a traves del Mo delo del Interfaz de Extension de Rose ( REI ) que esencialmente es un metamo delo de un mo delo de Rose que exp one los paquetes, clases, propiedades y meto dos que denen y controlan la aplicacion y to das sus funciones. La comunicacion con este interfaz se realiza a traves de scripts o de la automatizacion OLE . La librera de extension de tip os RationalRose.tlb p ermite acceder al interfaz REI desde un entorno de programacion. El diagrama de la gura 1.1 muestra los comp onentes del nucleo de Rational Rose , los comp onentes del interfaz REI y las relaciones entre ellos: Interfaz de extension El conjunto com un de interfaces utilizados por un script o una automatizacion OLE para acceder a Rational Rose . A su vez se sub dividen en tres interfaces muy imp ortantes: { Aplicacion Rose Los ob jetos de extension que forman el interfaz a las funciones de la aplicacion. { Diagramas Los ob jetos de extension que forman el interfaz a los diagramas y vistas. { Elementos del modelo Los ob jetos de extension que forman el interfaz a los elementos de un mo delo. Scripting El conjunto de scripts que incrementan la funcionalidad de Rational Rose . Automatizacion El conjunto de ob jetos de automatizacion que p ermiten a Rational Rose funcionar como un controlador o un servidor OLE . 2
1.1.4 Personalizacion de los men us los men us de la aplicacion se pueden extender o adaptar mo dicando el chero de men us ( Rose.mnu ) que Rose lee al inicio de su ejecucion. Se p ermiten a ~nadir: Submen us. Op ciones de men u que ejecuten: { Primitivas de Rose . { Scripts . { Comandos de sistema. { Programas externos. Separadores de men us. 1.1.5 Administrador de anexos ( add{ins ) El administrador de anexos de Rational Rose ofrece algunas facilidades para instalar nuevos pro ductos y extensiones en el entorno de la aplicacion. 1.2 Creacion y mo dicacion de scripts Para crear un nuevo script se realizan los siguientes pasos: 1. Seleccionar Tools/New Script del men ude R ose . 2. Escribir el texto del script . 3. Seleccionar File/Save As del men u para salvar el nuevo script . Y para mo dicar un script ya existente: 1. Seleccionar Tools/Open Script del men ude Rose . 2. Seleccionar alguno de los scripts disp onibles. 3. Pulsar Ok para entrar en el editor de scripts y visualizarlo. 4. Seleccionar el texto del script y copiarlo al p ortapap eles. 5. Seleccionar Tools/New Script . 6. Pegar el contenido del p ortapap eles en el nuevo script . 7. Seleccionar File/Save As para salvar el nuevo script . 3
1.3 Asp ectos basicos del lengua je de scripts 1.3.1 Inicio y nalizacion de scripts Al igual que en muchos otros lengua jes, la ejecucion del script comienza en la subrutina M ain . Por lo tanto, to do script deb e tenerla denida. Cuando la ejecucion llega al End Sub corresp ondiente a la subrutina M ain esta se termina. El siguiente ejemplo muestra la denicion habitual de M ain : Sub Main() MsgBox ``Esta es la subrutina Main().'' End Sub La sentencia End naliza de manera forzada la ejecucion del script , cerrando to dos los cheros abiertos. Este segundo ejemplo adelanta la nalizacion del script con la sentencia End : Sub Main() MsgBox "La proxima lnea terminaralaejecucion del script." End End Sub 1.3.2 Los comentarios En el siguiente ejemplo se pueden observar varias formas de intro ducir comentariosenelcodigo de un script : MsgBo x ``Hola'' 'Visualiza un mensa je. REM Esto es un comentario. MsgBox ``Antes del comentario'' /* Este parrafo esta to do comentado. Esta lnea tambien sera ignorada. Esta es la ultima lnea del comentario. */ MsgBox ``Despues del comentario'' 1.3.3 Un asp ecto sintactico El caracter de continuacion de lnea ( ) p ermite dividir una sentencia compleja en varias lneas. 4
Captulo 2 Intro duccion al lengua je Summit BasicScript Como se ha dicho anteriormente, el lengua je de scripting de Rational Rose esta basado en una version de Basic ,por lo que su aprendiza je resulta sencillo. A continuacion se describ en las principales caractersticas del lengua je y que se p o dran utilizar cuando se escriba un script para Rational Rose . 2.1 Tip os de datos simples En primer lugar se muestran los principales tip os que ofrece el lengua je. 2.1.1 Tip os logicos Bo olean Este tip o de datos representa a los valores logicos True y False . Por defecto, una v ariable b o oleana tendraelvalor False . 2.1.2 Tip os numericos Integer (%) Este tip o de datos representa a los numeros enteros de hasta cuatro dgito de precision en el siguiente rango: ; 32768 integ er 32767 Long (&) Este tip o de datos representa a los n umeros enteros largos de hasta 10 dgitos de precision en el siguiente rango: ; 2 147 483 648 Long 2 147 483 647 5
Currency (@) Este tip o de datos representa a los n umeros en punto{jo con 15 dgitos a la izquierda del punto decimal y cuatro a la derecha, por lo que son utiles para calculos monetarios. El rango es el siguiente: ; 922 337 203 685 477 : 5808 currency 922 337 203 685 477 : 5807 Single (!) Este tip o de datos representa a los numeros reales con 7 dgitos de precision en los siguientes rangos: ; 3 : 402823 E 38 sing l e ; 1 : 401298 E ; 45 1 : 401298 E ; 45 sing l e 3 : 402823 E 38 Double (#) Este tip o de datos representa a los n umeros reales con 15{16 dgitos de precision en los siguientes rangos: ; 1 : 797693134862315 E 308 doubl e ; 4 : 94066 E ; 324 4 : 94066 E ; 324 doubl e 1 : 797693134862315 E 308 2.1.3 Tip os de cadenas de caracteres String ($) Este tip o de datos representa a las cadenas de caracteres. Cada caracter tiene un valor entre 0 y255 (el habitual codigo ASCI I )yla longitud maxima de una cadena es de 32767 caracteres. Al contrario que en otros lengua jes, las cadenas pueden contener nulos, como se muestra en el siguiente ejemplo: s$ = ``<''+``Hola''+Chr$(0)+``!'' 'Esta cadena incluyeuncaracter nulo. La funci on Len devuelveelnumero de caracteres de la cadena (incluyendo los caracteres no imprimibles). Normalmente una cadena se declara con longitud variable (la memoria requerida para su almacenamiento dep endera de su longitud). Las variables cadena no asignadas tienen por defecto una longitud 0. Tambien se pueden declarar con un tama ~no jo (mas apropiadas para el paso de estructuras con tama ~no jo a rutinas externas). Por ejemplo: Dim s As String s = ``Hola'' 'Esta cadena tiene longitud 4. Dim s As String * 20 s = ``Hola'' 'Esta cadena tiene longitud 20 (el espacio sobrante es rellenado con espacios). 6
Al asignar una expresion (de tip o cadena) a una variable (tambien de tip o cadena) se aplican las siguientes reglas: Se rellena con espacios hasta alcanzar la longitud de la cadena (en caso de que fuera menor). Se trunca a la longitud de la cadena (en caso de que sea mayor). 2.1.4 Tip os de fechas y horas Date Este tip o de datos representa a las fechas y horas de manera conjunta. Su rango es el siguiente: J anuar y 1 100 00 : 00 : 00 date December 31 9999 23:59:59 ; 6574340 date 2958465 : 99998843 En el formato numerico, la parte entera almacena el n umero de das desde el 31{Dic{1899 , y la parte fraccional el n umero de segundos transcurridos del da. El valor p or defecto es 0. Por ejemplo: Dim d As Date d=#January 1, 1990# Para evitar ambig "uedades debidas a los div ersos formatos utilizados en distintos paises se recomienda la utilizacion del formato de fecha universal: VariableFecha = #YY/MM/DD HH:MM:SS# 2.1.5 Tip os variantes Variant Es el tip o p or defecto en BasicScript y se utiliza para declarar variables que puedan contener datos de diferentes tip os. Durante la existencia de un Variant su tip o puede cambiar entre: Numericos I nteg er , Long , S ing l e , Double , B ool ean , C urrency . Logico B ool ean . Temp oral D ate . Cadena String . Ob jecto O bj ect . Dato invalido Un Variant con datos invalidos se considera nulo ( Null ). Dato sin iniciar Un V ar iant sin inicializar se considera vaco ( Empty ). Las siguientes funciones se utilizan para determinar el tip o del dato contenido: 7
VarTyp e Devuelve una constante que representa al tip o. IsNumeric Devuelve True si el tip o es numerico, una cadena que contiene un numero o un ob jecto cuya propiedad p or defecto sea numerica. IsDate Devuelve True si contiene una fecha, una cadena convertible a fecha o un ob jecto cuya propiedad p or defecto sea una fecha. IsOb ject Devuelve True si contiene un ob jeto. IsNull Devuelve True si no contiene un dato valido. IsEmpty Devuelve True si no esta inicializado. Asignacion a una variable de tipo variante Inicialmente se le considera vaco ( V arT ype devolvera ebE mpty ). Si no esta inicializado devolvera 0 en las expresiones numericas o una cadena de longitud cero en una expresion de cadenas. Si se quiere dar un valor nulo a un V ar iant que yaesta inicializado hay que asignarle otro V ar iant que estevaco. Cuando se le asigna un valor tambien se le asigna un tip o y p or lo tanto en to das las op eraciones p osteriores se comp ortara como cualquier variable de ese tip o. Operaciones sobre variables de tipo variante Normalmente, un V ar iant se comp ortara seg un el tip o de datos que contenga. La unica excep cion es la promo cion automatica de los tip os numericos en caso de salidas de rangos. Por ejemplo: Dim a As Integer, b As Integer, c As Integer Dim x As Variant, y As Variant, z As Variant a% = 32767 b% = 1 c% = a% + b% 'Esta op eracion se saldra de rango x = 32767 y=1 z=x+y 'z se convierte a Long p orque la suma esta fuera del rango entero Sumas con variables de tipo variante Seg un el contenido de un V ar iant el op erador \+" puede realizar una de dos funciones: concatenar cadenas o sumar n umeros. Debido a que el tip o no es cono cido hasta el momento de la ejecucion se pueden realizar op eraciones erroneas. Se recomienda utilizar el op erador \&" para concatenar dos V ar iant que contengan cadenas. Variables de tipo variante sin contenido Una variable V ar iant puede tener asignado un valor esp ecial que indica que no contiene dato valido ( Null ). El valor Null se puede utilizar para buscar errores p orque este valor se propaga a tra ves de las expresiones. Por ejemplo: Dim a As Variant a=Null Desventajas de los tipos variantes 1. La evolucion del programa es mas lenta comparada con los tip os fundamentales p orque cada op eracion implica el examen del tip o contenido. 8
MyApp.To olbar.Buttons(0) MyApp.To olbar.Buttons(``Tuesday'') Cada elemento de una coleccion es en s mismo un ob jeto. Por ejemplo: Dim MyTo olbarButton As Ob ject Set MyTo olbarButton = MyApp.To olbar.Buttons(``Save'') MyAppp.To olbar.Buttons(1).Caption = ``Op en'' Una coleccion tiene propiedades para obtener informacion sobre ella y meto dos que p ermiten la navegacion p or sus miembros. Por ejemplo: Dim MyTo olbarButton As Ob ject NumButtons% = MyApp.To olbar.Buttons.Count MyApp.To olbar.Buttons.MoveNext MyApp.To olbar.Buttons.FindNext ``Save'' For i = 1 To MyApp.To olbar.Buttons.Count Set MyTo olbarButton = MyApp.To olbar.Buttons(i) MyTo olbarButton.Caption = ``Copy'' Next i Propiedades de una coleccion Count es la unica propiedad aplicable a las colecciones. Es el n umero de ob jetos contenidos en la coleccion que p ermite la utilizacion de un contador para recorrer la coleccion mediante una iteracion. Meto dos de las colecciones A contin uacion se describ en los meto dos de una coleccion, que p ermiten la lo calizacion y pro cesamiento de elementos en ella. Aunque to das las propiedades y meto dos sean los mismos, act uan sobre tip os diferentes de ob jetos seg un el tip o de ob jeto contenido. Por ejemplo, el meto do C l assC oll ection:GetAt obtiene una ob jeto \clase", y el meto do C ateg or y C oll ection:GetAt obtiene un ob jeto \categora", etc. Estos meto dos son: Exists Indica si un ob jeto existe en una coleccion. FindFirst Obtiene el ndice (p osicion) de la primera instancia de un ob jeto en una coleccion. FindNext Obtiene el ndice (p osicion) de la siguiente instancia de un ob jeto en una coleccion. GetWithUniqueID Obtiene la instancia de un ob jeto en una coleccion, dado su identicador ID unico, excepto para aquellos tip os de ob jetos que no tienen ID unico (como los ob jetos E xter nal D ocument o P r oper ty ). GetAt Obtiene una instancia esp ecca de un ob jeto en una coleccion. GetFirst Obtiene la primera instancia de un ob jeto en una coleccion. GetOb ject Obtiene el interfaz OLE aso ciado con una coleccion dada. IndexOf Obtiene el ndice (p osicion) de un ob jeto en una coleccion dada. 15
Meto dos para las colecciones denidas por el usuario Acontinuacion se describ en cuatro meto dos de colecciones adicionales, que p ermiten a~nadir o quitar ob jetos de una coleccion. Sin embargo, estos meto dos solo son validos para aquellas colecciones denidas p or el usuario y no pueden ser utilizadas en las colecciones corresp ondientes de un mo delo de Rational Rose . Add A~nade un ob jeto a la coleccion de ob jetos. AddCollection A~nade una coleccion a una coleccion de ob jetos. Remove Elimina una coleccion de una coleccion de ob jetos. RemoveAll Elimina el contenido completo de una coleccion. 2.3 Constantes, variables y expresiones 2.3.1 Denicion de constantes Se puede declarar una constante para ser utilizada en el script .En el momento de la declaracion, p o dra asignarse una expresion formada por literales y otras constantes (no se permiten las llamadas a funcion, excepto Chr $). Por ejemplo: Const s$ = ``Hola'' + Chr(44) Const a% = 5 'Constante entera cuyovalor es 5 Const b# = 5 'Constante real doble cuyovalor es 5.0 Const c$ = ``5'' 'Constante cadena cuyovalor es ``5'' Const d! = 5 'Constante real simple cuyovalor es 5.0 Const e& = 5 'Constante entera larga cuyovalor es 5 Const a As Integer = 5 'Constante entera cuyovalor es 5 ConstbAsDouble=5 'Constante real doble cuyovalor es 5.0 Const c As String = ``5'' 'Constante cadena cuyovalor es ``5'' Const d As Single = 5 'Constante real simple cuyovalor es 5.0 Const e As Long = 5 'Constante entera larga cuyovalor es 5 Const a = 5 'Constante entera Const b = 5.5 'Constante real simple Const c = 5.5E200 'Constante real doble Const FichDef = ``Defecto.txt'' Sub Test1 Const FichDef = ``Fichero.txt'' MsgBox FichDef 'Visualiza ``Fic hero.txt''. End Sub Sub Test2 MsgBox FichDef 'Visualiza ``Defecto.txt''. End Sub 16
En el siguiente ejemplo se muestran las constantes declaradas en una ventana de mensa je ( cr l f pro duce un salto de lnea en la ventana): Const crlf = Chr$(13) + Chr$(10) Const s As String = ``Esto es una constante.'' Sub Main() MsgBox s$ & crlf & ``Las constantes se muestran arriba.'' End Sub 2.3.2 Declaracion de variables La sentencia Dim La sentencia Dim declara una lista de variables lo cales con sus corresp ondientes tip os y tama ~nos. Su sintaxis es: Dim Name &( < S ubscr ipts > )] &As &New] Type ] &,Name &( < S ubscr ipts > )] &As &New] Type ]] ::: Una alternativa a Dim es el caracter de declaracion de tipos . Por ejemplo, las siguientes declaraciones son equivalentes: Dim Temp eratura As Integer Dim Temp eratura% El parametro S ubscr ipts p ermite la declaracion de arrays dinamicos y jos (si se expresan los lmites sup eriores e inferiores hasta 60 dimensiones) siguiendo la siguiente sintaxis: & Low er To] U pper &,& Low er To] U pper ]... El parametro Type esp ecica el tip o del dato que se declara y puede ser: String , I nteg er , Long , Single , Double , C urrency , Obj ect ,ob jectos de datos o tip os de datos (del sistema o denidos p or el usuario). Una sentencia Dim dentro de una subrutina o funcion declara variables lo cales a ella. Si aparece fuera, entonces su alcance es global y equivalente al de las variables declaradas con la sentencia P r iv ate . Cadenas de longitud ja Se declaran a ~nadiendo la longitud a la declaracion del tip o S tr ing : Dim nombre variable As String * longitud cadena Declaracion de variables implcitas Cuando BasicScript encuentra una variable no declarada con Dim ,entonces su tip o sera el esp ecicado p or el caracter de declaracion de tip os. Si no lo tiene, entonces la primera letra del nombre de la variable es buscado en las sentencias Def T ype para asignarle un tip o p or defecto. Si a un astodava no se ha encontrado un tip o para la variable, entonces seraun V ar iant . Declaracion de objetos de automatizacion OLE 17
Se pueden declarar variables de un tip o de ob jeto explcito para ob jetos cono cidos por BasicScript a traves de las libreras de tip os. Se sigue la siguiente sintaxis: Dim N ombr eV ar iabl e As Appl ication:C l ass El parametro Appl ication esp ecica la aplicacion utilizada para registrar el ob jeto de automatizacion OLE yelparametro C l ass esp ecica el tip o de ob jeto denido en la librera de tip o. De esta manera se esta utilizando el enlace estatico en tiemp o de compilacion y mejorando el rendimiento de la invo cacion a sus meto dos. Creacion de nuevos objetos La palabra clave op cional New se utiliza para declarar una nueva instancia del ob jeto de datos esp ecicado y no se puede utilizar cuando se declaran arrays u ob jetos de automatizacion OLE . En tiemp o de ejecucion, se noticara a la aplicacion que se esta deniendo un n uevoob jeto: la aplicacion resp ondera mediante la creacion de un nuevo ob jeto fsico (dentro del contexto apropiado) y devolverauna referencia al mismo, que se asignara inmediatamente a la variable que se esta declarando. Cuando se acab e el ambito de la variable entonces se noticara a la aplicacion para que esta destruya ese ob jeto fsico. Convenciones para los nombres de variables Los nombres de variables deb en seguir las siguientes reglas: 1. Deb en comenzar con una letra. 2. Pueden contener letras, dgitos y el caracter de subrayado ( ). Las puntuaciones no se p ermiten. El signo de exclamacion (!) se permite, pero si esta en la ultima p osicion se interpretara como un caracter de declaracion de tip os. 3. El ultimo caracter del nombre puede ser un caracter de declaracion de tip o: #, @, %, !, &y$. 4. No deb en exceder los 80 caracteres de longitud. 5. No pueden contener palabras reservadas. Ejemplos Los siguientes ejemplos utilizan la sentencia Dim para declarar variables tipadas: Sub Main() Dim i As Integer Dim l& 'Entero largo Dim s As Single Dim d# 'Real doble Dim c$ 'Cadena Dim MyArray(10) As Integer 'Arrayde10enteros Dim MyStrings$(2,10) 'Array de bidimensional de cadenas Dim Filenames$(5 to 10) 'Arrayde6cadenas(numeradas de 5 a 10) Dim Values(1 to 10, 100 to 200) 'Arraydevariantes bidimensional End Sub 18
La sentencia Public Declara una lista de variables p ublicas, es decir, variables que son globales para to das las subrutinas y funciones de to dos los scripts . La sintaxis que se sigue es: Public N ame &( S ubscr ipts )] &As Type ]&, Name &( S ubscr ipts )] &As Type ]]... Cuando no se esp ecica otra cosa, cualquier variable se declara implcitamente lo cal a la rutina que la utiliza. La sentencia Gl obal tiene el mismo signicado que Public . Cuando se utilizan variables compartidas, se deb e asegurar que las declaraciones son identicas en to dos los scripts . El siguiente ejemplo utiliza una subrutina para calcular el area de 10 crculos y visualiza el resultado en una ventana. Las variables R y Ar son declaradas como p ublicas para que puedan utilizarse tanto en Main como en Ar ea . Const crlf = Chr$(13) + Chr$(10) Public x#, ar# Sub Area() ar# = (x# ^ 2) * Pi End Sub Sub Main() msg = ``Las areas de los diez crculos son:'' & crlf For x# = 1 To10 Area msg = msg & x# & ``: '' & ar# & Basic.Eoln$ Next x# MsgBo x msg End Sub La sentencia Private Declara una lista de variables privadas, es decir, variables que son globales para to das las subrutinas y funciones que se ejecuten en el script actual. La sintaxis que se sigue es: Private Name &( S ubscr ipts )] &As Type ]&, N ame &( S ubscr ipts )] &As Type ]]... La sentencia Redim Se utiliza para volver a declarar un array, mediante la esp ecicacion de un lmite inferior y otro sup erior para cada dimension del array. La sintaxis de esta sentencia es: Redim &Preserve] VariableName (& S ubscr iptRang e ]) &As Type ], ::: Si la variable ya estaba anteriormente denida, entonces deb e hab erse declarado previamente mediante la sentencia Dim como un array dinamico (sin esp ecicar dimensiones). Estos arrays 19
pueden ser re{dimensionados cualquier n umero de veces. El parametro S ubscr iptRang e esp ecica las nuevas dimensiones, y cuando no se esp ecican, se considera que el array no tendra elementos. Por defecto, el lmite inferior es cero, aunque dep ende de la sentencia O ption B ase . Se sigue la sintaxis: & Low er To] U pper &,& Low er To] U pper ] ::: Las dimensiones del nuevoarray deb en estar en el siguiente rango, generandose un error en caso de que no se cumplan: ; 32768 Low er Upper 32767 El parametro Type puede utilizarse para esp ecicar el tip o de cada elemento del array. Estos estan restringidos a cualquier tip o de datos fundamental, tip os de datos denidos p or el usuario o ob jetos. La redimension del arrayborra to dos los elementos al menos que no se utilice la palabra clave P r eser v e .En este caso, los datos del arraysemantienen si ello es p osible. Si el n umero de elementos se incrementa, los nuevos elementos se inicializan a cero o cadena vaca. Si el nuevo tama ~no es inferior, los elementos sobrantes seran b orrados. Cuando se indica P r eser v e ,elnuevo numero de dimensiones deb era ser cero o el mismo n umero que ya tena. El siguiente ejemplo utiliza la sentencia F il eList para redimensionar un array y rellenarlo con cadenas de nombres de cheros. Un nuevoarray es entonces redimensionado para guardar tantos elementos encontrados p or F il eList , copiando el array y visualizandolo parcialmente: Sub Main() Dim *$() FileList *$,``*.*'' contador = Ub ound(*$) Redim nl$(Lb ound(*$) To Ub ound(*$)) For x = 1 to contador nl$(x) = *(x) Next x MsgBox ``El ultimo elemento del nuev o arrayes: ''&nl$(contador) End Sub 2.3.3 Expresiones Como en cualquier lengua je, Las expresiones estan compuestas p or op eradores y op erandos. BasicScript p ermite utilizar variables, llamadas a funciones, constantes y literales con diferentes tip os de datos en las expresiones. Cuando esto o curre, los dos argumentos se convierten al tip o del op erando con mayor precision. Si una op eracion se realiza entre una expresion numerica y otra textual, entonceslaultima se convierte a una expresion numerica. Cuando una variable de tip o ob jeto es utilizada con op eradores numericos tales como la suma o la resta, se utiliza automaticamente la propiedad por defecto del objeto . En el siguiente ejemplo, las dos op eraciones p osteriores a la declaracion del ob jeto son equivalentes p orque la 20
propiedad p or defecto de un ob jeto de la clase Excel es :V al ue : Dim Excel As Ob ject Set Excel = GetOb ject(,``Excel.Application'') MsgBox ``Esta aplicacion es '' & Excel MsgBox ``Esta aplicacion es '' & Excel.Value Op eradores A continuacion se denen los op eradores existentes en BasicScript .Hay que recordar que seg un los tip os de los op erandos variara el resultado de la op eracion. Concatenacion de cadenas & Division entera n Suma, resta, multiplicacion y division +, ; , , = Potencia ^ Comparaciones < , , > , ,=, <> Conjuncion logica o binaria And Equivalencia logica o binaria Eqv (devuelve True si amb os op erandos tienen el mismo valor logico) Implicaci on logica o binaria Imp (devuelve True si el segundo op erando es True ) Identicacion de clase Is (devuelve True si las dos variables ob jetos que son op erandos hacen referencia al mismo ob jeto. Esta comparacion puede realizarse con Nothing para determinar si la variable ob jeto esta sin inicializar) Comparacion con patrones Lik e Resto de una division Mod Negacion logica o binaria Not Disyuncion logica o binaria Or Exclusion logica o binaria Xor (devuelve True si amb os op erandos tienen distintos valores logicos) Precedencia de op eradores A continuacion se muestra la precedencia entre op eradores en BasicScript (de mayor a menor precedencia). A igual precedencia, se eval uan de izquierda a derecha. Par entesis () Exp onenciacion ^ Menos unario ; 21
Division y multiplicacion = Division entera n Modulo Mod Suma y resta + ; Concatenacion de cadenas & Comparativas = <>><< = > = Comparacion de cadenas y ob jetos Lik e I s Negacion logica Not Conjuncion logica o binaria And Disjuncion logica o binaria Or Op eradores logicos o binarios Xor Eqv Imp Precision de los op erandos BasicScript realiza la conversion de tip os automaticamente, pero algunas veces esto puede o casionar alg un error de rango. Por ejemplo, cuando los valores de punto *otante se convierten aenteros, la parte fraccional se pierde, redondeando al entero m as cercano utilizando el redondeo de Baker: Si la parte fraccional es mayor que : 5, el n umero es redondeado hacia arriba. Si la parte fraccional es menor que : 5, el n umero es redondeado hacia aba jo. Si la parte fraccional es igual a : 5, el numero es redondeado hacia arriba si es impar y hacia aba jo si es par. Cuando se utilizan op eradores numericos, binarios, logicos o comparativos, el tip o de dato del resultado es generalmente el mismo del tip o de datos del op erando mas preciso. Por ejemplo, al sumar un entero y un entero largo, primero se convierte el entero a un entero largo, y despues se realiza la suma, saliendose de rango solo cuando el resultado no puede contenerse en un entero largo. El orden de precision se muestra en la siguiente lista (de menor a mayor precision): E mpty B ool ean Integer Long Single Date Double C ur r ency 22
Hay algunas excep ciones con algunos op eradores. Las reglas para la conversion de op erandos son mas complicadas cuando alg un op erando es de tip o Variant . En muchos casos, un valor fuera de rango causa la promo cion automatica del resultado al siguiente tip o de datos mas preciso. Literales Los literales son valores con un tip o esp ecco implcito que se pueden utilizar en las expresiones. Algunos ejemplos de literales son: 10 43265 5# 5 : 5 5 : 4 E 100 & HF F & O 47 & HF F # \Hola" \\Hola"" #1 = 1 = 1994# 2.4 Funciones y subrutinas 2.4.1 Declaracion de prototip os de subrutinas La sentencia D ecl ar e crea el prototip o de una rutina externa o una rutina de BasicScript que se denira p osteriormente en el modulo fuente oen otro modulo. La sentencia D ecl ar e deb e aparecer en el exterior de cualquier declaracion Sub o F unction y el prototip o declarado solo seravalido en aquel script donde aparezca. Sigue la siguiente sintaxis: Declare f Sub j Function g N ame & T y peC har ] &CDecl j Pascal j System j StdCall] &Lib ``LibName$'' &Alias ``AliasName$'']] &(& P ar ameter List ])] &As Type ] P ar ameter List es la lista de parametros (hasta 30) de la rutina y cada uno de ellos tiene la siguiente sintaxis: &Optional] &ByVal j ByRef ] P arameterN ame &()] &As P arameterT ype ] Los parametros que se utilizan son los siguientes: Name Typ eChar] Nombre de la rutina. En las funciones, es op cional indicar el tip o de valor a devolver colo cando un caracter de declaracion de tip os (cualquiera de ellos excepto @ para el caso de funciones externas). 23
LibName$ Deb e ser esp ecicada si la rutina es externa para indicar el nombre de la librera o codigo fuente que la contiene y apareceraentre comillas. Pueden utilizarse alias en caso de con*ictos ( AliasName$ deb e aparecer entre comillas). Por ejemplo: { Declare Function GetCurrentTime Lib \user" () As Integer { Declare Function GetTime Lib \user" Alias \GetCurrentTime" As Integer Typ e Indica el tip o a devolver. Para las funciones externas, los tip os validos son: I nteg er , Long , S tr ing , S ing l e , D oubl e , Date , B ool ean y ob jetos de datos. Por otro lado, los tip os C ur r ency y Variant , las cadenas de longitud variable, los arrays, los tip os denidos p or el usuario y los ob jetos de automatizacion OLE no pueden ser devueltos p or las funciones externas. Optional Para indicar la op cionalidad de un parametro. To dos los parametros op cionales deb en ser de tip o V ar iant , y se declaran al nal de la lista de parametros. ByVal Se pasara el parametro p or valor, p or lo que no p o dra ser mo dicados p or la rutina. ByRef Se pasara el parametro por referencia, por lo que p o dra cambiarse. Por defecto, to dos los parametros se pasan p or referencia. ParameterName Nombre del parametro, que deb e seguir las convenciones de nombres de BasicScript. \() 00 indica que el parametro es un array. ParameterTyp e Esp ecica el tip o del parametro. La clausula As deb er ser incluida solo si el nombre del parametro no contiene un caracter de declaracion de tip o. Ademas de los tip os basicos, pueden esp ecicarse estructuras denidas p or el usuario, ob jetos de datos y ob jetos de automatizacion OLE . Para pasar parametros a rutinas externas, si el tip o de dato no es cono cido, se puede utilizar Any , forzando al compilador a rela jar el chequeo de tip o, p ermitiendo que cualquier tip o de datos pueda ser pasado en el lugar de dicho argumento. Por ejemplo: { Declare Sub Convertir Lib \MiLibreria" (a As Any) Paso de parametros Por defecto, el paso de parametros en BasicScript es por referencia. Muchas rutinas externas requieren un valor en lugar de una referencia y para ello esta ByV al . Por ejemplo, el pro cedimiento en C v oid M essag eB eep ( int ) deb era declararse as: Declare Sub MessageBeep Lib ``user'' (ByVal n As Integer) El siguiente pro cedimiento en C int S y stemP ar ameter sI nf o ( int int int int ) es un ejemplo de paso de parametros p or referencia y se escribira as: Declare Function SystemParametersInfo Lib ``user'' (ByVal action As Integer, ByVal uParam As Integer, ByRef pInfo As Integer, ByVal up dateINI As Integer) As Integer Paso de cadenas Las cadenas pueden pasarse p or referencia oporvalor. Cuando se pasan p or referencia, lo que se pasa es un puntero a un puntero a una cadena al estilo C (terminada con nul l ) y la rutina externa puede cambiar el puntero o mo dicar el contenido de la cadena. Cuando se pasa por 24
Salida forzada de subrutinas La sentencia E xit S ub fuerza la salida de la subrutina actual, continuando la ejecucion por la sentencia que sigue a la llamada de la subrutina. Solo puede aparecer dentro del blo que de una subrutina. En el siguiente ejemplo la subrutina visualiza una ventana de dialogo y entonces naliza. La ultima lnea no deb era ser nunca ejecutada a causa de la sentencia Exit Sub . Sub Main() MsgBox ``Terminando M ain ().'' Exit Sub MsgBox ``Sigue to dava el Main ().'' End Sub 2.4.4 Algunos asp ectos del paso de parametros Dato fundamental a Variant Al pasar el dato p or referencia se previene que el V ar iant cambie su tip o dentro de la rutina. Por ejemplo: Sub Foo(v As Variant) v=50 'OK. v = ``Hola, mundo'' 'Aqu se pro duce un error de tip o. End Sub Sub Main() Dim i As Integer Foo i 'Pasa un entero p or referencia. End Sub Variant a dato fundamental Un Variant no puede pasarse a una rutina que acepte datos fundamentales p or referencia. Por ejemplo: Sub Foo(i as Integer) End Sub Sub Main() Dim a As Variant Foo a 'Aqu el compilador da un error de tip o. End Sub Paso de estructuras Las UDT's pueden pasarse tanto a rutinas denidas por el usuario como a rutinas externas. Siempre se pasan p or referencia: la palabra clave ByV al no puede utilizarse cuando se denen argumentos de tip o estructura que se pasan a rutinas externas (mediante D ecl ar e ). ByV al solo 31
se p o dra utilizar con tip os de datos fundamentales. En realidad, cuando se pasa una estructura a una rutina externa solo se pasa un puntero lejano a la estructura de datos. Paso de arrays Los arrays siempre se pasan p or referencia. Por ejemplo: Dim a(10) As String FileList a 'Ambas llamadas estan bien. FileList a() Parametros nominales Muchos elementos del lengua je sop ortan los parametros nominales, que p ermiten la esp ecicacion de parametros en una funcion o subrutina mediante su nombre, en lugar del tradicional orden predeterminado. Algunos ejemplos de una llamada a MsgBox : Nominal : { MsgBox Prompt:= \Hola mundo." { MsgBox Title:=\Ttulo", Prompt:=\Hola mundo" { MsgBox HelpFile:=\BASIC.HLP",Prompt:=\Hola mundo", HelpContext:=10 Posicional : { MsgBox \Hola mundo" { MsgBox \Hola mundo",,\Ttulo" { MsgBox \Hola mundo",,,\BASIC.HLP",10 De esta forma, el codigo es mas facil de leer y ademas se evita tener que cono cer el orden de los parametros, sobre to do si los parametros son muchos y/o op cionales. Se deb en seguir las siguientes reglas: Los parametros nominales deb en utilizar el nombre del parametro esp ecicado en la descripcion de ese elemento del lengua je, de lo contrario habra un error de compilacion. To dos los parametros (tanto nominales como op cionales) se separan p or comas. El parametro nominal y su valor aso ciado se separan con \:=". Si un parametro es nominal, to dos los parametros que le siguen tambien deb en serlo. Por ejemplo: MsgBox ``Hola mundo'', Title:=``Ttulo'' 'OK MsgBox Prompt:=``Hola mundo'',,``Ttulo'' 'MAL 32
2.5 Sentencias selectivas 2.5.1 La sentencia If...Then...Else Permite al ejecucion condicionada de una sentencia o grup o de sentencias. La sintaxis es: If C ondition Then S tatements &Else E l seS tatements ] Una segunda sintaxis a ~nade la clasula ElseIf : If C ondition Then & S tatements ] &ElseIf E l seC ondition Then & E l seI f S tatements ]] &Else & E l seS tatements ]] End If Los parametros son: Condition Cualquier expresion que resuelvaunvalor logico. Statements Una o mas sentencias separadas p or \+". Este grup o se ejecuta cuando la condicion es True . ElseStatements Una o mas sentencias separadas p or \+". Este grup o se ejecuta cuando to das las condiciones anteriores son False . ElseCondition Cualquier expresion que resuelvaunvalor logico. Se eval ua si to das las condiciones previas son False . Pueden aparecer cualquier n umero de clasulas ElseIf . ElseIfStatements Una o mas sen tencias separadas p or \+". Este grup o se ejecuta cuando su condicion es True . 2.5.2 La sentencia Select Case Es la sentencia de seleccion m ultiple, seg un el valor de una determinada expresion. Su sintaxis es la siguiente: Select Case T estE xpr ession &Case E xpr essionList & S tatementB l ock ]] &Case E xpr essionList & S tatementB l ock ]] &Case Else & S tatementB l ock ]] End Select Esta sentencia tiene las siguientes partes: 33
TestExpression Una expresion numerica o de cadena. StatementBlo ck Un grup o de sentencias de BasicScript . Si T estE xpr ession se iguala con alguna de las expresiones contenidas en E xpr essionList ,entonces se ejecutara el blo que de sentencias. ExpressionList Una lista de expresiones (separadas por comas) que seran comparadas con T estE xpr ession . Se pueden utilizar rangos de expresiones m ultiples dentro de una clasula Case simple. Por ejemplo: Case 1 To 10,12,15, Is > 40 Solo se ejecutara el blo que que iguale primero la expresion. Si no se encuentra ninguno, entonces se ejecutara el blo que Case Else . El siguiente ejemplo utiliza la sentencia S el ect C ase para visualizar el sistema op erativo actual: Sub Main() OpSystem% = Basic.OS Select Case OpSystem% Case 0,2 s = ``Microsoft Windows'' Case3to8,12 s = ``UNIX'' Case 10 s = ``IBM OS/2'' Case Else s = ``Otro sistema'' End Select MsgBox ``Esta version de BasicScript esta ejecutandose sobre: '' & s End Sub 2.5.3 Funciones selectivas A continuacion se muestran tres funciones de muy alto nivel que p ermiten escribir sentencias selectivas en una sola lnea de codigo: Cho ose Recib e un ndice y hasta 13 expresiones como parametros y devuelve la expresion que se encuentra en la p osicion indicada. IIf Recib e una expresion logica y otras dos expresiones (partes cierta y falsa) y devolvera una u otra seg un la evaluacion de la expresion logica. Switch Recib e hasta siete pares condicion{expresion y devuelve la expresion que corresp onde a la primer condicion que sea True . 34
2.6 Sentencias iterativas 2.6.1 El bucle Do...Loop Se pueden utilizar hasta tres tip os de bucles: Do f While j Until g C ondition S tatements Lo op Do S tatements Lo op f While j Until g C ondition Do S tatements Lo op Como en cualquier otro lengua je, el blo que se repite mientras la condicion sea verdadera o hasta que la condicion sea verdadera. El bucle es innito cuando no se esp ecica la clausula de condicion. La condicion siempre sera cualquier expresion logica. Acontinuacion se muestran varios ejemplos. El primero de ellos utiliza la sentencia Do::: while que ejecuta el cuerp o de la iteracion primero y entonces chequea la condicion, repitiendolo si la condicion es cierta: Dim a$(100) i% = -1 Do i% = i% + 1 If i% = 0 Then a(i%) = Dir$(``*'') Else a(i%) = Dir$ End If Lo op While (a(i%) <> ``'' And i% < =99) r% = SelectBox(i% & `` cheros encontrados'',,a) El segundo ejemplo utiliza la sentencia D o W hile : : : Loop , que chequea primero la condici on y ejecuta el cuerp o de la iteracion si es cierta, volviendo de nuevoalpunto de chequeo: Dim a$(100) i% = 0 a(i%) = Dir$(``*'') Do While (a(i%) <> ``'' And i% < =99) i% = i% + 1 a(i%) = Dir$ Lo op r% = SelectBox(i% & `` cheros encontrados'',,a) El tercer ejemplo utiliza la sentencia D o U ntil : : : Loop , que ejecuta la iteracion hasta que la condicion sea cierta, evaluando primero la condicion: 35
Dim a$(100) i% = 0 a(i%) = Dir$(``*'') Do Until a(i%) = ``'' Or i% = 100 i% = i% + 1 a(i%) = Dir$ Lo op r% = SelectBox(i% & `` cheros encontrados'',,a) El cuarto ejemplo utiliza la sentencia D o : : : Loop U ntil , que ejecuta la iteracion hasta que la condicion sea cierta, evaluandola tras la ejecucion del cuerp o: Dim a$(100) i% = -1 Do i% = i% + 1 If i% = 0 Then a(i%) = Dir$(``*'') Else a(i%) = Dir$ End If Lo op Until (a(i%) = ``'' Or i% = 100) r% = SelectBox(i% & `` cheros encontrados'',,a) Salida forzada de los bucles ( Do...Loop ) La sentencia E xit D o lleva la lnea de ejecucion a la sentencia que sigue a la clausula Loop . Solo podra aparecer dentro de una sentencia D o : : : Loop . El siguiente ejemplo carga un arra y con las entradas de directorios al menos que hayamas de 10 entradas (en este caso la sentencia Do::: Loop termina la iteracion): Sub Main() Dim a$(5) Do i% = i% + 1 If i% = 1 Then a(i%) = Dir$(``*'') Else a(i%) = Dir$ End If If i% > = 10 Then Exit Do Lo op While (a(i%) <> ``'') If i% = 10 Then MsgBox ``<'' & i% & `` entrada pro cesadas!'' Else MsgBox ``<Menos de '' & i% & `` entradas pro cesadas!'' End If End Sub 36
2.6.2 El bucle While...Wend Es una sentencia iterativa que repite la ejecucion de una sentencia o grup o de ellas mientras una condicion de entrada sea verdadera. La condicion se chequea al inicio de cada iteracion. La sintaxis es: While C ondition & S tatements ] Wend El siguiente ejemplo ejecuta el bucle hasta que el generador de n umeros aleatorios devuelve el valor 1 (p ero un maximode1000 veces, momento en el que se fuerza la salida): Sub Main() x% = 0 count%=0 While x% <> 1 x% = Rnd(1) If count% > 1000 Then Exit Sub Else count% = count% + 1 End If Wend MsgBox ``El bucle se ejecuto''&count% & `` veces.'' End Sub 2.6.3 El bucle For Each La sentencia F or E ach repite un blo que de sentencias para cada elemento de una coleccion o array. Su sintaxis es: For Each M ember In Gr oup & S tatements ] &Exit For] & S tatements ] Next & M ember ] Esta sentencia tiene los siguientes parametros: Member Nombre de una variable para guardar un elemento en cada iteracion del bucle. Group Nombre de la coleccion o array. Statements El blo que de sentencias. La variable de la iteracion es una copia del elemento de la coleccion o array, por lo que los cambios sobre estas variables no afectan a los elementos originales. Los elementos se recorren en el mismo orden en que estan almacenados en memoria. La ejecucion contin ua hasta que no haya mas elementos. Pueden anidarse los bucles F or E ach con otros bucles, por lo que N ext 37
afectaraalmas interno ( F or E ach o F or N ext ) en ese momento. El nombre de la variable para los miembros deb e ser unico. El siguiente ejemplo muestra una subrutina que itera a traves de los elementos de un array utilizando la sentencias For ::: Each : Sub Main() Dim a(3 To 10) As Single Dim i As Variant Dim s As String For i = 3 To10 a(i) = Rnd() Next i For Each i In a i=i+1 Next i s = ``'' For Each i In a If s <> ``'' Thens=s&``,'' s=s&i Next i MsgBoxs End Sub En el siguiente ejemplo la subrutina visualiza los nombres de cada ho ja de un libro de Excel : Sub Main() Dim Excel As Ob ject Dim Sheets As Ob ject Set Excel = CreateOb ject(``Excel.Application'') Excel.Visible = 1 Excel.Workb o oks.Add Set Sheets = Excel.Worksheets For Each a In Sheets MsgBox a.Name Next a End Sub 2.6.4 El bucle For ... Next La sentencia For : : : Next repite un blo que de sentencias un numero esp ecicado de veces. Su sintaxis es la siguiente: 38
For Counter = S tar t To End &Step I ncr ement ] & S tatements ] &Exit For] & S tatements ] Next & Counter &, N extC ounter ] ::: ] Esta sentencia toma los siguientes parametros: Counter Nombre de una variable numerica (los tip os p osibles son: Integer , Long , S ing l e , Double o Variant ). Start Valor inicial del contador. End Valor nal del contador. Increment Cantidad que se a ~nade al contador en cada vuelta del bucle. Sera p ositivo o negativo seg un los valores iniciales y nales. Por defecto, el incremento es +1. No se puede cambiar su valor durante la ejecucion del bucle. Statements El cuerp o de sentencias del bucle. La sentencia continua su ejecucion hasta que llega a una sentencia E xit F or o cuando el contador es mayor que el valor nal (o menor si el bucle tiene recorrido inverso). Estos bucles pueden aparecer anidados. La sentencia Next se aplica al bucle For : : : Next mas interno. La clausula Next puede optimizarse agrupando varios contadores. Por ejemplo, los siguientes bucles son equivalentes: For i = 1 To10 For i = 1 To10 Forj=1 To10 For j=1To10 Next j Next j,i Next i El siguiente ejemplo construye la tabla de verdad para la op eracion logica O utilizando varios bucles F or : : : N ext anidados: Sub Main() For x = -1 To0 For y = -1 To0 Z=xOry msg = msg & Format(Abs(x%),``0'') &`` Or'' msg = msg & Format(Abs(y%),``0'') &`` ='' msg = msg & Format(Z,``True/False'') & Basic.Eoln$ Next y Next x MsgBox msg End Sub Salida forzada de los bucles ( For...Next ) La sentencia Exit F or fuerza la salida del bucle mas interno For , continuando la lnea de ejecucion tras la sentencia N ext .Solo puede aparecer en los blo ques For : : : Next . El siguiente ejemplo rellena un array con entradas de directorios hasta que se encuentra una entrada nula o se hayan pro cesado 100 entradas, momento en el que el bucle termina por 39
una sentencia E xit F or .La ventana de dialogo visualiza un contador de cheros encontrados y algunas entradas del array: Const crlf = Chr(13) + Chr (10) Sub Main() Dim a$(100) For i = 1 To 100 Ifi=1Then a$(i) = Dir$(``*'') Else a$(i) = Dir$ End If If (a$(i) = ``'') Or (i > = 100) Then Exit For Next i msg = ``Hay '' & i & `` cheros encontrados.'' & crlf MsgBox msg & a$(1) & crlf & a$(2) & crlf & a$(3) & crlf & a$(10) End Sub 40
DefaultProp erties Las propiedades p or defecto del mo delo. DeploymentDiagram El diagrama de despliegue aso ciado al mo delo. Ro otCategory La categora Top Level de Rational Rose .Se corresp onde a la vista logica del mo delo. Solo lectura. Ro otSubsystem El subsistema Top Level de Rational Rose . Se corresp onde a la vista de comp onentes del mo delo. Solo lectura. Ro otUseCaseCategory La categora raz a la que p ertenecen los casos de usos. Se corresp onde a la vista de casos de uso del mo delo. Solo lectura. UseCases Los casos de usos que p ertenecen al mo delo. Ylosmeto dos esp eccos de la clase Model son: FindCategories Encontrar una coleccion de categoras del mo delo. FindCategoryWithID Encontrar una categora esp ecca del mo delo. FindClassWithID Encontrar una clase esp ec ca del mo delo. FindClassses Encontrar una coleccion de clases del mo delo. FindItemWithID Encontrar un tem esp ecco del mo delo. FindItems Encontrar una coleccion de temes del mo delo. GetAllClasses Obtener to das las clases de to das las categoras del mo delo. GetAllCategories Obtener to das las categoras del mo delo. GetAllSubsystems Obtener to dos los subsistemas del mo delo. GetAllMo dules Obtener to dos los modulos del mo delo. GetAllPro cessors Obtener to dos los pro cesadores del mo delo. GetAllDevices Obtener to dos los disp ositivos del mo delo. GetAllUseCases Obtener to dos los casos de uso del mo delo. GetActiveDiagram Obtener el diagrama actualmente activo del mo delo. GetSelectedClasses Obtener to das las clases actualmente seleccionadas en el mo delo. GetSelectedCategories Obtener to das las categoras actualmente seleccionadas en el mo delo. GetSelectedMo dules Obtener to dos los modulos actualmente seleccionados en el mo delo. GetSelectedSubsystems Obtener to dos los subsistemas actualmente seleccionados en el modelo. GetSelectedUsesCases Obtener to dos los casos de uso actualmente seleccionados en el modelo. AddPro cessor A~nadir un pro cesador al mo delo. DeletePro cessor Eliminar un pro cesador del mo delo. 47
AddDevice A~nadir un disp ositivo al mo delo. DeleteDevice Eliminar un disp ositivo del mo delo. La clase DefaultModelProperties es un contenedor para las propiedades p or defecto que p ertenecen al mo delo. Solo hayunobjeto D ef aul tM odel P r oper ties por modelo. Los meto dos esp eccos de esta clase son: AddDefaultProp erty A~nadir una propiedad p or defecto a un conjunto de propiedades. CloneDefaultProp ertySet Duplicar un conjunto de propiedades por defecto para utilizarlo como base para crear un nuevoconjunto de propiedades. CreateDefaultProp ertySet Crear un nuevoconjunto de propiedades p or defecto (en blanco). DeleteDefaultProp erty Eliminar una propiedad p or defecto del conjunto de propiedades p or defecto. DeleteDefaultProp ertySet Eliminar una propiedad p or defecto de un mo delo. FindDefaultProp erty Encontrar una propiedad por defecto esp ecicada dados un mo delo, unaclaseyelnombre de una herramienta. GetDefaultProp ertySet Obtener el conjunto de propiedades por defecto para una herramienta y clase dadas. GetDefaultSetNames Obtener los nombres de los conjuntos de propiedades p or defecto para una herramien ta y clase dadas. GetTo olNamesForClass Obtener los nombres de las herramientas aso ciadas a una clase dada. IsTo olVisible Determinar si la pagina con las propiedades por defecto del mo delo de una herramienta dada esta visible en las esp ecicaciones. SetTo olVisibility Establecer la visibilidad de una herramienta, es decir, si la pagina de propiedades para esa herramienta aparecera en las esp ecicaciones. Todas las relaciones ( C l assR el ation , I nher its , Has y Real iz es ) heredan de la clase Relation : sus propiedades y meto dos p ermiten esp ecicar y obtener la informacion de to das las partes involucradas en cada relacion del mo delo. Vease la subseccion sobre el diagrama de herencias de Rel ation . La clase ExternalDocument ofrece las propiedades y meto dos que p ermiten crear do cumentos externos o informes desde el entorno de Rational Rose . Por ejemplo, se puede ejecutar Word en Windows para pasar la informacion de un mo delo a un do cumento de Word . Las propiedades esp eccas de E xter nal D ocument son: ParentCategory La aplicacion a utilizar para abrir el do cumento. Path El camino completo al do cumento. URL La URL del do cumento en Internet. Las propiedades P ath y URL son excluyentes entre s. Ylosmeto dos esp eccos de E xter nal D ocument son: IsURL Chequear si el do cumento tiene una URL . Op en Abrir un do cumento externo. 48
DeploymentDiagram Element ModuleDiagram Diagram ScenarioDiagram StateDiagram ClassDiagram Figura 3.3: Diagrama de herencia de la clase Diagram . 3.2.3 Diagrama de herencia de la clase Diagram El diagrama de clases de la gura 3.3 muestra la estructura de herencia de la clase D iag r am en el mo delo REI . Ya se ha comentado que cada ob jeto en un mo delo es un elemento, as que la clase Diagram esta directamente sub ordinada a E l ement . La clase Diagram ofrece un conjunto de propiedades y meto dos que to das las demas clases de diagramas (p or ejemplo, diagrama de clases, diagrama de escenarios, diagrama de comp onentes, etc.) heredan. Cualquier diagrama se comp one de varios elementos ( items ) y vistas de esos elementos ( I temV iew s ). Cada I temv iew es la representacion fsica de un elemento de Rational Rose y es un ob jeto con las propiedades ymeto dos que denen su apariencia en la ventana del diagrama (p osicion, color, tama ~no, etc.). La op eratividad basica de la clase Diagram se resume en los siguientes puntos: La propiedad D iag r am:I temV iew s es utilizada para iterar a traves de la coleccion de vistas de elementos que p ertenecen al diagrama. La propiedad D iag r am:I tems es utilizada para iterar a traves de los elementos que existen en el diagrama. El meto do D iag r am:GetV iew F r om es utilizado para encontrar la primera vista de un elemento. Para encontrar cuales son las vistas de los elementos actualmente seleccionados en el diagrama, se recorre la lista de vistas de elementos del diagrama. Para cada una de ellas, se utiliza el meto do I temV iew :I sS el ected para determinar si esta o no seleccionado en el diagrama. Se puede obtener entonces la vista de elemento seleccionada o realizar cualquier otro pro ceso basandose en esta informacion. Una manera rapida para obtener to dos los elementos seleccionados en un diagrama es utilizar el meto do D iag r am:GetS el ectedI tems . En lugar de iterar a traves del diagrama y chequear cada vista, este meto do simplemente devuelve to do aquello que este seleccionado. Otras propiedades esp eccas de Diagram son: Do cumentation La do cumentacion anexa al diagrama. Visible La visibilidad del diagrama. Otros meto dos esp eccos de Diagram son: 49
Exists Comprobar si un determinado ob jeto del diagrama existe. Layout Dibujar un diagrama. Invalidate Redibujar un diagrama. Up date Mo dicar un diagrama. AddNoteView A~nadir una nota a un diagrama. RemoveNoteView Borrar una nota del diagrama. GetNoteViews Obtener las notas p ertenecientes al diagrama. Render Salvar el graco del diagrama en un chero con el formato Windows Metale . RenderEnhanced La misma accion que Render ,peroconmayor calidad. RenderToClipb oard La misma accion que Render , p ero guarda el graco en el p ortapap eles. RenderEnhancedToClipBoard La misma accion que Render T oC lipboar d , p ero con mayor calidad. IsActive Indicar si el diagrama esta actualmente activo en la aplicacion. Activate Activar el diagrama. La clase ClassDiagram p ermite a ~nadir, obtener y b orrar clases y categoras del diagrama de clases. Las propiedades esp eccas de C l assD iag r am son: ParentCategory La categora que contiene al diagrama de clases. Ylosmeto dos esp eccos de C l assD iag r am son: AddAsso ciation A~nadir una aso ciaci on al diagrama. AddCategory A~nadir una categora al diagrama. AddClass A~nadir una clase al diagrama. AddUseCase A~nadir un caso de uso al diagrama. GetAsso ciations Obtener la coleccion de las aso ciaciones que p ertenecen al diagrama de clases. GetCategories Obtener la coleccion de las categoras que p ertenecen al diagrama de clases. GetClasses Obtener la coleccion de las clases que p ertenecen al diagrama de clases. GetClassView Obtener una vista de clase de un diagrama de clases. GetSelectedCategories Obtener las categoras actualmente seleccionadas en el diagrama de clases. GetSelectedClasses Obtener las clases actualmente seleccionadas en el diagrama de clases. GetUseCases Obtener los casos de uso p ertenecientes al diagrama. IsUseCaseDiagram Determinar si el diagrama de clases es un diagrama de casos de uso. RemoveAsso ciation Eliminar una aso ciacion del diagrama de clases. 50
RemoveCategory Eliminar una categora del diagrama de clases. RemoveClass Eliminar una clase del diagrama de clases. RemoveUseCase Eliminar un caso de uso del diagrama. Un escenario es una instancia de un caso de uso y muestra los eventos que o curren durante la ejecucion del sistema. La clase ScenarioDiagram p ermite crear una representacion visual de un escenario. Las propiedades esp eccas de S cenar ioD iag r am son: InstanceViews La coleccion de vistas de instancias p ertenecientes al diagrama. Ylosmeto dos esp eccos de S cenar ioD iag r am son: AddInstance A~nadir una instancia al diagrama de escenario. AddInstanceView A~nadir una vista de instancia al diagrama de escenario. CreateMessage Crear un mensa je y a ~nadirlo al diagrama de escenario. DeleteInstance Eliminar una instancia del diagrama de escenario. GetDiagramTyp e Obtener el valor del tip o de diagrama. GetMessages Obtener la coleccion de mensa jes que p ertenecen al diagrama de escenario. GetSelectedLinks Obtener los enlaces actualmente seleccionados en el diagrama de escanario. GetSelectedMessages Obtener el conjunto de mensa jes actualmente seleccionados en el diagrama de escenario. GetSelectedOb jects Obtener el conjunto de ob jetos actualmente seleccionados en el diagrama de escanario. RemoveInstanceView Eliminar una vista de instancia del diagrama de escenario. La clase StateDiagram dene las propiedades y meto dos que p ermiten la manipulacion de ob jetos en la vista de estados (contiene los diagramas de estado) de un mo delo. Las propiedades esp ec cas de la clase S tateD iag r am son: Parent La maquina de estados que contiene el diagrama de estados. Ylosmeto dos esp eccos de S tateD iag r am son: AddStateView A~nadir una vista de estados a un diagrama de estados. GetSelectedStates Obtener los estados actualmente seleccionados en un diagrama de estados. GetSelectedStateViews Obtener las vistas de estados actualmente seleccionadas en un diagrama de estados. GetSelectedTransitions Obtener las transiciones actualmente seleccionadas en un diagrama de estados. GetStateView Obtener el estado de una vista de estados en un diagrama de estados. GetStateViews Obtener to das las vistas de estados en un diagrama de estados. 51
RemoveStateView Eliminar una vista de estados de un diagrama de estados. Un ModuleDiagram map ea la colo cacion de las clases y ob jetos en modulos. Las propiedades esp eccas de M odul eD iag r am son: ParentSubsystem El subsistema que contiene el modulo. Siempre hace referencia a un ob jeto S ubsy stem valido. Ylosmeto dos esp eccos de M odul eD iag r am son: AddMo dule A~nadirunmodulo al diagrama de modulos. AddSubsystem A~nadir un subsistema al diagrama de modulos. GetMo dules Obtener la coleccion que contiene to dos los modulos p ertenecientes al diagrama de modulos. GetSelectedMo dules Obtener los modulos actualmente seleccionados en el diagrama de modulos. GetSelectedSubsystems Obtener los susbsistemas actualmente seleccionados en el diagrama de modulos. GetSubsystems Obtener la coleccion que contiene to dos los subsistemas que p ertenecen al diagrama de modulo. Un diagrama de despliegue es la representacion visual de los disp ositivos ypro cesadores fsicos. La clase DeploymentDiagram ofrece las siguientes meto dos esp eccos: AddDevice A~nadir un disp ositivo al diagrama de despliegue. AddPro cessor A~nadir un pro cesador al diagrama de despliegue. GetDevices Obtener los disp ositivos que p ertenecen al diagrama de despliegue. GetPro cessors Obtener los pro cesadores que p ertenecen al diagrama de despliegue. RemoveDevice Eliminar un disp ositivo del diagrama de despliegue. RemovePro cessor Eliminar un pro cesador del diagrama de despliegue. 3.2.4 Diagrama de herencia de la clase Logical El diagrama de clases de la gura 3.4 muestra la estructura de herencia de las dos principales clases logicas del mo delo REI : C ateg or y y C l ass . Ambas heredan de las clases Package y RoseI tem resp ectivamente, que p ertenecen al diagrama de herencia de la clase M odel . La clase Category p ermite denir y manipular colecciones logicas de clases. Las propiedades esp ecicas de la clase C ategory son: Asso ciations La coleccion de to das las aso ciaciones que p ertenecen a la categora. Categories La coleccion de las categoras que son hijas de las categora. ClassDiagrams La coleccion de los diagramas de clase que p ertenecen a la categora. 52
RoseItem Class Package Category Figura 3.4: Diagrama de herencia de la clase Logical . Classes La coleccion de las clases que p ertenecen a la categora. Global Identica la categora como global. ParentCategory La categora que contiene a la categora. ScenarioDiagrams La coleccion de los diagramas de escenario que p ertenecen a la categora. UseCases La coleccion que contiene los casos de uso que p ertenecen a la categora. Ylosmeto dos esp eccos de la clase C ateg or y son: AddCategory A~nadir una categora a una categora. AddCategoryDep endency A~nadir una dep endencia de categora a una categora. AddClass A~nadir una clase a una categora. AddClassDiagram A~nadir un diagrama de clase a una categora. AddScenarioDiagram A~nadir un diagrama de escenario a una categora. AddUseCase A~nadir un caso de uso a una categora. DeleteCategory Eliminar una categora de una categora. DeleteCategoryDep endency Eliminar una dep endencia de categora de una categora. DeleteClass Eliminar una clase de una categora. DeleteClassDiagram Eliminar un diagrama de clase de una categor a. DeleteScenarioDiagram Eliminar un diagrama de escenario de una categora. DeleteUseCase Eliminar un caso de uso de una categora. GetAllCategories Obtener to das las categoras que p ertenecen a una categora y to das las categoras p ertenecientes a sus hijas. GetAllClasses Obtener to das las clases que p ertenecen a la categora y to das sus hijas. GetAllUseCases Obtener la coleccion que contiene los casos de uso que p ertenecen a la categora. 53
GetAssignedSubsystem Obtener el subsistema asignado a la categora. GetCategoryDep endencies Obtener la coleccion de dep endencias de categora que p ertenecen a la categora. HasAssignedSubsystem Obtener el subsistema asignado a la categora. Relo cateCategory Recolo car una categora dentro de una categora. Relo cateClass Recolo car una clase dentro de una categora. Relo cateClassDiagram Recolo car un diagrama de clase dentro de una categora. Relo cateScenarioDiagram Recolo car un diagrama de escenario dentro de una categora. SetAssignedSubsystem Asignar un subsistema a la categora. TopLevel Indicar si la categora es la categora raz. La clase Class permite establecer y obtener las caractersticas y relaciones de las clases esp eccas de un mo delo: si es una clase abstracta, si es un tip o fundamental, si es p ersistente, si puede ser concurrente con otras clases, su conjunto de atributos y op eraciones, sus relaciones con otros ob jetos del mo delo, etc. Las propiedades esp eccas de la clase C l ass son: ParentCategory La categora que contiene la clase. Abstract Identica la clase como abstracta. Attributes La coleccion que contiene los atributos de la clase. Op erations La coleccion que contiene las op eraciones de la clase. Exp ortControl La visibilidad de la clase. Cardinality La cardinalidad de la clase. ClassKind El tip o de la clase. Concurrency El tip o de concurrencia de la clase con otros ob jetos. Persistence Identica la clase como p ersistente. Space El algoritmo de espacios a utilizar para la clase. FundamentalTyp e Identica la clase como un tip o fundamental. StateMachine La maquina de estado que p ertenece a la clase. ParentClass La clase padre de esta clase. Ylosmeto dos esp eccos de la clase Class son: AddAssignedMo dule Asignar un modulo (comp onente) a la clase. AddAsso ciation A~nadir una aso ciacion ( Association ) a una clase. AddAttribute A~nadir un atributo a una clase. AddClassDep endency A~nadir una dep endencia de clase a la clase. 54
AddHas A~nadir una agregacion ( H asR el ationship ) a una clase. AddInheritRel A~nadir una relacion de herencia ( I nher itRel ationship ) entre clases en una clase. AddNestedClass A~nadir una clase anidada a una clase. AddOp eration A~nadir una op eracion a una clase. AddRealizeRel A~nadir una relacion de realizacion a una clase. CreateStateMachine Crear una maquina de estado para una clase. DeleteAsso ciation Eliminar una aso ciacion de una clase. DeleteAttribute Eliminar un atributo de una clase. DeleteClassDep endency Eliminar una dep endencia de clase de una clase. DeleteHas Eliminar una agregacion de una clase. DeleteInheritRel Eliminar una relacion de herencia entre clases en una clase. DeleteNestedClass Eliminar una clase anidada de una clase. DeleteOp eration Eliminar una op eracion de una clase. DeleteRealizeRel Eliminar una relacion de realizacion de una clase. DeleteStateMachine Eliminar la maquina de estados de la clase del mo delo. GetAssignedLanguage Obtener el nombre del lengua je de programacion asignado a la clase. GetAssignedMo dules Obtener los modulos asignados a la clase. GetAsso ciateRoles Obtener los roles aso ciados a la clase. GetAsso ciations Obtener las aso ciaciones en las que participa la clase. GetClassDep endencies Obtener la coleccion de clases de dep endencia que p ertenecen a la clase. GetHasRelations Obtener las agregaciones en las que participa la clase. GetInheritRelations Obtener las relaciones de herencia en las que participa la clase. GetLinkAsso ciation Obtener la aso ciacion para una clase de enlace ( Link ). GetNestedClasses Obtener las clases anidadas en la clase. GetRealizeRelations Obtener la coleccion de relaciones de realizacion que p ertenecen a la clase. GetRoles Obtener los roles de la clase. GetSubClasses Obttener las sub clases de la clase. GetSup erclasses Obtener las sup erclases corresp ondientes a la clase. IsALinkClass Determinar si una clase es una clase de enlace. IsNestedClass Determinar si una clase es una clase anidada. RemoveAssignedMo dule Borrar una asignacion de modulo de la clase. 55
ClassView Element InstanceView RoseItemView ComponentView SubsystemView StateView NoteView Figura 3.5: Diagrama de herencia de la clase View . 3.2.5 Diagrama de herencia de la clase View El diagrama de clases de la gura 3.5 muestra la estructura de herencia de la clase V iew en el mo delo REI .La clase RoseI temV iew hereda de E l ement , que p ertenece al diagrama de herencia de la clase M odel . La clase RoseItemView p ermite denir y manipular el tama ~no y p osicion de un RoseI tem en un diagrama. Las propiedades esp ecicas de la clase RoseI temV iew son: Name El nombre de la vista del tem. Item El ob jeto RoseI tem representado p or la vista. ParentDiagram El diagrama que contiene a la vista. ParentView El ob jeto RoseI temV iew que contiene a la vista. SubViews La coleccion de vistas de tem que p ertenecen a la vista. XPosition La co ordenada horizontal (x) del punto central de la vista. YPosition La co ordenada vertical (x) del punto central de la vista. Height La altura de la vista. Width La anchura de la vista. FillColor.Red Establece el color de la vista a ro jo. FillColor.Green Establece el color de la vista a verde. FillColor.Blue Establece el color de la vista a azul. FillColor.Transparent Establece el color de la vista a transparente. LineColor.Red Establece el color de lnea de la vista a ro jo. LineColor.Green Establece el color de lnea de la vista a verde. LineColor.Blue Establece el color de lnea de la vista a azul. Font.Red Establece el color del texto a ro jo. 56
AssignedLanguage El lengua je de programacion asignado al modulo. Declarations La coleccion de declaraciones corresp ondientes al modulo. OtherPart La segunda parte del modulo cuando forma parte de un subsistema. ParentSubSystem El subsistema que contiene el modulo. Part Si el modulo es parte de un subsistema o no. Path El directorio donde se encuentra el modulo. Typ e El tip o del modulo. Ylosmeto dos esp eccos de M odul e son: AddRealizeRel A~nadir una relacion de realizacion a un modulo. AddVisibilityRelationship Crear una nuevarelacion de visibilidad y a ~nadirla a un modulo. DeleteRealizeRel Eliminar una relacion de realizacion de un modulo. DeleteVisibilityRelationship Eliminar una relacion de visibilidad de un modulo. GetAllDep endencies Obtener to dos los modulos que afectan al modulo. GetAssignedClasses Obtener la coleccion de clases asignadas al modulo. GetDep endencies Obtener la coleccion de modulos incluidos en el modulo. GetRealizeRelations Obtener la coleccion de relaciones de realizacion p ertenecientes a un modulo. GetSubsystemDep endencies Obtener la coleccion de relaciones de visibilidad entre un modulo y un subsistema. 3.2.9 Diagrama de herencia de la clase Relation El diagrama de clases de la gura 3.9 muestra la estructura de herencia de la clase Rel ation en el mo delo REI . Estas clases heredan de RoseI tem que p ertenece al diagrama de herencia de la clase M odel , y son un sub conjunto de las clases logicas del mo delo. To das las relaciones ( C l assR el ation , I nher its , Has , Real iz es ) heredan de la clase Relation , cuyas propiedades y meto dos p ermiten esp ecicar y obtener la informacion sobre los extremos de las relaciones en el mo delo. Las propiedades esp eccas de la clase Rel ation son: SupplierName El nombre del extremo suministrador de la relacion. Ylosmeto dos esp eccos de la clase Rel ation son: HasClient Determinar si la relacion tiene una parte cliente. HasSupplier Determinar si la relacion tiene una parte suministradora. GetClient Obtener el ob jeto RoseI tem que actua como cliente de la relacion. GetSupplier Obtener el ob jeto RoseI tem que actua como suministrador de la relacion. 63
RoseItem Relation Transition Role CategoryDependency RealizeRelation ModuleVisibilityRelationShip ClassRelation InheritRelation HasRelationship ClassDepedency Figura 3.9: Diagrama de herencia de la clase Relation . Los roles denotan el proposito o capacidad en que una clase se aso cia con otra. La clase Role exp onen un conjunto de propiedades y meto dos para determinar las caractersticas de los roles y p ermiten obtener los roles de un mo delo. Las propiedades esp eccas de la clase Role son: Class La clase corresp ondiente al rol. Constraints Las restricciones del rol. Asso ciation La aso ciacion vinculada al rol. Exp ortControl La visibilidad de los atributos. Friend Indica si el rol es \ f r iend " o no, p ermitiendo el acceso a sus atributos y op eraciones no publicos. Containment La relacion contenedora del rol. Cardinality La cardinalidad del rol. Aggregate Indica si el rol es una clase agregado o no. Static Indica si el rol es estatico o no. Navigable Indica si el rol es navegable o no. Keys La coleccion de claves corresp ondientes al rol. Ylosmeto dos esp eccos de Role son: AddKey Devuelveunaclave basada en el nombre y tip o de un atributo. DeleteKey Elimina una clave de un rol. GetClassName Obtiene el nombre de la clase aso ciado con el rol. 64
La clase CategoryDependency p ermite denir y manipular las relaciones de dep endencia entre las categoras. La clase ClassRelation hereda de la clase Rel ation y es la clase padre de H asR el ationship , C l assD ependency e I nher itRel ation .los meto dos esp eccos de C l assR el ation son: GetContextClass Obtener la clase cliente de la relacion. GetSupplierClass Obtener la clase suministradora de la relacion. La relacion de herencia indica una relacion jerarquica entre las clases en las que una clase comparte al estructura y/o comp ortamiento de otra clase. La clase InheritRelation exp one un conjunto de propiedades y meto dos para determinar las caractersticas de la relacion de herencia. Las propiedades esp eccas de I nher itRel ation son: Exp ortControl La visibilidad de la relacion de herencia. FriendshipRequired Si la propiedad F r iend es requerida p or la relacion de herencia. Virtual Si la relacion es virtual o no. La relacion \ Has " indica una relacion contenedora o agregado entre clases. La clase HasRelationship exp one un conjunto de propiedades y meto dos para determinar las caractersticas de estas relaciones en un mo delo. Las propiedades esp eccas de H asR el ationship son: ClientCardinality La cardinalidad del cliente de la relacion. Containment El contenedor de clase para la relacion. Exp ortControl La visibilidad de la relacion. Static Si la relacion es estatica o no. SupplierCardinality La cardinalidad del suministrador de la relacion. La clase ClassDependency exp one un conjunto de propiedades y meto dos para determinar las caractersticas de las dep endencias entre las clases. Las propiedades esp eccas de C l assD ependency son: ClientCardinality La cardinalidad del cliente de la dep endencia. SupplierCardinality La cardinalidad del suministrador de la dep endencia. InvolvesFriendship Si la clase implica la propiedad F r iend o no. Exp ortControl La visibilidad de la dep endencia. Una relacion de realizacion entre una clase logica y una clase comp onente muestra que la clase comp onente realiza las op eraciones denidas p or la clase logica. Los meto dos esp eccos de clase RealizeRelation son: GetContextClass Obtener la clase cliente de la relacion. GetContextComp onent Obtener el comp onente cliente de la relacion. GetSupplierClass Obtener la clase suministradora de la relacion. 65
Message RoseItem ObjectInstance Link Persistence Synchronization Frequency Figura 3.10: Diagrama de herencia de la clase Scenario . GetSupplierComp onent Obtener el comp onente suministrador de la relacion. La clase ModuleVisibilityRelationship describ e el cliente y suministrador de una relacion entre modulos. Las propiedades esp eccas de M odul eV isibil ity Rel ationship son: ContextMo dule El nombre del modulo cliente de la relacion. ContextSubsystem El nombre del subsistema cliente de la relacion. SupplierMo dule El nombre del modulo suministrador de la relacion. SupplierSubsystem El nombre del subsistema sumnistrador de la relacion. La clase Transition es una clase que p ertenece al diagrama de herencia de State , p ero tambien hereda de la clase Rel ation p orque se considera que una transicion es una relacion entre los estados fuente y destino. 3.2.10 Diagrama de herencia de la clase Scenario El diagrama de clases de la gura 3.10 muestra la estructura de herencia de la clase S cenar io en el mo delo REI . Las clases O bj ectI nstance , Link y M essag e heredan de RoseI tem que p ertenece al diagrama de herencia de la clase M odel . La clase ObjectInstance exp one un conjunto de propiedades y meto dos para determinar las caractersticas de los ob jetos en un mo delo. Las propiedades esp eccas de O bj ectI nstance son: ClassName El nombre de la clase del ob jeto. Links La coleccion de enlaces corresp ondientes al ob jeto. MultipleInstances Si existen m ultiples instancias del ob jeto o no. Persistence Si la instancia del ob jeto es p ersistente o estatica. Ylosmeto dos esp eccos de O bj ectI nstance son: AddLink A~nadir un enlace a la instancia del ob jeto. 66
DeleteLink Eliminar un enlace de la instancia del ob jeto. GetClass Obtener la clase a la que p ertenece la instancia del ob jeto. IsClass Devuelve True si la instancia del ob jeto es una clase. Los ob jetos interaccionan a traves de sus enlaces hacia otros ob jetos. Un enlace es una instancia de una aso ciacion, de la misma manera que un ob jeto es una instancia de una clase. Las propiedades y metodosdelaclase Link p ermiten denir enlaces entre ob jetos y determinar la naturaleza de las aso ciaciones. Las propiedades esp eccas de Link son: LinkRole1 Dene una instancia de ob jeto como un enlace en Role 1. LinkRole2 Dene una instancia de ob jeto como un enlace en Role 2. LinkRole1Shared Dene una instancia de ob jeto como un enlace en Role 1con visibilidad compartida. LinkRole2Shared Dene una instancia de ob jeto como un enlace en Role 2con visibilidad compartida. LinkRole1Visibility Dene una instancia de ob jeto como un enlace en Role 1 y determina su tip o de visibilidad. LinkRole2Visibility Dene una instancia de ob jeto como un enlace en Role 2 y determina su tip o de visibilidad. Ylosmeto dos esp eccos de Link son: AddMessageTo A~nadir un mensa je al enlace. AssignAsso ciation Asignar una aso ciacion al enlace. DeleteMessage Elimina un mensa je del enlace. GetMessages Obtener los mensa jes llevados p or el enlace. UnAssignAsso ciation Eliminar una asignacion de aso ciacion del enlace. Los mensa jes denen la interaccion entre los ob jetos. La clase Message ofrece propiedades y meto dos que p ermiten obtener el remitente y destino del mensa je junto a otra informacion esp ecca del mismo. Las propiedades esp eccas de M essag e son: Frequency La frecuencia del mensa je (si el mensa je es enviado solo una vez o p eriodicamente). Synchronization La semantica de concurrencia del mensa je. Ylosmeto dos esp eccos de M essag e son: GetSenderOb ject Obtener el ob jeto que envioelmensaje. GetReceiverOb ject Obtener el ob jeto que recibio el mensa je. IsMessageToSelf Si el mensa je es enviado a s mismo o no. IsOp eration Si el mensa je es una op eracion o no. 67
GetOp eration La op eracion aso ciada con el mensa je. GetLink Obtener el enlace aso ciado con el mensa je. La clase Persistence dene los valores por defecto para la p ersistencia de ob jetos. Las propiedades esp eccas de P er sistence son: Persistent El valor p or defecto para la p ersistencia de ob jetos. Transient El valor p or defecto para la transicion de ob jetos. La clase Synchronization dene los valores p or defecto para la sincronizacion de ob jetos. Las propiedades esp eccas de S y nchr oniz ation son: Asynchronous Dene el valor p or defecto para los mensa jes asncronos. Balking Dene el valor p or defecto para los mensa jes \ B al k ing ". Simple Dene el valor p or defecto para los mensa jes simples. Synchronous Dene el valor p or defecto para los mensa jes sncronos. Timeout Dene el valor p or defecto para los mensa jes \ T imeout ". La clase Frequency dene los valores por defecto para la frecuencia de mensa jes. Las propiedades p or defecto de F r eq uency son: Ap erio dic El valor p or defecto para los mensa jes no p eriodicos. Perio dic El valor p or defecto para los mensa jes p eriodicos. 3.2.11 Diagrama de herencia de la clase State El diagrama de clases de la gura 3.11 muestra la estructura de herencia de la clase State en el mo delo REI .Las clases Action y State heredan de Element y RoseI tem mientras que E v ent y S tateM achine directamente de Element . Tanto Element como RoseI tem p ertenecen al diagrama de herencia de la clase M odel . La clase T r ansition hereda de Relation , que p ertenece al diagrama de herencia de la clase Rel ation . Un evento es una o currencia que causa una transicion de estado. Las propiedades y meto dos de la clase Event denen y controlan eventos que afectan a los estados y establece las transiciones de ob jetos en un mo delo. Las propiedades esp eccas de Event son: Arguments Las condiciones que afectan al evento. GuardCondition Dene una condicion de guarda: cuando sea True p ermitira la o currencia del evento y mientras sea False el evento no o currira. Name El nombre del evento. Yelmeto do esp ecco de Event es: GetAction Obtener la accion corresp ondiente al evento. 68
StateMachine Element RoseItem Event Relation Action State Transition Figura 3.11: Diagrama de herencia de la clase State . La clase StateMachine contiene to da la informacion sobre el estado de los ob jetos de una determinada clase. La maquina de estado de una clase dene to dos los posibles estados y transiciones para esa clase. Una clase puede tener o no una maquina de estado y una maquina de estado solo puede p ertenecer a una clase. Las propiedades esp ecca de S tateM achine son: Diagram El diagrama de estados que contiene la maquina de estados. ParentClass La clase a la que p ertenece la maquina de estados. States La coleccion de estados de la maquina de estados. Ylosmeto dos esp eccos de S tateM achine son: AddState A~nadir un estado a una maquina de estados. DeleteState Eliminar un estado de una maquina de estados. GetAllStates Obtener to dos los estados de una maquina de estados. GetAllTransitions Obtener to das las transiciones de una maquina de estados. GetTransitions Obtener la coleccion de transiciones de una maquina de estados. Relo cateState Recolo car un estado en una maquina de estados. La clase Transition provee el medio para seguir la traza de un ob jeto en un cam bio de estado, es decir, en el punto donde no esta en el estado original p ero aun no ha llegado a su estado destino. Los meto dos esp eccos de T r ansition son: GetSendAction Obtener el mensa je a enviar cuando la transicion o curre. GetSourceState Obtener el estado inicial de la transicion. GetTargetState Obtener el estado destino de la transicion. 69
GetTriggerAction Obtener la accion a realizar cuando el evento disparador de la transicion o curra. GetTriggerEvent Obtener el evento que dispara la transicion. RedirectTo Redireccionar la transicionaunnuevo estado destino. Una accion es una op eracion que esta aso ciada a una transicion, toma una cantidad insigni- cante de tiemp o para realizarse y no se puede interrumpir. Las propiedades de la clase Action son: Arguments El contenido de la accion. Target El ob jeto destino de la accion. La clase State esp ecica el conjunto de propiedades y meto dos que controlan la informacion sobre el estado de los ob jetos de un mo delo. Las propiedades esp eccasdelaclase S tate son: History Esp ecica a que sub estado se vuelve cuando se retorna a un sup erestado. ParentState El sup erestado que contiene al estado. ParentStateMachine La maquina de estados a la que p ertenece el estado. StateKind El tip o del estado. Substates Los sub estados del estado (p or lo tanto, es un sup erestado). Transitions El conjunto de transiciones denidas para el estado. Ylosmeto dos esp eccos de S tate son: AddDoAction A~nadir una accion (\ Do ") a un estado. AddEntryAction A~nadir una accion de entrada (la primera vez) a un estado AddExitAction A~nadir una accion de salida a un estado. AddState A~nadir un sub estado a un estado. AddTransition A~nadir una transicion a un estado. AddUserDenedEvent A~nadir un evento denido p or el usuario a un estado. DeleteAction Eliminar una accion de un estado. DeleteState Eliminar un sub estado de un estado. DeleteTransition Eliminar una transicion de un estado. DeleteUserDenedEvent Eliminar un evento denido p or el usuario de un estado. GetAllSubstates Obtener los sub estados de un estado. GetDoActions Obtener las acciones (\ Do ") de un estado. GetEntryActions Obtener las acciones de entrada de un estado. GetExitActions Obtener las acciones de salida de un estado. GetUserDenedEvents Obtener los eventos denidos p or el usuario de un estado. Relo cateState Recolo car un sub estado en un estado determinado. 70
RoseItem UseCase Figura 3.12: Diagrama de herencia de la clase UseCase . 3.2.12 Diagrama de herencia de la clase UseCase El diagrama de clases de la gura 3.12 muestra la estructura de herencia de la clase U seC ase en el mo delo REI . La clase U seC ase hereda de RoseI tem que p ertenece al diagrama de herencia de la clase Rel ation .Se podra p ensar en un diagrama de casos de uso en lugar de una clase, p ero de esta manera aparecera en el diagrama de herencia de la clase Diagram . La clase UseCase exp one un conjunto de propiedades y meto dos que p ermiten denir y manipular los conjuntos de diagramas de clases y escenarios que forman los casos de uso de un mo delo. Las propiedades esp eccas de U seC ase son: Abstract Si el caso de uso es una clase abstracta ono. ClassDiagrams La coleccion de diagramas de clases corresp ondientes al caso de uso. ParentCategory La categora que contiene el caso de uso. Rank El rango del caso de uso ScenarioDiagrams La coleccion de diagramas de escenarios corresp ondientes al caso de uso. StateMachine La maquina de estado corresp ondiente al caso de uso. Ylosmeto dos esp eccos de U seC ase son: AddAsso ciation A~nadir una aso ciacion a un caso de uso. AddClassDiagram A~nadir un diagrama de clases a un caso de uso. AddInheritRel A~nadir una relacion de herencia a un caso de uso. AddScenarioDiagram A~nadir un diagrama de escenario a un caso de uso. DeleteAsso ciation Eliminar una aso ciacion de un caso de uso. 71
DeleteClassDiagram Eliminar un diagrama de clases de un caso de uso. DeleteInheritRel Eliminar una relacion de herencia de un caso de uso. DeleteScenarioDiagram Eliminar un diagrama de escenario de un caso de uso. GetAsso ciations Obtener las aso ciaciones de un caso de uso. GetInheritRelations Obtener la coleccion de relaciones de herencia de un caso de uso. GetRoles Obtener la coleccion de roles de un caso de uso. GetSup erUseCases Obtener los sup er{casos de uso de un caso de uso. 3.3 Diagramas del mo delo de empaquetamiento de REI Acontinuacion se muestran los paquetes en la vista logica del mo delo REI : Application Classes Application Classes Application PathMap RoseAddInManager AddIn AddInCollection Mo del Classes Mo delClasses Sub classes of Item Items Elements RoseItem Element DefaultMo delProp erties Sub classes of Relation Sub classes of ClassRelation Relations ControllableUnit 1. Mo del Collections Mo del RoseItem ExternalDo cument ControllableUnit Package Element Prop erty DefaultMo delProp erties 72
Sub Main() Begin Dialog PlantillaDialogoSalida 16,32,116,64,``Salida'' Text 4,8,108,8,``>Estas seguro de que quieres salir?'' CheckBox 32,24,63,8,``Salvar los cambios'',.SalvarCambios OKButton 12,40,40,14 CancelButton 60,40,40,14 End Dialog Dim VentanaDialogoSalida As PlantillaDialogoSalida rc% = Dialog(VentanaDialogoSalida) End Sub 4.2 Visualizar un formulario 4.2.1 El pro cedimiento Dialog Se utiliza para visualizar un formulario: no devuelve ning un valor, al contrario que la funcion del mismo nombre. La sintaxis es la que sigue: Dialog ( D ial og V ar iabl e & & D ef aul tB utton ]& T imeout ]]) La denicion de los tres parametros es la siguiente: DialogVariable Nombre de la variable que ha sido previamente declarada como un formulario denido p or el usuario. DefaultButton Un entero que esp ecica que boton act ua como boton por defecto en el formulario. Este valor sigue la misma norma que el valor de salida para identicar el b oton. El valor p or defecto es ; 1 (Boton OK ). Timeout Un entero que esp ecica el n umero de milisegundos para visualizar formulario antes de que automaticamente se quite. El valor por defecto es 0 (solo se quitara tras una p eticion explcita del usuario). En el siguiente ejemplo se visualiza un formulario para mostrar el tpico mensa je de error de disco: Sub Main() Begin Dialog PlantillaErrorDisco 16,32,152,48,``Error de Disco'' Text 8,8,100,8,``La disquetera estavaca.'' PushButton 8,24,40,14,``Ab ortar'',.Ab ortar PushButton 56,24,40,14,``Volver aintentar'',.Reintentar PushButton 104,24,40,14,``Ignorar'',.Ignorar End Dialog Dim ErrorDisco As PlantillaErrorDisco Dialog ErrorDisco,3,0 End Sub 79
4.2.2 La funcion Dialog Tambien se puede utilizar la funcion Dialog que visualiza un formulario denido p or el usuario. La funcion devuelveunentero que representa al b oton que se pulso para salir: -1 El b oton OK fue pulsado. 0 El b oton C ancel fue pulsado. > 0 Se pulso otro b oton: el n umero representa al b oton, seg un el orden en el que estaen la plantilla del cuadro de dialogo. El siguiente ejemplo muestra de nuevo la ventana a visualizar cuando o curra un error de disquetera: Sub Main() Begin Dialog PlantillaErrorDisco 16,32,152,48,``Error de Disco'' Text 8,8,100,8,``La disquetera estavaca.'' PushButton 8,24,40,14,``Ab ortar'',.Ab ortar PushButton 56,24,40,14,``Volver aintentar'',.Reintentar PushButton 104,24,40,14,``Ignorar'',.Ignorar End Dialog Dim ErrorDisco As PlantillaErrorDisco r% = Dialog(ErrorDisco,3,0) MsgBox ``Has seleccionado el b oton: '' & r% End Sub 4.3 F unciones de mensa jes o ventanas de dialogo predenidas AnswerBox Muestra un mensa je y esp era aque el usuario de una respuesta, devolviendo un entero indicando que b oton pulso el usuario. AskBox, AskBox$ Muestra una ventana para p edir al usuario una entrada de datos, que devuelve como una cadena. AskPassword, AskPassword$ Muestra una ventana para pedir al usuario una entrada de datos, que devuelve como una cadena. Pero esta vez solo se visualizan asteriscos cuando el usuario intro duzca los datos, p ermitiendo aslaentrada de claves. InputBox, InputBo x$ Muestra una ventana de dialogo con un control de edicion de textos para que el usuario pueda intro ducir alg un dato. MsgBox Muestra un mensa je en una ventana de dialogo con un conjunto de b otones predenidos. Tiene dos versiones: funcional (devolviendo un entero que representa el b oton que fue seleccionado) y pro cedimental. Op enFilename$ Muestra una ventana de dialogo para abrir un chero. SaveFilename$ Muestra una ventana de dialogo para guardar un chero. SelectBox Muestra una ventana de dialogo que permite al usuario seleccionar en una lista de p osibilidades, devolviendo un entero que represen ta el ndice del elemento que fue seleccionado. 80
4.4 Meto dos y funciones sobre los controles de los formularios 4.4.1 Meto dos ActivateControl Colo ca el fo co en el control esp ecicado. DlgCaption Cambiaelttulodelaventana de dialogo actual. DlgEnable Habilita/deshabilita el control esp ecicado. DlgFocus Colo ca el fo co en el control esp ecicado. DlgListBoxArray Rellena un control de lista (o variantes) con los elementos deunarray. DlgSetPicture Cambia la imagen contenida en el control (una imagen o un b oton con imagen). DlgText Cambia el texto contenido en el control esp ecicado. El resultado dep endera del tip o de control. DlgValue Cambiaelvalor de un control dado. El resultado dep enderadeltipodecontrol. DlgVisible Muestra u o culta el control esp ecicado. SelectButton Simula la pulsacion de un b oton de la ventana. SelectComboBoxItem Selecciona un tem de un cuadro combinadodelaventana. SelectListBoxItem Selecciona un tem de una lista de la ventana. SetCheckBox Marca el estado de un con trol de chequeo de la ventana. SetEditText Establece el contenido de un editor de texto la ventana. SetOption Selecciona un b oton de op cion de la ventana. 4.4.2 Funciones ButtonEnabled Devuelve True si el b oton esp ecicado en el formulario activoesta habilitado (si es as, puede ser pulsado utilizando la sentencia S el ectB utton ). ButtonExists Devuelve True si el b oton esp ecicado esta presente en el formulario activo. CheckBoxEnabled Devuelve True si el control de vericacion esp ecicado en el formulario activo esta habilitado (si es as, su valor puede ser establecido utilizando la sentencia S etC heck B ox ). CheckBoxExists Devuelve True si el control de vericacion esp ecicado esta presente en el formulario activo. ComboBoxEnabled Devuelve True si la lista combinada esp ecicada del formulario activo esta habilitada. ComboBoxExists Devuelve True si la lista combinada esp ecicada esta presente en el formulario activo. DlgControlId Devuelveunentero que representa el ndice del control esp ecicado tal y como aparece en la plantilla del formulario. DlgEnable Devuelve True si el control esp ecicado esta habilitado. 81
DlgFocus Devuelve una cadena que contiene el nombre del control que tiene el fo co. DlgListBoxArray Rellena una lista, una lista combinada o una lista ja combinada con los elementosdeunarray, devolviendo un entero que representa el n umero de elementos que hay actualmente en el control. DlgText$ Devuelveelcontenido textual del control esp ecicado. DlgValue Devuelve un entero que representa el valor del control esp ecicado. Suele ser el ndice del valor seleccionado dentro de un control (listas, grup os de op ciones, etc.). DlgVisible Devuelve True si el control esp ecicado esta visible. EditEnable Devuelve True si el control de edicion de textos esp ecicado esta habilitado en el formulario activo. EditExists Devuelve True si el control de edicion de textos esp ecicado existe en el formulario activo. GetCheckBox Devuelveunentero que representa el estado del control de vericacion esp eci- cado. GetComboBoxItem$ Devuelve una cadena que contiene el texto de un elemento dentro de una lista combinada. GetComboBoxItemCount Devuelve un entero que contiene el numero de elementos en la lista combinada esp ecicada. GetEditText$ Devuelve una cadena que es el contenido del control de edicion de textos esp ecicado. GetListBoxItem$ Devuelve una cadena que contiene el elemento esp ecicado en una lista. GetListBoxItemCount Devuelve un entero que contiene el numero de elementos en la lista esp ecicada. GetOption Devuelve True si el b oton de op cion esp ecicado esta activo. ListBoxEnabled Devuelve True si la lista esp ecicada esta habilitada en el formulario activo. ListBoxExists Devuelve True si la lista esp ecicada existe en el formulario activo. MenuItemChecked Devuelve True si el elemento de men u esp ecicado existe y su control de vericacion estaactivo. MenuItemEnabled Devuelve True si el elemento de men u esp ecicado existe y esta habilitado. MenuItemExists Devuelve True si el elemento de men u esp ecicado existe. OptionEnabled Devuelve True si el b oton de op cion esp ecicado esta habilitado en el formulario activo. OptionExists Devuelve True si el b oton de op cion esp ecicado existe en el formulario activo. PopupMenu Muestra un men u emergente que contiene los elementos esp ecicados, devolviendo un en tero que representa el ndice al elemento seleccionado. 82
4.5 Pro cesamiento de acciones sobre un formulario Cuando se pro duce una determinada accion sobre un formulario, BasicScript llama a una funcion esp ecial que tiene aso ciada y que gestionara el pro cesamiento de tal accion. La sintaxis para denir esta funcion es: F unction D l g P r oc ( C ontr ol N ame $ Action S uppV al ue ) As I nteg er Para aso ciar esta funcion a un formulario se indica mediante el parametro :D l g P r oc en la sentencia B eg in D ial og que lo dene. Los parametros que recib e la funcion aso ciada al formulario son: ControlName$ Cadena que contiene el nombre del control aso ciado con Action . Action Entero que representa la accion p or la que se llamo a la funcion. SuppValue Entero que contiene informacion extra aso ciada con dic ha accion. Cuando BasicScript visualiza un formulario se pro ducen diversos eventos debidos a la interaccion con el usuario: pulsacion de b otones, intro duccion de textos p or el teclado, seleccion de elementos de una lista y otros. Cuando se pro ducen estas acciones, BasicScript llama a la funcion aso ciada al formulario, pasandole como parametros: la accion que ha o currido, el nombre del control y otra informacion relevante. La siguiente tabla describ e las diferentes acciones que se pueden enviar a una funcion de formulario: 1 Esta accion es enviada inmediatamente antes de que el formulario se muestre p or primera vez: de esta forma se da la op ortunidad de preparar la utilizacion del formulario. Los demas parametros no son signicativos y se ignoraraelvalor resultado devuelto p or la funcion. 2 Esta accion es enviada cuando: Se pulsa un b oton. En este caso, C ontr ol N ame $contendrasunombre y S uppV al ue sera: 1 si es un boton Ok , 2 si es un boton C ancel o un valor indenido si es otro b oton. Si la funcion devuelve 0 como respuesta entonces el formulario sera cerrado. Se ha mo dicado el estado de un control de vericacion. En este caso, ControlN ame $ contendrasunombre y SuppV alue el nuevoestado(1siactivoo 0 si desactivo). Se ha seleccionado un b oton de op cion. En este caso, C ontr ol N ame $contendrasu nombre y SuppV alue el ndice del b oton activado dentro del grup o de op ciones (que empieza en 0). Se ha cambiado la seleccion actual de una lista o lista combinada. En esta caso, C ontr ol N ame $ contendra su nombre y SuppV alue el ndice del nuevotem seleccionado (que empieza en 0). 3 Esta accion es enviada cuando el contenido de un control de edicion de texto o una lista combinada ha sido mo dicado. Esta accion solo se enva cuando dicho control pierde el fo co. En este caso, ControlN ame $contendra su nombre y S uppV al ue la longitud del nuevocontenido. El valor que devuelvelafuncion es ignorado. 4 Esta accion es enviada cuando un control obtiene el fo co de control. C ontr ol N ame $contendra su nombre y S uppV al ue el ndice del control que p erdio el fo co (que empieza en 0). El valor que devuelve la funcion es ignorado. 83
5 Esta accion es enviada continuamente cuando un formulario esta inactivo. Si la funcion devuelve 1 en respuesta, entonces la accion \inactividad" volveraaserenviada. Pero si la funcion devuelve0, entonces la accion no volvera a rep etirse. En este caso, ControlN ame $ no contiene nada y S uppV al ue el n umero de veces que se ha enviado hasta el momento. 6 Esta accion es enviada cuando se mueveel formulario. En este caso, los parametros no son signicativos y se ignoraraelvalor devuelto p or la funcion. La funcion de un formulario no puede denir otros formularios, aunque s p o dra inv o car cualquier cuadro de dialogo predenido (tales como MsgBox o I nputB ox $). Por otro lado, las funciones de los formularios s p o dran utilizar otras sentencias y funciones de BasicScript , p ermitiendo la manipulacion de los controles del formulario de una manera dinamica. Estas son: D l g V isibl e , DlgT ext $, D l g T ext , D l g S etP ictur e , D l g ListB oxAr r ay , DlgF ocus , D l g E nabl e y D l g C ontr ol I d . El siguiente ejemplo habilita/deshabilita un grup o de b otones de op cion cuando un control de vericacion es activado/desactivado: Function FuncionFormulario(ControlName$, Action%, SuppValue%) If Action% = 2 And ControlName$ = ``Imprimir'' Then DlgEnable ``Op cionesImpresion'',SuppValue% SampleDlgPro c = 1 'No cerrar el formulario. End If End Function Sub Main() Begin Dialog PlantillaFormulario 34,39,106,45,``Ejemplo'',.FuncionFormulario OKButton 4,4,40,14 CancelButton 4,24,40,14 CheckBox 56,8,38,8,``Imprimir'',.Imprimir OptionGroup .Op cionesImpresion OptionButton 56,20,51,8,``Apaisado'',.Apaisado OptionButton 56,32,40,8,``Vertical'',.Vertical End Dialog Dim UnFormulario As PlantillaFormulario UnForm ulario.Printing = 1 r% = Dialog(UnFormulario) End Sub 84
Captulo 5 La gestion de errores 5.1 Intro duccion BasciScript ofrece un meto do para pro cesar de manera adecuada los errores que ocurren en tiemp o de ejecucion. 5.1.1 Denicion del gestor de errores Una plantilla generica para la denicion de un gestor de errores dentro de una subrutina p o dra ser: Sub UnaFuncion() On Error Goto catch 'Codigo de la funcion. Exit Sub catch: 'Codigo del Pro cesamiento del Error. End Sub Brevemente, la lnea de ejecucion ejecuta el codigo del algoritmo y si o curre un error, entonces la lnea de ejecucion se transere al codigo esp ecial para pro cesarlo. 5.1.2 La captura de un error La sentencia On E rror dene la accion a llevar a cab o cuando o curre un error capturable en tiemp o de ejecucion. La sintaxis es la siguiente: On Error f Goto l abel j Resume Next j Goto 0 g La forma O n E r r or Goto Label transere la lnea de ejecucion ala etiqueta esp ecicada cuando o curre un error. La forma O n E r r or Resume N ext fuerza la continuacion de la ejecucion por la sentencia que sigue a la causante del error. La forma O n E r r or Goto 0anula cualquier error capturado existente. 85
5.1.3 El pro cesamiento del error Una vez que el gestor del error tiene el control, deb era descubrir cual fue la condicion que causo el error y continuar la ejecucion con la sentencia Resume para reiniciar el gestor de errores, transriendo la ejecucion a un lugar apropiado dentro del pro cedimiento actual. La sintaxis es: Resume f &0] j Next j label g En el siguiente ejemplo se observan varios de sus usos que siguen la siguiente secuencia: El usuario teclea dos enteros para multiplicarlos. Si alguno de los n umeros es mayor que un entero, el programa ejecuta una rutina de error y la ejecucion del programa continua en una seccion esp ecca utilizando Resume <l abel > . Entonces se establece un nuevo punto de captura de errores, reiniciando el gestor de errores de la subrutina e indicando que el programa continue su ejecucion p or la siguiente sen tencia incluso si o curriera alg un error. Sub Main() Dim a%, b%, x% OtraVez: On Error Goto ErrorRango a% = InputBox(``Intro duzca el primer entero a multiplicar'',``Introduzcaunnumero'') b% = InputBox(``Intro duzca el segundo entero a multiplicar'',``Intro duzca un n umero'') On Error Resume Next 'Continua la ejecucion del programa en la x% = a% * b% 'siguiente lnea si o curre un error. if err = 0 then MsgBoxx% else Msgb ox a% & `` * '' & b% & `` sale del rango de los enteros'' end if Exit Sub ErrorRango: 'Gestor de errores. MsgBox ``Has intro ducido un valor no entero. <Intentalo otra vez!'' Resume OtraVez End Sub El error es anulado si el pro cedimiento termina sin hab er ejecutado esta sentencia. En general, existen cuatro formas para reiniciar el gestor de errores de manera que se p ermite que el pro cedimiento acab e sin visualizar ning un mensa je de error: La ejecucion llega a una sentencia On E rror o Resume . Se asigna ; 1a Err:N umber . Se llama al meto do Err:C l ear . La ejecucion llega a una sentencia E xit S ub , E xit F unction , E nd F unction o End Sub . 86
5.1.4 El pro ceso en cascada para capturar un error Una caracterstica esp ecial es que se p ermite el anidamiento de gestores de errores: si o curre un error dentro del gestor de errores, entonces se llamara al gestor de errores propio. En cualquier caso si durante la ejecucion o curre un error y no hay denido ning un gestor On E rror en el pro cedimiento, entonces BasicScript vuelve al pro cedimiento que lo llamo y ejecuta all el gestor de errores. Este pro ceso se repite hasta que se encuentra ese gestor, o no haya mas pro cedimientos. Si un error no se captura u o curre dentro de un gestor, BasicScript muestra un mensa je de error, deteniendose la ejecucion del script . 5.2 El ob jeto predenido Err Este ob jeto tiene las siguientes propiedades: Err.Description Establece u obtiene la descrip cion del error. Err.HelpContext Establece u obtiene el identicador de contexto en la ayuda para conseguir mas informacion sobre el error. Err.HelpFile Establece u obtiene el nombre del chero de ayuda que contiene la informacion sobre el error. Err.LastDLLError Obtiene el ultimo error generado p or una llamada externa. Err.Number Establece u obtiene el n umero de error. Err.Source Establece u obtiene la fuente de un error en tiemp o de ejecucion. Y ofrece los siguientes meto dos: Err.Clear Inicializa las propiedades del ob jeto Err .Esto se realiza automaticamente cuando se ejecuta alguna de las siguientes sentencias: Resume , E xit F unction , On E rror y E xit S ub . Err.Raise Genera un error en tiemp o de ejecucion, estableciendo las propiedades adecuadas en el ob jeto Err (y que se pasan como parametros). Estas son: el n umero de error, la fuente del error, la descrip cion del error, el chero de ayuda con informacion sobre el error y el contexto dentro de la ayuda. 5.3 Funciones para la gestion de errores Algunas funciones que van a ayudar para gestionar los errores son: Erl Devuelveelnumerodelnea (dentro del script ) del error mas reciente. Error, Error$ Devuelve una cadena que contiene el texto que corresp onde al n umero de error dado o al error mas reciente. IsError Devuelve True si la expresion es un valor de error denido p or el usuario. 87
5.4 Compatibilidad con Visual Basic BasicScript tiene los mismos codigos y mensa jes de error que Visual Basic , facilitando la p ortabilidad entre estos entornos. Ello es debido a que BasicScript obtiene el error mediante la funcion Error o la propiedad Err:D escr iption . Hay tres categoras de errores: 1. Errores compatibles con Visual Basic (0 a 799). 2. Errores de BasicScript (800 a 999). 3. Errores denidos p or el usuario ( 1000). 5.5 Otros ejemplos sobre la gestion de errores Muestran tres tip os de gestion de un error. El primer caso simplemente ignora el error capturado ycontinua la ejecucion del programa. El segundo caso ejecuta un salto hacia una rutina com un de pro cesamiento de errores, reinicia el gestor yreanuda la ejecucion del programa. El tercer caso reinicia el gestor, p or lo que la ejecucion se parara cuando aparezca el siguiente error. Sub Main() Dim x% a = 10000 b = 10000 On Error Goto Eqit0 'Cuando o curra un error, salta a esta etiqueta. Do x% = a * b Lo op Etiq0: Err = -1 'Inicializar la se ~nal de error. MsgBox ``Se ~nar de error inicializada y continuacion.'' On Error Goto ErrorRango 'Salto a una nueva rutina de error para x% = 1000 'los siguientes errores. x% = a * b x% = a / 0 On Error Goto 0 'Inicializar los saltos de error. x% = a * b 'El programa parara aqu. Exit Sub 'Salida previa a la rutina com un de errores. ErrorRango: 'Comienzo de la rutina com un de errores. If Err = 6 then MsgBox ``Salto p or Error en el Rango.'' Else MsgBox Error(Err) End If Resume Next End Sub 88
Right, Right$, RightB, RightB$ Devuelve la sub cadena formada por los n ultimos caracteres o bytes de la cadena esp ecicada. StrComp Comparacion de cadenas. StrConv Convierte la cadena esp ecicada seg un un parametro de conversion: mayusculas, min usculas, etc. String, String$ Devuelve una cadena de una longitud dada que se rellena con el caracter esp ecicado. Trim, Trim$, LTrim, LTrim$, RTrim, RTrim$ Devuelve una copia de la cadena pasada donde se han eliminado los espacios al inicio o al nal de la misma. UCase, UCase$ Devuelve la cadena de entrada en letras mayusculas. Word$ Devuelve una cadena que contiene la secuencia de palabras en tre dos puntos dados del texto esp ecicado. WordCount Devuelveunentero que representa el n umero de palabras en el texto esp ecicado. Algunas funciones sobre los tipos: CBo ol Convierte una expresion al tip o B ool ean . CCur Convierte una expresion al tip o C urrency . CDate, CVDate Convierte una expresion al tip o D ate . CDbl Convierte una expresion al tip o Double . CInt Convierte una expresion al tip o I nteg er . CLng Convierte una expresion al tip o Long . CSng Convierte una expresion al tip o S ing l e . CStr Convierte una expresion al tip o String . CVar Convierte una expresion al tip o Variant . CVErr Convierte una expresion en un n umero de error denido p or el usuario. IsDate Devuelve True si la expresion dada puede convertirse a una fecha. IsEmpty Devuelve True si la variable dada es de tip o Variant y no ha sido inicializada. Es equivalente a (VarType(expression) = ebEmpty) . IsNull Devuelve True si la variable dada es de tip o V ar iant y no contiene datos validos. Es equivalente a (VarType(expression) = ebNul l) . IsNumeric Devuelve True si la expresion puede convertirse a un n umero. IsOb ject Devuelve True si la variable dada es de tip o Variant ycontiene un ob jeto O bj ect . Str, Str$ Convierte un n umero en una cadena. Typ eName Devuelve el nombre del tip o de la variable esp ecicada. 95
Typ eOf ob jectvariable Is ob jecttyp e Devuelve True si obj ectv ar iabl e es del tip o obj ectty pe esp ecicado. Esta funcion es muy util para determinar el tip o de los ob jetos de automatizacion OLE . Val Convierte una determinada expresion cadena a un n umero. VarTyp e Devuelveunentero que representa el tip o de dato de la variable esp ecicada. Algunas funciones que no entran en categoras anteriores: Ficheros de textos y binarios ( EOF , F il eAttr , FreeFile , Loc , Lof y Seek ). Ficheros INI y el registro de Windows ( GetAl l S etting s , GetS etting , ReadI ni $). Acceso a base de datos con SQL ( SQlBind , S QLC lose , S QLE rror , S QLE xecQuer y , S QLGetS chema , S QLO pen , S QLR eq uest , S QLR etr iev e y S QLR etr iev eT oF il e ). Funciones estadsticas ( DDB , Fv , Ipmt , IRR , MIRR , NP er , Npv , Pmt , PPmt , Pv , Rate , Sln y SY D ). Portapap eles (Clipb oard$). Otras ( I M EStatus y M acI D ). 6.2 Conguracion de op ciones La sentencia O ption congura de manera global al script algunos asp ectos del pro cesamiento. Esta sentencia deb e aparecer fuera de cualquier blo que de subrutina o funcion. El lmite inferior de los arrays Por defecto, el lmite inferior es 0, p ero se puede p oner a 1. La sintaxis que sigue es: Option Base f 0 j 1 g Por ejemplo: Option Base 1 Sub Main() Dim a(10) 'Contiene 10 elementos (y no 11). End Sub La comparacion de cadenas Se puede controlar el mo do en que se comparan las cadenas. Por defecto el mo do es B inar y (la comparacion es sensitiva a las mayusculas). Se puede cambiar al mo do Text (la comparacion no es sensitiva). La sintaxis es: Option Compare &Binary j Text] Por ejemplo: Option Compare Binary 'Comparacion sensitivaa mayusculas. 96
Sub ComparaSensitiva a$ = ``Esta Cadena Contiene MAY USCULAS.'' b$ = ``esta cadena contiene mayusculas.'' If a$ = b$ Then MsgBox ``Las dos cadenas fueron comparadas de manera no sensitiva.'' Else MsgBox ``Las dos cadenas fueron comparadas de manera sensitiva.'' End If End Sub Option Compare Text 'Comparacion no sensitivaamayusculas. Sub ComparaNoSensitiva a$ = ``Esta Cadena Contiene MAY USCULAS.'' b$ = ``esta cadena contiene mayusculas.'' If a$ = b$ Then MsgBox ``Las dos cadenas fueron comparadas de manera no sensitiva.'' Else MsgBox ``Las dos cadenas fueron comparadas de manera sensitiva.'' End If End Sub Sub Main() ComparaSensitiva 'Llama a la subrutina denida previamente. ComparaNoSensitiva 'Llama a la subrutina denida previamente. End Sub Las cadenas de escap e al estilo de sc C Habilita o deshabilita la utilizacion de las secuencias de escap e al estilo de C en las cadenas. Cuando esta habilitado, el compilador trata el caracter n como el inicio de una secuencia de escap e (los tpicos n r, n n, n r, n t, etc.). Por defecto, estaop cion esta deshabilitada. La sintaxis que sigue es: Option CStrings f On j O. g Por ejemplo: Option CStrings On Sub Main() MsgBox ``Ellos dijeron, n ``<Mira aquello! n '''' MsgBox ``Primera lnea. n r n nSegunda lnea.'' MsgBox ``Caracter A: n x41 n r n nCaracter B: n x42'' End Sub Tip o por defecto de las variables Establece el tip o p or defecto para las variables y funciones cuando no se esp ecica. Por defecto, este tip o es V ar iant . Actualmente, solo se puede esp ecicar I nteg er como tip o alternativo(para mantener compatibilidad con anteriores versiones de BasicScript . La sintaxis que sigue es: 97
Option Default ty pe Por ejemplo: Option Default Integer Function SumaEnteros(a As Integer,b As Integer) SumaEnteros = a + b End Function Sub Main Dim a,b,resultado a = InputBox(``Teclee un entero:'') b = InputBox(``Teclee otro entero:'') resultado = SumaEnteros(a,b) End Sub Sobre la declaracion implcita Se utiliza para prevenir la declaracion implcita de las variables y los pro cedimientos externos. La sintaxis que sigue es: Option Explicit 6.3 Propiedades y meto dos de los ob jetos predenidos 6.3.1 El ob jeto Basic Propiedades Basic.Architecture $ Una cadena que contiene la plataforma sobre la que se ejecuta BasicScript . Algunas de ellas son \ I ntel ", \ PowerPC ", \ Al phaAX P ", etc. Esta cadena estavaca si la arquitectura no puede ser determinada. Basic.CodePage Un entero que representa la pagina de codigos de caracteres lo cal. Basic.Eoln $ Una cadena que contiene la secuencia de n de lnea apropiada a la plataforma actual. Basic.FreeMemory Un entero largo que representa el numero de bytes de memoria libre en el espacio de datos de BasicScript (el tama ~no del blo que libre mas grande). Previamente, el espacio de datos es compactado para consolidar el espacio libre en un blo que unico. Este espacio contiene las cadenas y arrays dinamicos. Basic.HomeDir $ Una cadena que contiene el directorio donde se ubica BasicScript . Basic.Locale $ Una cadena que contiene informacion del entorno lo cal donde se esta ejecutando BasicScript : formatos de fecha y hora, conguracion dep endiente del pas y analogos. 98
Basic.OperatingSystem $ Una cadena que contiene el nombre del sistema op erativo. Estos valores son: \ W indow s ", \ W indow sf or W or k g r oups ", \ Win 32 s ", \ W indow s 95", \ W indow sN T ", \ OS= 2", \ M acintosh "y\ N etw ar e ". Basic.OperatingSystemVendor $ Una cadena que contiene el fabricante del sistema op erativo sobre el que se ejecuta BasicScript . Estos valores son: \ M icr osof t ", \ IBM ", \ Appl e ", etc. Basic.OperatingSystemVersion $ Una cadena que contiene la version del sistema op erativo sobre el que se ejecuta BasicScript . Basic.OS Un entero indicando la plataforma actual. Estas constantes son: ebW in 16, ebW in 32, ebM acintosh , ebS ol ar is ,etc. Es muy apropiada para la creacion de scripts multiplataforma. Basic.PathSeparator $ Una cadena que contiene el separador en las cadenas de directorio de la plataforma actual. Basic.Processor $ Una cadena que contiene el nombre del pro cesador en el ordenador donde se ejecuta BasicScript . Esta cadena estaravaca si no es capaz de establecerlo. Basic.ProcessorCount Un entero que representa el n umero de pro cesadores presentes. Basic.Version $ Una cadena que contiene la version de BasicScript en el formato maj or:minor:B uil dN umber . Meto dos El meto do Basic.Capability devuelve True si plataforma actual admite la capacidad que se esp ecica (pasada como parametro). 6.3.2 El ob jeto HWND Propiedades La propiedad por defecto de un ob jeto HW N D devuelve un Variant que contiene un gestor ( HAN DLE )delaventana fsica de una variable ob jeto HW N D . Su sintaxis es window .Value . Esta propiedad es de solo lectura, y se utiliza para obtener el valor de un ob jeto HW N D en el entorno op erativo actual. Su tama ~no dep endera del sistema en el que se ejecuta el script ypor lo tanto siempre sera guardado en una variable Variant . En el siguiente ejemplo se visualiza una ventana que contiene el nombre de clase de la ventana del \Program Manager's" y lo hace utilizando la propiedad :V al ue , pasandola directamente a una rutina externa: Declare Sub GetClassName Lib ``user'' (ByVal Win%,ByVal ClsName$,ByV al ClsNameLen%) Sub Main() Dim ProgramManager As HWND Set ProgramManager = WinFind(``Program Manager'') ClassName$ = Space(40) GetClassName ProgramManager.Value,ClassName$,Len(ClassName$) MsgBox ``El nombre de clase del programa es: '' & ClassName$ End Sub 99
6.3.3 El ob jeto Msg Propiedades La propiedad Msg.Thermometer cambia el p orcenta je marcado en el termometro de una ventana de mensa je (abierta previamente con el meto do Msg:Open ). Si la ventana no esta abierta o el valor esta fuera del intervalo 0{100 se genera un error. Meto dos Los siguientes meto dos son esp eccos para Windows. Msg.Open Muestra una ventana de mensa je con un b oton de cancelacion y un termometro que son op cionales. Tiene varios parametros: el texto del mensa je, el tiemp o que se mostrara el mensa je, si aparece el b oton de cancelacion, si aparece el termometro y la p osicion de la ventana. La ventana es no mo dal, p or lo que p ermanecera abierta hasta que el usuario seleccione la cancelacion, expire el tiemp o indicado o se ejecute el meto do Msg:Close . Solo podra hab er uno de estos mensa jes al mismo tiemp o y se quitaraautomaticamente cuando termine el script . Hay que llamar p eriodicamente al pro cedimiento DoE vents para pasar el control al sistema: de esta manera se cierra la ventana cuando se pulse el boton de cancelacion. Msg.Close Cierra la ventana de mensa je no mo dal. 6.3.4 El ob jeto Screen Propiedades Screen.DlgBaseUnitsX Un entero que se utiliza para realizar la conversion pxeles/unidades de dialogo en el eje horizontal. Este valor dep endera de la fuente utilizada en las ventanas de dialogo. Para pasar de pxeles a unidades: (( X P ixel s 4) + ( S cr een:D l g B aseU nitsX ; 1)) =S cr een:D l g B aseU nitsX Para pasar de unidades a pxeles: ( X D l g U nits S cr een:D l g B aseU nitsX ) = 4) Screen.DlgBaseUnitsY Un entero que se utiliza para realizar la conversion pxeles/unidades de dialogo en el eje vertical. Este valor dep endera de la fuente utilizada en las ventanas de dialogo. Para pasar de pxeles a unidades: ( Y P ixel s 8) + ( S cr een:D l g B aseU nitsY ; 1) =S cr een:D l g B aseU nitsY Para pasar de unidades a pxeles: ( YDlgUnits S cr een:D l g B aseU nitsY ) = 8 Screen.Height Un entero que representa la altura en pxeles de la pantalla. Es una propiedad de solo lectura. Screen.TwipsPerPixelX Un entero que representa el numero de twips por pxel en el eje horizontal del disp ositivode pantalla instalado. La propiedad es de solo lectura. 100
Screen.TwipsPerPixelY Un entero que representa el numero de twips por pxel en el eje vertical del disp ositivode pantalla instalado. La propiedad es de solo lectura. Screen.Width Un entero que representa la anchura en pxeles de la pantalla. Es una propiedad de solo lectura. 6.3.5 El ob jeto System Propiedades To das ellas son esp eccas del entorno Windows . System.FreeMemory Un entero largo que indica el n umerodebytes de memoria libre. System.FreeResources Un entero que representa el p orcenta je de recursos libres del sistema. Es un valor entre 0 y 100. System.TotalMemory Un entero largo que representa el n umero de bytes de la memoria libre disp onible. System.WindowsDirectory $ Una cadena que contiene el directorio donde se encuentra el sistema op erativo. System.WindowsVersion $ Una cadena que contiene la version del sistema op erativo. 6.3.6 El ob jeto Clipboard Meto dos Clipboard.Clear Borra el contenido del p ortapap eles. Clipboard.GetFormat Devuelve True si los datos disp onibles en el p ortapap eles siguen un determinado formato (que se pasa como parametro). Clipboard.GetText Devuelve el texto que contiene el p ortapap eles. Clipboard.SetText Copia el texto esp ecicado (pasado como parametro) en el p ortapap eles. 6.3.7 El ob jeto Desktop Meto dos Los siguientes meto dos son esp eccos para Windows. Desktop.ArrangeIcons Reorganiza las aplicaciones minimizadas en la pantalla. Desktop.Cascade Reorganiza en cascada las ventanas no minimizadas. Desktop.SetColors Cambia los colores del sistema a un conjunto de colores predenido (que se pasa como parametro). Desktop.SetWal lpaper Cambia el tapiz de la pantalla al mapa de bits esp ecicado (que se pasa como parametro). 101
Desktop.Snapshot Toma una seccion de la pantalla y la salvaen el clipb oard como un mapa de bits. Desktop.Tile Reorganiza to das las ventanas no minimizadas de manera que no se sup erp ongan. 6.3.8 El ob jeto Net Meto dos Los siguientes meto dos son esp eccos para Windows. Net.CancelCon Cancela una conexion de red. Net.Dialog Visualiza una ventana de dialogo que p ermite congurar la red actualmente instalada. Net.GetCaps Devuelve un entero que informa sobre la red y sus capacidades, seg un el tip o requerido de informacion (que se pasa como parametro). Net.GetCon $ Devuelve el nombre del recurso de red aso ciado al disp ositivo lo cal que esta redireccionado. Net.User $ Devuelv e informacion sobre el usuario conectado a la red. 6.3.9 El ob jeto Viewport Meto dos Los siguientes meto dos son esp eccos para Windows. Viewport.Clear Limpia la ventana esp ecial abierta. Viewport.Close Cierra la ventana esp ecial abierta. Viewport.Open Abre una ventana esp ecial para mostrar informacion. Acepta como parametros el ttulo de la ventana, la p osicion y el tama ~no. En combinacion con la sentencia P r int , estas ventanas son apropiadas para la salida de informacion de depuracion. Esta ventana se cierra automaticamente cuando la aplicacion que la abrio termina. Solo se puede tener una ventana abierta cada vez. El tama ~no maximo del bu.er que tiene aso ciado es de 32K., por lo que la informacion al principio del mismo sera b orrada para hacer hueco cuando se intro duce nuevos datos p or el nal. Por ejemplo: Sub Main() Viewp ort.Op en ``Ventana esp ecial de BasicScript'',100,100,500,500 Print ``Esto se visualizaraenuna ventana esp ecial.'' Sleep 2000 Viewp ort.Close End Sub 102
6.4 Directivas de prepro cesador 6.4.1 La directiva #Const Dene una constante para ser utilizada en la otra directiva del prepro cesador #If...Then...#Else. Su sintaxis es: #Const constname = expr ession Internamente, to das estas constantes son de tip o V ar iant . Por lo tanto, la expresion puede ser de cualquier tip o. Por ejemplo: #Const SUBPLATFORM = ``NT'' #Const MANUFACTURER = ``Windows'' #Const TYPE = ``Workstation'' #Const PLATFORM = MANUFACTURER & `` '' & SUBPLATFORM & `` '' & TYPE Sub Main() #If PLATFORM = ``Windows NT Workstation'' Then MsgBox ``Ejecutandose ba jo Windows NT Workstation'' #End If End Sub 6.4.2 La directiva #If...Then...#Else Fuerza al compilador la inclusion o exclusion de secciones del codigo basandose en unas condiciones dadas. La sintaxis de esta directiva es: #If expr ession Then & statements ] &#ElseIf expr ession Then & statements ]] &#Else & statements ]] #End If La expresion representa cualquier expresion valida de BasicScript que evalue un tip o b o oleano. Puede consistir de literales, op eradores, constantes denidas con # Const o alguna de las constantes predenidas del prepro cesador (p or ejemplo, Win 32 es True si el entorno de desarrollo esta basado en Windows para 32{bits). Cualquier constante no denida evaluaraa E mpty . Por ejemplo: #Const VERSION = 2 Sub Main #If VERSION = 1 Then directory$ = `` n apps n widget'' #ElseIf VERSION = 2 Then directory$ = `` n apps n widget32'' 103
#Else MsgBox ``Version descono cida.'' #End If End Sub Una utilizacion habitual de esta directiva es la inclusion op cional de sentencias de depuracion en el codigo. El siguiente ejemplo muestra como se puede depurar el codigo si se incluye condicionalmente el chequeo de parametros a una funcion: #Const DEBUG = 1 Sub CambiarFormato(NuevoFormato As Integer, TextoEstado As String) #If DEBUG = 1 Then If NuevoFormato <> 1 And NuevoFormato <> 2Then MsgBox ``Parametro '' ``NuevoFormato'' `` es invalido.'' Exit Sub End If If Len(TextoEstado) > 78 Then MsgBox ``Parametro '' ``TextoEstado'' `` es demasiado largo.'' Exit Sub End If #End If Rem Cambiar el formato aqu... End Sub El siguiente ejemplo llama a una rutina externa. Estas llamadas son muy esp eccas de la plataforma, por lo que tendremos que escribir el codigo adecuado para cada una de ellas, pro duciendo un codigo multiplataforma: #If Win16 Then Declare Sub GetWindowsDirectory Lib ``KERNEL'' (ByVal DirName As String,ByVal MaxLen As Integer) #ElseIf Win32 Then Declare Sub GetWindowsDirectory Lib ``KERNEL32'' Alias ``GetWindowsDirectoryA'' (ByVal DirName As String,ByVal MaxLen As Long) #End If Sub Main() Dim NombreDir As String * 256 GetWindowsDirectory NombreDir,len(NombreDir) MsgBox ``El directorio de Windows es '' & NombreDir End Sub 104