france.ni.com démystifier la mise en œuvre de la programmation orientée objet sous labview...
TRANSCRIPT
france.ni.com
Démystifier la mise en œuvre de la programmation orientée objet sous
LabVIEW
Mathilde VINCENT - Olivier JOURDANParis - le 7/2/2012
Qui sommes nous ?
• Une PME du Grésivaudan• Créée en 1989 !• Plus de 15 développeurs certifiés LabVIEW
Programme
• Pourquoi ?• Etude de cas• Exemples d’applications • Perspectives
Historique
Bénéfices attendus
• Faciliter l’ajout des fonctionnalités• Faciliter le travail en équipe• Gagner du temps lors du développement• Améliorer la maintenabilité du code
Etude de cas
Développer une application capable de récupérer des données en provenance d’instruments multiples.
USB
GPIB
RS-232
Exigences
• Lire pour chaque instrument Un identifiant Un numéro de série La valeur mesurée
• Pouvoir ajouter facilement d’autres instruments
Sans objet – solution 1
• « Modulaire »• Peu évolutif• Ne favorise pas un code homogène• Risque de duplication de code
Sans objet – solution 2
• « Modulaire »• « Plus évolutif »• Moins maintenable !
Solution OO
• Décrire le monde réel au sein du logiciel à l’aide d’objets
• Profiter des fonctionnalités de la POO pour obtenir un code évolutif et maintenable
Concept : Encapsulation
• Une classe est un ensemble de données et de fonctions qui interagissent sur ces données
• Un objet est une instance spécifique d’une classe
Classe Instrument
DonnéesIdentifiantNuméro de sérieDernière valeur lue
FonctionsInitialiserEcrireLireLibérer
Objet 1• AG34401• B254255• 1,4 mV
Objet 2• SP202• 3367E• 15,37g
Objet 3• LSC480• S/2323A88• 57,3K
Important
• L’accès aux données et fonctions d’une classe est cadré• Le niveau d’accès aux données de la classe est privé
• Le niveau d’accès aux fonctions de la classe est configurable
Démo
Concept : Héritage
• Les enfants héritent des fonctions et des données du parent
• Les enfants peuvent ajouter des données et des fonctions
Concept : Redéfinition et dispatch dynamique
• Redéfinition Capacité de modifier le comportement d’une fonction
parente• Dispatch dynamique
LabVIEW décide lors de l’exécution quelle fonction appeler
Le choix est dicté par le type de l’objet
france.ni.com
Classe Série
Données
Port COMVitesseBit de stopIdentifiantNuméro de sérieDernière valeur lue
FonctionsInitialiserRécupérer infoLireLibérer
Classe GPIB
DonnéesAdresse GPIBIdentifiantNuméro de sérieDernière valeur lue
FonctionsInitialiserRécupérer infoLireLibérer
Classe Instrument
DonnéesIdentifiantNuméro de sérieDernière valeur lue
FonctionsInitialiserRécupérer infoLireLibérer
Classe Série
DonnéesPort COMVitesseBit de stop
FonctionsInitialiserLireLibérer
Classe GPIB
Données Adresse GPIB
FonctionsInitialiserLireLibérer
Démo
Résumé
Résumé
• Un code structuré Organisation de code par les classes « Protection » des données Développement des classes >< Utilisation des classes
• Un code évolutif Très facile d’ajouter de nouvelles fonctionnalités Très facile de faire évoluer le code principal
france.ni.com
Exemple d’application-
Topaze
france.ni.com
Contexte
• Pouvoir s’adapter à tout type de fichiers• Pouvoir proposer différentes configurations
(traitements, visualisations, …)• N’avoir qu’un seul exécutable
Solution• Mettre en place une architecture plug-in
Chargement dynamique de classes filles Enrichissement de l’exécutable au runtime grâce au
dispatch dynamique
Aller plus loin…
• De nombreux modèles de conception existent : Factory pattern Singleton Pattern …
• Débat ouvert entre « By value » et « By reference »• Actor framework, G#, ...
Pour aller plus loin…
• NI Community : Large LabVIEW Application Development Actor Framework 2011 G#
• Forum LAVA• Formation Object-Oriented Design and programming
in LabVIEW
france.ni.com
Des questions ?www.saphir.fr
https://decibel.ni.com/content/groups/saphir-toolkithttps://decibel.ni.com/content/groups/saphir-topaze