Reporte de la Conferencia
DevEssentials 05.06.2004 - Sesión mañana
Por Amby
Russ Swall, Manager de Vision
Data Solutions, entidad organizadora de este evento DevEssentials, dio la
bienvenida , dedicando un saludo especial a los que han venido por primera
vez y especialmente a los que han venido del extranjero,
J
hay varios países representados, hasta hora sólo conozco que ha venido
gente de Canadá, Australia y España. Se vieron aspectos de logística, entre
ellos algunas sesiones extras que se van a ofrecer en las noches, sobre
frameworks y productos existentes en el mercado que permiten obtener
aplicaciones de alta calidad y ahorrando mucho tiempo. Son de pago.
El keynote muy temprano en la
mañana estuvo a cargo de Ken Levy.
VFP 9.0 Beta
por Ken Levy – Product Manager Visual Studio
Esta sesión se puede resumir con
ir a la ayuda de VFP 9.0 y ver las cosas nuevas que trae. Ken Levy pasó muy
por encima de algunos aspectos, sin apenas profundizar en nada, por el
escaso tiempo y el gran volumen de información.
Para este, y los siguientes temas
del día de hoy, se recomienda estudiar los ejemplos y las explicaciones que
están en el fichero VFP9RELNOTES disponible para libre descarga en
http://msdn.microsoft.com/
Mencionaré muy brevemente algunos
de los aspectos a los que se refirió, paso por alto deliberadamente los
aspectos relacionados con los informes, porque ya habrá tiempo para verlos
con calma.
Mostró las nuevas características para el tratamiento
de datos con SQL:
- más de 9 joins, múltiples niveles de subconsultas,
posibilidad de empleo de datos buffered
- Auto-refresh para datos remotos (genial para cuando
se utilizan claves idénticas en SQL Server y quiere tomar el valor
después de añadir un nuevo registro)
Nuevo tipo de índice binario (Binary) para DELETED()
Funciones, son muchas nuevas, entre ellas: ICASE() –
Evalúa el resultado en una lista de condiciones, si se quiere es una mezcla
entre el IF y el DO CASE, la idea es que se van poniendo separadas por
comas las condiciones y el resultado en caso de que se cumpla, al final
queda un OTHERWISE que indica el resultado en caso que no se cumplan
ninguna de las condiciones previas. CAST() - Convierte de un tipo de dato
a otro, esta función da para mucho, está documentada en la ayuda con las
posibilidades y requerimientos.
Nuevos tipos de datos: varchar, varbinary, y blob para
incrementar compatibilidad con SQL Server 2000 y Yukon (futura versión de
SQL Server). Ken dice que la base del trabajo con VFP son los datos y por
eso se le ha dedicado mucho esfuerzo a las mejoras con nuevos tipos de
datos y mayor enlace con SQL Server
Nuevo soporte jerárquico extendido XML para
interoperabilidad .Net (extended hierarchical XML
support for .NET interoperability)
- se incluye XML jerárquico aninados, esquemas XSD
extendidos y script XPath
Mejoras en la interfaz de usuario:
- para controles con imágenes,
espaciados y poli-puntos (PolyPoints) – Determina la posición de la imagen
con respecto al texto y los espacios entre imagen y texto.
- Fichas predeterminado – Recordemos que la versión
8.0 trajo mejoras significativas en las fichas
- Editor de propiedades custom
- Mayúsculas en propiedades. Ahora podremos crea una
propiedad PropiedadNueva y asignarle inmediatamente su valor por defecto,
desde el mismo cuadro de diálogo donde la creamos. Antes nos aparecía
propiedadnueva y para asignarle su valor predeterminado teníamos que ir a
la ventana propiedades y modificarlo allí.
- Posibilidad de anclar (Dock) ventanas de usuario – En VFP 8.0 hubo
mejoras en cuanto a este tema, en esta versión, además, permite anchar una
herramienta o barra de herramientas del Entorno de programación interactivo
(IDE) al escritorio de Visual FoxPro u otra ventana del IDE….. Ahora, es
posible anclar un formulario de usuario, o incluso permitir que sea el
mismo, empleando la propiedad Dockable. Además, las herramientas de
VFO surgidas en la versión 8.0
Task
Pane, ToolBox, así como el Class Browser, podrán ser también anclados
dentro del IDE de VFP.
- Posibilidad de anclar controles para formularios
redimensionables. – Esta posibilidad es a nivel de contenedor padre, es una
gran mejora que ata la posición y/o el tamaño del control al objeto
contenedor permitiendo facilidades para establecer los anclajes deseados en
un formulario.
- Posibilidad de Word-Wrap para textos en casillas de
verificación
- Enlazar un cuadro de lista a una colección.
- Rotar etiquetas
- Campos MEMO en la ventana examinar, sigue
apareciendo la palabra Memo; pero al posicionarte con el mouse, sin hacer
clic, se muestra una ventana con el contenido del memo, es más bien un
shape (cuadrado o rectangular) Esto está muy bien, la gente aplaudió. Ya no
hay que dar doble clic para entrar y enterarte del contenido del campo y
luego volver a salir.
- Autocompletar entradas en cuadros de texto. Es
decir, si tenemos un textbox, cada vez que entramos un valor este se va a
guardar en una tabla que permanece disponible (aunque no la vemos) para esa
sesión de trabajo, entonces, al volver al textbox podemos ver en un
combobox los valores que habíamos introducido antes y al empezar a escribir
se va a ir completando con esos valores.
- Nuevas propiedades para Line y Shape. Crear formas
poligonales y curvas Bezier mediante el empleo de arreglos de datos. De
esta forma se pueden crear gráficos como imágenes sin incrustar gráficos
(basado sólo en datos, gráficos de líneas, pastel y otros.
- Posibilidad de obtener los gráficos de ondas
devueltas por las funciones trigonométricas SIN() y COS()
- Shortcut keys para
botones de comandos con imágenes (sin título - caption). Esto es que si la
imagen contiene un texto es posible crear un shortcut para la imagen.
Nuevos favoritos y propiedades para configurar
IntelliSense
- en sentencias WITH/ENDWITH
- en campos memo con colores opcionales en tiempo de
diseño y de ejecución
Background Compiler – Es una característica nueva que
permite mostrar una representación visual de la línea actual, indicando si
es válida o no para en compilador de código fuente de VFP, antes de que el
código sea guardado y ejecutado.
Hay al menos una docena de mejoras que superan los
límites de VFP 8.0, como son: permitir arreglos de más de 65K de elementos,
más de 128 niveles de anidamiento de DO, tamaño de los códigos fuente en
PRG.
Recordemos que en la ayuda tenemos un resumen de las
posibilidades nuevas que ofrece VFP 9.0, contamos con las últimas cartas
de Ken Levy, que también resumen bastante, los archivos que han sido
liberados para descarga pública con bastante explicación y ejemplos.
¡Que levante la mano quien lo se ha bajado la beta
pública de VFP 9.0! ¿A que esperas?
Pues nuevamente nos dividimos en
sesiones, aquí no da tiempo a nada y la gente carga con su taza de café por
el pasillo y se la toma en lo que avanza la nueva sesión. Como dice el
refrán, “allá donde fueres harás lo que vieres”, así que me voy taza de
café en mano, para tener buen puesto para las fotos
J
Bases del Depurador de VFP (VFP
Debugging Essentials) - Rick Shummer -
Microsoft Most Valuable Professional (VFP), y Microsoft Certified
Professional.
El depurador de VFP, se hizo para todos, porque todos
cometemos errores escribiendo código. El uso del depurador puede ser muy
útil o muy frustrante, según si se utiliza de forma correcta y aprovechando
todas sus posibilidades, o si se hace a lo loco sin saber lo que estamos
haciendo. Se puede emplear de la forma tradicional con todas sus ventanas
dentro del contenedor de Depurador o tener las ventanas aisladas por el
escritorio de VFP. Se determina en la ficha Opciones – Depurador.
Rick Shummer nos mostró algunos trucos y técnicas que
podemos utilizar los desarrolladores para “sacarle el jugo” a esta poderosa
herramienta.
Nos enseñó, cómo desencadenar el depurador a través de
SUSPEND, SET STEP ON, DEBUG. En ocasiones entre un punto de ruptura y otro
pasamos por ejemplo, por un ciclo, y cuando lo estamos ejecutando desde el
depurador, es imposible que podamos ir notando los cambios de las variables
por la rapidez de la ejecución. Para ello desde el menú del Depurador vamos
al cuadro de diálogo de la opción Throttle, que nos permite
ralentizar un poco este proceso, sin necesidad de que tengamos que hacer un
nuevo punto de ruptura para ver cómo va cambiando el valor de la variable.
Vimos cómo configurarlo según las propias necesidades
(ventanas, menús, colores). Para utilizar el potencial oculto de las
ventanas Seguimiento (Trace), Resultados (Output), Pila de llamadas (Call
Stack), Inspección (Watch), y Locales (Locals), se deben mirar sus
propiedades, teniendo en cuenta que existen diferencias entre las
funciones de la ventana Local y Watch. Local muestra automáticamente las
variables de alcance local y desaparecen cuando pierden el alcance,
mientras en la ventana Watch van a estar todas las variables que deseamos
ver, independientemente del alcance, incluso se mantienen hasta que se
elimina por el usuario. Lo que si es muy útil es arrastrar desde la ventana
Local a la ventana Watch para dar seguimiento al contenido de la variable.
Con el depurador nos sorprenderemos más de una ver al ver como algunas
variables por error tienen alcance privado PRIVATE
Desde la ventana Seguimiento (Trace), clic derecho –
Fix – muestra la ventana de edición y podemos reparar en el momento
el error y continuar.
La forma de guardar y restaurar configuraciones en el
depurador, muy importante para ahorrar tiempo, y sobre todo para tener
definidas las variables que queremos verificar en un programa determinado.
Desde el Menú Archivo del Depurador Guardar configuración (Save
configuration) abre el cuadro de diálogo para el nombre a guardar, con
extensión predeterminada .dbg. Para recuperar esa configuración Menú
Archivo – Cargar configuración (Load Configuration)
Muchas veces necesitamos re-ejecutar un código y no
desde el inicio, solo algún momento anterior, ahorramos tiempo y
comprobamos como tras alguna corrección, los resultados son los esperados
para ello podemos re-recorrer un tramo del código desde algunas líneas más
atrás de donde estábamos, esto va muy vinculado a cómo corregir valores de
variables y propiedades en tiempo de ejecución.
El empleo del comando ASSERT enriquece el
depurador (ver en la ayuda)
Rastrear eventos (Track events) nos permite
entender las razones por las que se ejecutan algunos códigos y la
aplicación tenga comportamientos “raros” para el usuario.
Muy interesante resultó ver como Coverage Profiler
es mejor para buscar las momentos más lentos de la aplicación.
¿Y que trae la versión 9.0 en temas de Depuración?
Trae poco, muy poco…. Pero algo es algo
-
La ventana Watch aceptaba cualquier cosa que se escribiese e
intentaba evaluar la expresión.Ahora si ocurre un error se muestra en la
ventana Output del Depurador. Ej. Si escribimos This nos
aparecerá en mensaje This can only be used within a method.
-
Funciona correctamente el desplazamiento de la rueda del ratón por
la ventana Output, antes era un bug.
-
Depuración en informes. Con la aparición de los objetos
Report Builders y Report Listener es posible depurar.
El propio Rick Shummer reconoce no haber explorado a
fondo el VFP 9.0 en busca de nuevas posibilidades en este tema.
Ups, los dejo … me voy rapidito a otro local, no me da
tiempo a un café… paso de la depuración al diseño. He de reconocer que el
tema que viene a continuación hasta hace poco era desconocido para mí.
Espero que les resulte interesante.
Implementar Diseños de patrones en Visual FoxPro
(Implementing Design Patterns in Visual FoxPro) Andy Kramek (Microsoft
Most Valuable Professional cada año desde 1998 y Microsoft Certified
Professional en Visual FoxPro)
El Diseño de Patrones es un tema bastante antiguo ya;
pero por lo general es difícil encontrar buenos ejemplos de cuándo y cómo
utilizarlos. En esta sesión Andy Kramek nos comentó varios problemas
frecuentes en el desarrollo de aplicaciones, mientras nos ejemplificaba con
algunos tipos de patrones de diseño. Los ejemplos están escritos en Visual
FoxPro y nos dan idea de cómo implementarlos en nuestras aplicaciones.
Comenzó por darnos la definición que encuentra más
acertada sobre el diseño de patrones.
Un diseño de patrones nombra, abstrae e identifica
los aspectos claves de una estructura de diseño común que lo hace útil para
la creación de un diseño orientado a objetos reutilizable. El diseño de
patrones identifica la participación de clases e instancias, sus roles y
colaboraciones, y la distribución de responsabilidades.
Aquí les dejo un resumen de lo que Andy nos explicó de
varios patrones, no nos agobiemos con las definiciones, se ve mejor con los
ejemplos, los que se encuentran en PortalFox en … Mientras les detallo un
poquito el patrón de puente, por ser llamado también el patrón madre – base
del resto de patrones.
Patrón de puente - “Desacoplar una
abstracción de su implementación de tal forma que las dos puedan variar
independientemente”
Un puente tiene dos componentes esenciales, la
“abstracción”, que es el objeto responsable de inicializar una operación, y
la “implementación”, que es el objeto que la lleva a cabo.
Patrón de estrategia – “Define una familia
de algoritmos, encapsula cada uno, y los hace intercambiables. La
estrategia permite al algoritmo variar en dependencia del cliente que la
utilice”
Una estrategia tiene tres componentes esenciales: “la
estrategia abstracta”, que es una clase que define la interfaz, y
funcionalidad genérica para las “estrategias concretas”, que son subclases
que definen varias implementaciones posibles. El tercer componente, el
“Contexto”, es responsable de controlar la referencia a la implementación
actual.
Patrón de
cadena de responsabilidad –
“Evitar el
acoplamiento del emisor del requerimiento y el receptor, al obtener más de
un objeto con posibilidad de tratar el requerimiento. Es la cadena de
objetos que reciben y pasan la petición a lo largo de la cadena hasta que
un objeto los manipule.”
En una cadena de responsabilidades cada objeto sabe
cómo evaluar la petición para una acción y, si no la puede controlar por si
mismo, sabe solamente cómo pasarla a otro objeto, por ello la “cadena”.
Patrón Mediador – “Define un objeto que
encapsula cómo interactúan un conjunto de objetos. El mediador estimula la
pérdida de acoplamiento ocultando las referencias explicitas entre los
objetos permitiendo variar su interacción de forma independientemente.”
La idea básica es, que cada objeto se comunica con un “mediador” central,
el que conoce de todos los objetos que están al alcance actual, y cómo
manipular su estado cuando un evento dado es reportado.
Patrón Decorador “Adjuntar responsabilidad
adicional a un objeto dinámicamente”.
Un decorador, tiene dos requerimientos esenciales.
Primero, necesitamos la clase implementación que define la interfaz y el
núcleo de funcionalidad. Segundo, necesitamos un decorador que reproduce la
interfaz de implementación, y guarda una referencia a el. El objeto cliente
ahora dirige las llamadas que puede ir directamente a la implementación, en
su lugar, del objeto decorador.
Patrón adaptador - Convertir la interfaz de
una clase en otra interfaz de cliente esperada.
La necesidad de un adaptador generalmente resulta a
partir de las modificaciones o mejoramientos de las bibliotecas de clases o
componentes COM.
La alternativa es crear una clase nueva la cual
replica la interfaz esperada y traduce las llamadas a la interfaz en el
formato correcto para reemplazarlo. Al tratar con componentes en los cuales
el código no está disponible, es el único método de tratar con los cambios
en su interfaz.
Patrón Wrappers – No aparece una definición tan
clara como en los otros casos, Andy nos dice que es como un sinónimo para
el patrón Adaptador y Decorador.
La tabla resume las diferencias que hay entre el
desempeño de Wrappers, Decoradores y Adaptadores.
|
Patrón |
Objetivo |
|
Decorador |
Modifica el comportamiento, sin modificar una
interfaz existente.
|
|
Adaptador |
Modifica la interfaz sin modificar el
comportamiento. |
|
Wrapper |
Proporciona la interfaz para, y sirve para,
comportamiento que se define en cualquier otro lado.
|
Andy Kramek nos deja todas las explicaciones y
ejemplos en un artículo que aparece originalmente en -- Design Patterns in
Visual FoxPro -
http://www.tightlinecomputers.com/Documents/des_Patterns.zip ,
este artículo ha sido traducido para
www.PortalFox.com y se encuentra en
http://www.portalfox.com/article.php?sid=1083
Por ahora… los dejo, los temas de la tarde fueron muy
importantes y se los cuento mañana, que si no duermo algo no me enteraré de
nada.
Espero les haya resultado de utilidad.
Saludos,
Ana
www.amby.net |