Podstawy OOP w LabVIEW - dziedziczenie właściwości

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
MK_Zuk
Posty: 83
Rejestracja: 01 gru 2009 11:53
Wersja środowiska: LabVIEW 2014

Podstawy OOP w LabVIEW - dziedziczenie właściwości

Post autor: MK_Zuk »

Witam.
W końcu postanowiłem zabrać się za programowanie obiektowe w LabVIEW.
O ile "zabawa" metodami (dynamic dispatch) jest dla mnie już chyba zrozumiała to mam problem
jak odwołać się do właściwości zawartej w klasie rodzica z poziomu klasy potomnej.
Na ostatnim NI days dowiedziałem się, że trzeba użyć węzłów More Generic i More Specific.
Postanowiłem spróbować na chyba najprostszym przykładzie figur.
Klasa figura z właściwością kolor oraz dwie klasy dziedziczące: Kolo i Prostokat.
Zrobiłem 2 wersje:
1. Test - działa ale jakoś tak "na około" i nazwy funkcji są różne w klasie rodzica i klasach potomnych
(Set/Get Kolor w figura oraz Write/Read Kolor w dziedziczących)
2. Test z dziedziczeniem - (Set/Get Kol we wszystkich klasach) da się uruchomić ale zwraca błąd, że zagnieżdżenie
funkcji. Próba zastosowania Property Node w klasach dziedziczących, żeby odwołać się do właściwości kolor klasy figura
nie pokazuje tej właściwości.

Mógłbym prosić o pomoc gdzie jest błąd?

Pozdrawiam
Zuk
Załączniki
OOP Test 1.zip
(150.58 KiB) Pobrany 366 razy
Awatar użytkownika
micard
Posty: 207
Rejestracja: 30 wrz 2011 11:28
Wersja środowiska: LabVIEW 2017
Kontakt:

Re: Podstawy OOP w LabVIEW - dziedziczenie właściwości

Post autor: micard »

słowo klucz to "data member accessor"
Klikasz PPM na klasę -> new-> Vi for Data member access
Tam jest kilka opcji z których diekawe to wybór dostępu zapis/odczyt, dynamicznych/statycznych implementacji, oraz dostępności przez property node.
W załączniku małe demo na zwierzakach
Załączniki
OOP Test 1.zip
(217.51 KiB) Pobrany 386 razy
MK_Zuk
Posty: 83
Rejestracja: 01 gru 2009 11:53
Wersja środowiska: LabVIEW 2014

Podstawy OOP w LabVIEW - dziedziczenie właściwości

Post autor: MK_Zuk »

Dzięki serdeczne.
Czyli trzeba w klasie nadrzędnej zdeklarować accesory i udostępnić jako Property Node.
Jeszcze mam pytanko odnośnie funkcji dajGlos.vi
Czy w funkcjach z klas potomnych musi być wywoływana pusta funkcja z klasy zwierzak?

micard, gratuluję poczucia humoru (metoda z przechodniem w nazwie... =)) )
Awatar użytkownika
micard
Posty: 207
Rejestracja: 30 wrz 2011 11:28
Wersja środowiska: LabVIEW 2017
Kontakt:

Podstawy OOP w LabVIEW - dziedziczenie właściwości

Post autor: micard »

Tak to już jest jak się siedzi na forum z dobrym browarkiem w dłoni :)

Domyślnie funkcja rodzica nie musi być wywoływana, ale w ustawieniach klasy zwierzak możesz ustawić opcję dla danej metody dynamicznej, że implementaca przeciążajaca rodzica musi się ona odwoływac do metody rodzica.
TMa
Posty: 203
Rejestracja: 07 sty 2010 12:56
Wersja środowiska: LabVIEW 2017

Re: Podstawy OOP w LabVIEW - dziedziczenie właściwości

Post autor: TMa »

Dodam od siebie jedną kwestię - enkapsulacja! Ustawianie property nogi powinno być prywatne aby przypadkowo nie zmutować zwierzaka. Zazwyczaj takie właściwości ostawia się w konstruktorze i pozostają niezmienne. LV bezpośrednio nie wspiera (lub nie domaga się) konstruktora, ale w praktyce jest to przydatna opcja.
Odczyt pozostaje public albo lepiej protected.
Awatar użytkownika
micard
Posty: 207
Rejestracja: 30 wrz 2011 11:28
Wersja środowiska: LabVIEW 2017
Kontakt:

Podstawy OOP w LabVIEW - dziedziczenie właściwości

Post autor: micard »

Zdecydowanie się zgadzam ;]
ODPOWIEDZ