Sei sulla pagina 1di 29

Come e perch usare la programmazione orientata agli oggetti in LabVIEW

Cioffi Giuseppe Application Engineer

Esempi di Software Engineering Debt


No source code control (o Project) Stop non testato regolarmente Aspettare la fine di un progetto per creare unapplicazione Poche specifiche, documentazione e requisiti No code review Mancanza di pianificazione (SMoRES) No test plans Error handling povero Style non consistente Accoppiamento stretto e poca coesione

Designing for SMoRES


Criteri per unapplicazione software ben fatta: Scalable: Quanto semplice N + 1? Modular: lapplicazione costituita da componenti definiti che funzionano in stand-alone? Reusable: il codice propriamente scollegato dallapplicazione attuale e quindi pu essere usato facilmente allinterno di un altro progetto? Extensible: quanto semplice aggiungere nuove funzionalit? Simple: quanto la soluzione semplice e riesce a soddisfare requisiti e specifiche?

Perch usare la programmazione orientata agli oggetti in LabVIEW?


Incapsulare e proteggere I dati Riconoscere errori in tempo di compilazione anzich in run-time Estendere facilmente le funzionalit Eliminare cluster di dati molto pesanti Implementare dei design pattern Mappare il mondo reale rispetto al software

Object-Oriented Programming
Classe: Una collezione di dati e metodi che interagiscono con I dati. Oggetto: Una specifica istanza della classe

Cosa una classe in LabVIEW?


Classe: Una collezione di dati e metodi che interagiscono con I dati.

LabVIEW Class Un cluster Uno user-defined data type Un tipo di Project Library

Anatomia di una LabVIEW Class


Ogni LabVIEW Class consiste di: Data control privato (cluster) VI membri che accedono ai dati Class file (.lvclass) immagazzina le informazioni sulla classe Definizione di un controllo privato Lista di VI membri Propriet dei VI membri Propriet della classe stessa (es. Wire appearance)

Cosa lereditariet?

Vehicle Class
(Parent)

Metodi di esempio: Initialize Capacit

Car Class
(Child)
Un auto un tipo di veicolo

Truck Class
(Child)
Un camion un tipo di veicolo

Ereditariet: esempio Antenati

Vehicle Class

Car Class

Truck Class

Discendenti

Chevy Model

2007 Model

2008 Model

Static vs. Dynamic Dispatching


Static method Definito da un singolo VI nella classe antenato Dynamic method Definito da pi VI con stesso nome attraverso la gerarchia delle classi Defined by multiple VIs with the same name throughout the class hierarchy Genitori definiscono un interfaccia per il metodo Figli devono usare linterfaccia definita Le classi figlio fanno un override dei metodi definiti dai parenti Il valore dei wire a run-time determina quale VI chiamare

Understanding Dynamic Dispatch

610 2

Vehicle.lvclass GetCargoCapacity.vi

Truck.lvclass GetCargoCapacity.vi

Car.lvclass GetCargoCapacity.vi

State Machine versus Command Pattern

State Machine versus Command Pattern

Dynamic Dispatch
Conosciuto anche come Command Pattern oChain of Command Pattern
UI Command sendCommand() execute()

Initialize execute() + WriteUIParameters + ReadUIParameters

LoadPanel execute() displayPlugin() + WriteVIReference + ReadVIReference

SlidePanel execute() move()

Populate Menu execute() displayPlugin() + WriteButtonNames + ReadButtonNames

Usare il Dynamic Dispatching per determinare in run time quale versione di metodo viene lanciato in esecuzione

Dynamic Dispatching Commands

Dynamic Dispatching Commands

Design Patterns: introduzione


Design Pattern: uno standard mode per organizzare il proprio codice Quando si scrive un codice consigliabile prima fare un check sulle possibili soluzioni gi possibili dalle quali partire Usare quindi I design pattern come punto di inizio per lo sviluppo dellintera architettura del codice.

Design Patterns
DesignPattern AggregationPattern Usage Sviluppatoperiltrattamentodiunavastagammadioggetti comeununicooggettoedefinireilcomportamentospecialeper quelparticolaretipodiarray. Sviluppatoperfornireunmodoperinizializzareilvaloresuun filogenitoreconidatiprovenientidamolteclassifigliediverse inbaseaqualchevalorediinput,adesempiounenumostringa diinput. Sviluppatopergarantirepreprocessing/postprocessingcirca alcunefunzionalitdinamicacentrale. Sviluppareunsingolooggettocomeunalberodipiccoleistanze diquelloggettodellostessotipo Svilupparedueclassiindipendentichecondividonole funzionalitcomunisenzametterelafunzionalitinunaclasse genitorecomune

FactoryPattern

ChannelingPattern HierarchyComposition Pattern DelegationPattern

Classi in LabVIEW: Dimostrazione

Caso di studio: Hardware Abstraction Layers (HALs)


Separare lapplicazione di test dallo strumento hardware Indirizzare problematiche di life cycle mismatches Il lifecicle del DUT pu eccedere la vita del codice Cambiare il test framework pu essere: Costoso Resource-intensive Time consuming

Hardware Abstraction Layer (HAL)

Traditional Benchtop

Modular PXI

Simulated (software only)

HAL Architecture

HAL Sound Player Demo Project

ParentDSSPClass ChildDSSPClass ChildDSSPClass ASLCode

Operating System e Target Support

Windows Macintosh Linux

RealTime Mobile/TouchPanel FPGA

LabVIEW Classes On Real-Time


Piene funzionalit su di un LabVIEW desktop Pu essere deterministico, anche con dynamic dispatch Alloca jitter alla prima iterazione del loop RT Altro jitter non presente se ogni iterazione usa stesse classi figlio

Notdeterministic

Deterministic

LabVIEW Classes On FPGA


Supporta incapsulamento ed ereditariet No array eterogenei Tutti i dynamic dispatching must devono essere determinabili al compile time Non c un controllo suelle classi a livello di VI front panel Un code generation efficiente

Come e perch usare la programmazione orientata agli oggetti in LabVIEW


Cioffi Giuseppe Application Engineer