Documente Academic
Documente Profesional
Documente Cultură
Visin General
Las preguntas ms frecuentes sobre la programacin orientada a objetos con LabVIEW.
Contenido
1. Ventajas del uso de LabVIEW en la programacin orientada a objetos
2. Cmo utilizar la programacin orientada a objetos de LabVIEW
3. La programacin orientada a objetos de LabVIEW y las herramientas GOOP Toolkit
4. Detalles tcnicos
5. Recursos adicionales
La forma ms sencilla de empezar consiste en convertir las definiciones de tipo existentes a clases de LabVIEW. Se puede hacer esto haciendo clic con el botn derecho en un typedef de la
1/3
www.ni.com
La forma ms sencilla de empezar consiste en convertir las definiciones de tipo existentes a clases de LabVIEW. Se puede hacer esto haciendo clic con el botn derecho en un typedef de la
ventana Project Explorer y seleccionando Convert Contents to Class en el men contextual. Consulte la ayuda de LabVIEW para obtener ms informacin sobre cmo crear las clases de
LabVIEW.
Nota: LabVIEW no conserva el valor predeterminado de los controles y constantes durante el proceso de conversin. Para acceder a los detalles de las definiciones de tipos, hay que agregar VIs
a esas clases que necesitan acceder a la definicin de tipo. Esta agrupacin de VIs basada en los datos sobre los que actan es fundamental para la programacin orientada a objetos. Consulte
las dos presentaciones NI Week 2006 que figuran a continuacin en la seccin recursos adicionales ( Additional Resources) para obtener ms informacin acerca del diseo orientado a objetos.
3. Cmo realizar una implementacin "por referencia" en la programacin orientada a objetos de LabVIEW?
Consulte el ejemplo de Reference Object que se incluye en LabVIEW 8.2 y las versiones posteriores.
labview\examples\lvoop\ReferenceObject\ReferenceObject.lvproj
En esencia, se hace que los datos privados de una clase sean una referencia. El ejemplo muestra cmo utilizar una referencia de cola de un solo elemento para este propsito. Tambin se puede
utilizar el kit de herramientas GOOP Toolkit (consulte la seccin de abajo titulada LabVIEW Object-Oriented Programming & GOOP Toolkit ).
4. Haga que las clases de LabVIEW trabajen con LabVIEW Real-Time o con cualquier otro blanco que no sea de sobremesa?
Con LabVIEW 2009, la orientacin a objetos es ahora compatible con los blancos en tiempo real de LabVIEW. La programacin orientada a objetos no se admite en tiempo real con LabVIEW 8.6
y las versiones anteriores.
5. Al cerrar un VI, por qu a veces LabVIEW abre dos cuadros de dilogo de Guardar Cambios (Save Changes), una para el VI y subVIs y otra para clases de LabVIEW? Por qu
no abrir un cuadro de dilogo que guarde todo?
Cuando se cierra un VI, LabVIEW conoce todos los subVIs que sern utilizados como resultado del cierre de ese VI, por lo que LabVIEW puede pedir que se guarden todos a la vez. Sin
embargo, las clases, no pueden abandonar la memoria hasta que todas las instancias de datos hayan abandonado la memoria y LabVIEW no pueden saber si al cerrar cualquier VI se cierra
realmente la ltima instancia de datos. Un VI podra no tener ninguna referencia a la clase en su cdigo, pero todava podra tener una instancia de la clase almacenada en una variante en algn
lugar. Si todos los VIs estaban inactivos, LabVIEW puede determinar cuntas instancias de la clase se abandonarn con este conjunto de VIs y ver si esas cuentas permanecen en la memoria
para todas las instancias de la clase. Entonces LabVIEW sabra que la clase est abandonando la memoria con los VIs y podra preguntar sobre la clase en el mismo cuadro de dilogo de
Guardar Cambios como las otras libreras/VIs. Pero si algn VI sigue en funcionamiento, el nmero de instancias puede estar en constante fluctuacin. Y mientras los VIs se estn ejecutando,
los datos pueden estar escondidos en lugares de bsqueda imposible, como una cola o notificador, y estos espacios extra slo quedan a disposicin cuando el VI entra en inactividad. Un VI en
ejecucin puede crear tambin nuevas instancias en lugares que LabVIEW ya ha comprobado. Por lo tanto, es imposible contar las instancias mientras se estn ejecutando los VIs. Puesto que
LabVIEW no aborta los VIs en ejecucin hasta despus de preguntar si se desea guardar los cambios, LabVIEW no puede saber an si la clase abandonar la memoria. Incluso si todas los VIs
estuviesen inactivas y LabVIEW pudiese hacer la bsqueda de datos, la bsqueda sera muy lenta, as que LabVIEW no lo intenta en absoluto. Por lo tanto, cuando se cierra un VI, las clases
terminan con frecuencia obteniendo su propio cuadro de dilogo Guardar cambios.
La nica vez que LabVIEW puede unir las clases con todo lo dems y ofrecer un nico cuadro de dilogo Guardar cambios es cuando se est cerrando el proyecto. En ese caso, puesto que se
cerrar cada VI del proyecto, LabVIEW sabe que eso significa que todas las instancias de datos de la clase sern eliminadas sin tenerlas en cuenta.
4. Detalles tcnicos
1. Cul es el impacto en el rendimiento del uso de una clase de LabVIEW en comparacin con un grupo typedef?
La comparativa de las prestaciones en varios ordenadores muestra que el rendimiento entre estas dos es casi idntico. Consulte la pregunta de abajo para obtener ms informacin sobre el
rendimiento.
2. Cul es la sobrecarga del rendimiento de una llamada dinmica subVI (frente a una llamada subVI normal)?
Un subVI de comunicacin dinmica tiene una pequea sobrecarga cuando LabVIEW busca cual es el subVI a invocar. La sobrecarga es constante. No aumenta a medida que se agregan ms
clases o cuando se agregan ms VIs dinmicos a una clase. Puede haber un impacto en el rendimiento si la llamada a la subVI tiene que hacer copias adicionales de los parmetros para que
coincida con la funcionalidad de la actual subVI que invoca LabVIEW. Esto se puede evitar mediante el cableado de los terminales del panel frontal de entrada a los terminales del panel frontal de
salida, incluso en VIs dinmicas a las que no se esperara llamar (por ejemplo, los VIs padres que slo existen para definir el panel conector para que los hijos hagan caso omiso). Consulte el
documento LabVIEW Object-Oriented Programming: the Decisions Behind the Design para obtener los detalles sobre cmo la comunicacin dinmica es capaz de lograr un rendimiento constante
por encima de lo normal.
3. De qu manera las libreras de clases de LabVIEW difieren de las libreras del proyecto?
Una clase de LabVIEW es un tipo de librera de proyectos. Se trata de una librera de proyecto dedicada a la tarea de definir un tipo de datos. Al igual que una librera de proyectos, la clase de
LabVIEW define el alcance y espacio de nombres para sus VIs miembros y un VI puede ser propiedad de una y slo una clase de LabVIEW.
La clase de LabVIEW tiene un control de datos privados. Este es un VI de control que define los valores de los datos de la clase. Este control especial no es parte de otros tipos de libreras y se
graba en el interior del archivo de clase. Las clases de LabVIEW tienen todas las propiedades que tienen las libreras y algunas propiedades adicionales. Se pueden ver las propiedades
adicionales en el cuadro de dilogo Class Properties en las pginas de Inheritance, Probes y Wire Appearance.
La nica capacidad que las libreras de proyectos tienen es que clases de LabVIEW no tienen la capacidad de contener sub-libreras.
2/3
www.ni.com
La nica capacidad que las libreras de proyectos tienen es que clases de LabVIEW no tienen la capacidad de contener sub-libreras.
4. Al utilizar la programacin orientada a objetos de LabVIEW, Qu es lo que se carga y cuando?
Si un VI utiliza una clase de LabVIEW, entonces al realizar la carga se cargan los VIs de la clase, al igual que un VI carga todos sus subVIs. Una clase de LabVIEW carga a su vez la totalidad de
sus VIs miembros y su clase padre. Las clases padre no activan automticamente la carga de sus clases hijas. Los padres no tienen ningn vnculo con los hijos. Una VI de un miembro de un
padre puede utilizar una clase de hijos y por lo tanto LabVIEW carga la clase hija.
5. Qu significa "por valor" y por referencia? Cules son los pros y los contras de cada uno?
"Por valor" significa que la lnea de conexin transporta los datos reales del tipo de la lnea de conexin. "Por referencia" significa que la lnea de conexin transporta una referencia a los datos
del tipo y LabVIEW almacena los datos reales en algn repositorio central. La mayora de los tipos de datos de LabVIEW, incluyendo los numricos, arrays, clusters, cadenas, booleanos y
directorios son por valor. Tpicamente, los nicos tipos que son por referencia son los que utilizan las comunicaciones o reflejan los recursos del sistema, tales como nmeros de referencia
(refnums) de ficheros, nmeros de referencia de colas y nmeros de referencia de servidores de VIs. Las clases de LabVIEW son por valor. En la sintaxis por valor, cada objeto tiene sus
propios valores de datos, los cuales se pueden modificar de forma independiente de otros objetos. En la sintaxis por referencia, hay una sola instancia de datos a la que se refieren varios
objetos. Si un objeto modifica los datos, hay que ser cuidadoso para que no entren en conflicto con otros objetos que estn leyendo y escribiendo los datos. Los principales pros y contras son:
Por valor es mejor en un ambiente altamente paralelo, tal como LabVIEW, ya que evita las condiciones de carrera.
Por valor permite que el compilador determine cuando necesitan hacerse las copias de los datos, lo cual disminuye la carga del programador.
Por referencia da la responsabilidad al programador sobre la asignacin, que a veces es un mejor modelo para los recursos de instancia nica y los conjuntos de datos de gran tamao.
6. Por qu es la programacin orientada a objetos de LabVIEW "por valor?"
Consulte el artculo titulado LabVIEW Object-Oriented Programming: the Decisions Behind the Design .
7. Dispone National Instruments de herramientas UML para crear/administrar clases de LabVIEW?
NI no tiene una herramienta nativa de UML. Endevo dispone de una herramienta para generar clases desde diagramas UML y generar diagramas UML desde el cdigo. La herramienta trabaja
actualmente para las clases GOOP (consulte la seccin de ms arriba titulada La programacin orientada a objetos de LabVIEW y las herramientas GOOP Toolkit), pero la prxima versin
soportar tambin clases de LabVIEW.
8. Por qu no puedo usar "Make Current Value Default" en los controles e indicadores de clase de LabVIEW? Por qu no puedo establecer los valores de las constantes de la
programacin orientada a objetos de LabVIEW?
Make Current Value Default es una caracterstica valiosa de LabVIEW. Se puede utilizar con frecuencia para crear VIs de prueba. Esta funcin no est disponible para las clases de LabVIEW
en LabVIEW 8.2 y posteriores versiones debido a la complejidad de proporcionar una buena interfaz de usuario de manera que el usuario sepa cuando los datos son distintos de los
predeterminados por defecto, a pesar de que el usuario no puede ver realmente los datos, ya que son privados. Esta caracterstica es de alta prioridad y va a ser incluida en una futura versin de
LabVIEW.
9.Porqu no se puede crear un VI dinmico reentrante?
Los VIs dinmicos reentrantes no son caractersticas compatibles en LabVIEW 8.2. Puesto que los nodos dinmicos de las subVIs en el tiempo de edicin no saben qu subVIs va a invocar
realmente LabVIEW en el momento de ejecucin, cada nodo tendra que crear clones de todos los subVIs posibles. Esto resulta ser prohibitivamente costoso en trminos de memoria.
1. (LabVIEW 8.5) Se pueden utilizar VIs dinmioas reentrantes en LabVIEW 8.5.
Se puede configurar un VI de comunicacin dinmica para que sea recursivo o utilizarlo como parte de su propia definicin. Los VIs recursivos pueden llamarse a si mismos en su propio
diagrama de bloques, incluyendo el diagrama de bloques de los subVIs. La recursividad es til si se desea operar muchas veces en la salida del mismo proceso. Se puede configurar el VI de
un miembro de comunicacin dinmica para permitir la recursividad ajustndola para ser reentrada y compartir clones entre instancias.
Complete los siguientes pasos para configurar un VI para que funcione en recursividad.
1.
2.
Nota- El no tener en cuenta la posibilidad de repeticin infinita hace que se utilice la memoria de forma innecesaria y LabVIEW puede llegar a bloquearse. Para evitar la repeticin infinita,
considere la posibilidad de llamar al VI recursivo dentro de una estructura (Case structure).
5. Recursos adicionales
1. LabVIEW Object-Oriented Programming: the Decisions Behind the Design .
2. Documento web de la Comunidad: Moving Common OO Design Patterns From Other Languages Into LabVIEW
Este documento describe varios patrones de diseo de otros lenguajes de programacin y cmo implementar esos patrones en LabVIEW. Los patrones pueden ayudar a identificar qu clases
son necesarias crear para resolver un problema de programacin en particular y hacer que las interacciones entre las clases sea ms eficiente. Este documento est destinado a cambiar con el
tiempo a medida que se identifican las tcnicas mejoradas de programacin.
3. Presentacin en video de una hora para comenzar a utilizar LVOOP: Object Oriented Programming in LabVIEW
Este video es una presentacin de una hora por Trevor Christman acerca de los fundamentos de la programacin orientada a objetos y cmo se puede acceder a esos fundamentos en LabVIEW.
Un gran recurso para aquellos que prefieren el video para el aprendizaje de texto.
4. Simplificacin del hardware con clases LV: How to Mitigate Hardware Obsolescence in Next-Generation Test Systems (libro blanco) - Mitigating Obsolescence with Hardware Abstraction Layers
(webcast)
5. Object Oriented Design Patterns Technical Manual and Exercises - Esta es la documentacin y soporte de VIs para una exploracin guiada de tipo prctico y desarrollada al propio ritmo de
algunos patrones de diseo de grado medio con clases de LabVIEW. Est dirigido a estudiantes con un nivel de comprensin de los conceptos bsicos de las clases de LabVIEW y que desea
ver cmo utilizar estas clases en un contexto ms amplio de aplicacin. Esta sesin prctica fue presentada por primera vez en NI Week 2011. Los VIs fueron guardados por la versin 2011 de
LV; hay disponibles VIs para la versin de 2010 - Busque en la seccin de comentarios de la pgina web de "2010".
3/3
www.ni.com