You are on page 1of 3

1/3 www.ni.

com
1.
2.
3.
4.
5.
Las preguntas ms frecuentes sobre la programacin orientada a objetos con LabVIEW
Fecha de Publicacin: ene 22, 2014
Visin General
Las preguntas ms frecuentes sobre la programacin orientada a objetos con LabVIEW.
Contenido
Ventajas del uso de LabVIEW en la programacin orientada a objetos
Cmo utilizar la programacin orientada a objetos de LabVIEW
La programacin orientada a objetos de LabVIEW y las herramientas GOOP Toolkit
Detalles tcnicos
Recursos adicionales
1. Ventajas del uso de LabVIEW en la programacin orientada a objetos
1. Qu es en general la programacin orientada a objetos (POO) y por qu se utiliza?
La programacin orientada a objetos ha demostrado su superioridad sobre la programacin de procedimiento como arquitectura opcional en varios lenguajes de programacin. Fomenta
interfaces ms limpias entre secciones del cdigo, facilita la depuracin y se escala mejor en el caso de grandes equipos humanos de programacin.
De : wikipedia
La idea que hay detrs de la programacin orientada a objetos es que un programa de ordenador puede ser visto como una coleccin de unidades individuales u objetos que actan sobre los
otros, en oposicin a una visin tradicional en la cual un programa puede verse como una coleccin de funciones o simplemente como una lista de instrucciones al ordenador. Cada objeto es
capaz de recibir mensajes, procesar datos y enviar mensajes a otros objetos. Cada objeto puede ser visto como una pequea mquina o actor independiente con un papel o responsabilidad
distinta.
Se requiere la programacin orientada a objetos para promover una mayor flexibilidad y capacidad de mantenimiento en la programacin y es muy popular en la ingeniera de software a gran
escala. Por otra parte, los defensores de OOP reclaman que es ms fcil de aprender por parte de los novatos en la programacin de ordenadores que los mtodos anteriores y que el mtodo de
programacin orientada a objetos es a menudo ms fcil de desarrollar y de mantener, prestndose a un anlisis, codificacin y comprensin ms directos de situaciones complejas y
procedimientos que otros mtodos de programacin.
2. Cules son las diferencias entre la programacin orientada a objetos en C++ y LabVIEW?
C++ es un lenguaje funcional basado en texto. LabVIEW es un lenguaje grfico de flujo de datos. Los diferentes paradigmas requieren diferencias sobre cmo se presentan las caractersticas
OO:
LabVIEW tiene una reciente clase precursora para todos los objetos que C++ no tena.
C++ tiene constructores. LabVIEW no tiene necesidad de ellos.
C++ tiene destructores. LabVIEW no tiene necesidad de ellos.
C++ tiene tanto una sintaxis de referencia como de valores para pasar objetos a parmetros. LabVIEW tiene slo una sintaxis de valores con referencias creadas a travs de otras
caractersticas.
LabVIEW dispone de una mutacin automtica de datos para que el usuario pueda recuperar los datos antiguos, incluso si la clase ha sido editada. C++ no, requiere que el usuario haga un
seguimiento de los cambios de versin y escriba cdigo de mutacin para los datos.
C++ tiene plantillas. LabVIEW 8.2 y las versiones posteriores no.
C++ tiene funciones virtuales puras. LabVIEW 8.2 y las versiones posteriores no.
C++ tiene una herencia mltiple. LabVIEW no.
Para ampliar la explicacin sobre estas diferencias, consulte el artculo, , LabVIEW Object-Oriented Programming: the Decisions Behind the Design.
3. Cules son las principales ventajas de la programacin orientada a objetos de LabVIEW?
A. Cul es la ventaja para un nuevo usuario de LabVIEW?
1. La fortaleza de LabVIEW es que hace que la potencia de la informtica sea accesible a los no programadores. La programacin orientada a objetos de LabVIEW incorpora algunas de las
tcnicas de programacin ms avanzadas para la comprensin por parte de los usuarios principiantes. OO requiere ms de un compromiso con la planificacin, por lo que se suele elegir slo si
el usuario se ha embarcado en gran esfuerzo de software.
2. OO proporciona una forma de planificacin del software usando trminos que coinciden con la especificacin de las caractersticas. La descripcin de la funcin habla sobre los elementos que
aparecen en la pantalla o partes de los datos que la funcin va a manipular. Con OO, se puede escribir el cdigo que se planea en torno a esos mismos trminos: objetos de base de datos,
objetos de botn, objetos de correo electrnico.
B. Cul es el la ventaja para un programador G experimentado que no practica la programacin orientada a objetos?
1. Ms fcil de depurar- La existencia de ms cdigo modular permite limitar la lista de VIs donde podra aparecer un error.
2. Ms fcil de mantener - El diseo de OO conduce a una mayor estructura, que ayuda a los desarrolladores a ser ms productivos con el tiempo. Los desarrolladores pueden identificar
fcilmente las reas en las que quieren aadir funciones y son menos propensos a producir errores en secciones no relacionadas del cdigo.
4. Quin debera utilizar la programacin orientada a objetos de LabVIEW?
Aquellos que deben dar mantenimiento a VIs durante largo tiempo
Grandes aplicaciones
Mltiples desarrolladores que trabajan sobre los mismos VIs
5. Quin no debera usar la programacin orientada a objetos LabVIEW?
Los usuarios de accin rpida
En el caso de VIs nicos dedicados a la toma de medidas rpidas, resulta exagerado utilizar este tipo de programacin.
6. Cules seran algunos ejemplos de cmo/dnde un cliente utilizara la programacin orientada a objetos de LabVIEW?
Como ejemplo de prueba y medida donde se vea el contraste entre el mtodo basado en tareas y el mtodo orientado a objetos, consulte el ejemplo que se incluye en la versin de Board Testing
LabVIEW 8.2 y posteriores.
labview\examples\lvoop\BoardTesting\Board Testing.lvproj
2. Cmo utilizar la programacin orientada a objetos de LabVIEW
1. Dnde puedo obtener ms informacin sobre el uso de la programacin orientada a objetos de LabVIEW? Por ejemplo, hay material de formacin, notas de aplicaciones,
tutoriales, demostraciones y ejemplos?
LabVIEW 8.2 y sus posteriores versiones disponen de varios ejemplos de programacin orientada a objetos con LabVIEW. Consulte tambin la seccin de recursos adicionales de este
documento.
2. Cmo puedo hacer la transicin para utilizar la programacin orientada a objetos de LabVIEW en mis proyectos actuales?
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
2/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 y seleccionando en el men contextual. Consulte la ayuda de LabVIEW para obtener ms informacin sobre cmo crear las clases de Project Explorer Convert Contents to Class
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 ( ) para obtener ms informacin acerca del diseo orientado a objetos. Additional Resources
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 (consulte la seccin de abajo titulada ). GOOP Toolkit 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.
3. La programacin orientada a objetos de LabVIEW y las herramientas GOOP Toolkit
1. Qu es el Kit de herramientas GOOP Toolkit?
Se puede encontrar una descarga gratuita del GOOP Toolkit 1.0 en el sitio web de . Se pueden adquirir versiones posteriores del toolkit de . National Instruments Endevo
2. Se puede seguir utilizando GOOP en LabVIEW 8.2 y versiones posteriores?
S.
3. Cmo pueden GOOP y la programacin orientada a objetos de LabVIEW trabajar juntos? Cmo y cundo se debe utilizar el toolkit de GOOP Endevo en conjunto con o en lugar
de programacin orientada a objetos de LabVIEW?
La mayora de los usuarios encontrarn que las clases de LabVIEW funcionan mejor para sus aplicaciones. Las clases de LabVIEW se comportan igual que los grupos con los que los usuarios
estn familiarizados.
Se pueden utilizar referencias para controlar la comunicacin entre las secciones de cdigo que se ejecutan en paralelo. Para los clientes que realmente estn modelando los recursos del
sistema, el modelo de referencia es muy til y podra crear clases GOOP. Las referencias son tambin valiosas en la creacin de estructuras grficas y de rboles de datos. Incluso en estos
casos, los campos de los datos en el ncleo de la clase GOOP pueden ser bien clases de LabVIEW. Sin embargo, al usar referencias o cualquier otro medio de comunicacin entre las secciones
de cdigo paralelo, se necesitan conocer las condiciones de carrera y bloqueo y otras complejidades que se presenten.
Se puede utilizar el modelo de referencia para garantizar que nunca se duplicar esa clase en la memoria. Para una clase que requiere una gran cantidad de memoria, esto puede ser una
ventaja.
4. En el caso de que la transicin de mi aplicacin que utiliza el GOOP Toolkit a la programacin orientada a objetos de LabVIEW? Qu aplicaciones de los clientes existentes que
usan GOOP Toolkit de Endevo tendra sentido implementar en la programacin orientada a objetos de LabVIEW?
No hay ningn requisito para reescribir las clases existentes de GOOP como clases de LabVIEW. Una de las razones es que nunca se debe destruir el cdigo de trabajo sin una razn de peso y
las clases de GOOP seguirn trabajando en LabVIEW 8.2 y ms all. Despus de todo, el kit de herramientas GOOP est escrito en LabVIEW. Adems, el cambio de un cdigo que funciona por
referencia por otro que funciona por valor es un proyecto importante.
Una de las razones para la transicin es el rendimiento. Se genera mucha sobrecarga para un objeto cuando cada llamada de funcin tiene que buscar la referencia, bloquear la instancia y
extraer los datos. El toolkit de GOOP hace un trabajo increble para minimizar esta sobrecarga, pero sin embargo est ah. Adems, la operativa mediante una referencia numrica evita muchas
de las operaciones que de otra manera podran proceder en paralelo. Si se tiene una clase que no necesita el comportamiento por referencia y se necesita un mejor rendimiento, se podra
entonces considerar la transicin de la clase GOOP a la clase de LabVIEW.
5. Cmo realizo la transicin de mi aplicacin que utiliza GOOP a la programacin orientada a objetos de LabVIEW?
Esta es una pregunta que se debe responder segn el caso particular que se trate. LabVIEW no tiene ninguna forma automtica de hacer la conversin.
6. Cul es el rendimiento de programacin orientada a objetos de LabVIEW frente a GOOP Toolkit de Endevo?
Debido a la compatibilidad con el flujo de datos y la implementacin del compilador nativo de envo dinmico, las clases de LabVIEW tienden a superar a las de GOOP en situaciones
equivalentes. Dicho esto, hay muy pocas situaciones equivalentes. Las clases de LabVIEW estn diseadas para reemplazar las agrupaciones y para mejorar el flujo de datos. Las clases de
GOOP son una manera de agregar referencias a LabVIEW. Ellas sirven para dos propsitos diferentes en el lenguaje. Al crear nuevas clases, se debe tomar la decisin entre una clase GOOP o
una clase de LabVIEW en base a la funcionalidad de las necesidades de la clase, no en base a las predicciones de rendimiento.
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 para obtener los detalles sobre cmo la comunicacin dinmica es capaz de lograr un rendimiento constante LabVIEW Object-Oriented Programming: the Decisions Behind the Design
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 en las pginas de , y . Class Properties Inheritance Probes Wire Appearance
La nica capacidad que las libreras de proyectos tienen es que clases de LabVIEW no tienen la capacidad de contener sub-libreras.
3/3 www.ni.com
1.
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 y generar diagramas UML desde el cdigo. La herramienta trabaja una herramienta para generar clases desde diagramas UML
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.
(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. Abra o cree el VI de un miembro de comunicacin dinmica.
2. Haga que la VI sea reentrante.
1. Seleccione para abrir el cuadro de dilogo . FileVI Properties VI Properties
2. Seleccione desde el men desplegable para mostrar la pgina de . Execution Category Execution Properties
3. Coloque una marca en la casilla de verificacin de y seleccione . Reentrant execution Share clones between instances
3. Desarrolle el VI del miembro para completar una operacin recursiva.

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: (libro blanco) - How to Mitigate Hardware Obsolescence in Next-Generation Test Systems Mitigating Obsolescence with Hardware Abstraction Layers
(webcast)
5. - Esta es la documentacin y soporte de VIs para una exploracin guiada de tipo prctico y desarrollada al propio ritmo de Object Oriented Design Patterns Technical Manual and Exercises
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".

You might also like