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: 80
Rejestracja: 01 gru 2009 11:53
Wersja środowiska: LabVIEW 2014
Has thanked: 1 time
Been thanked: 1 time

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

Post autor: MK_Zuk » 05 gru 2016 13:48

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 37 razy

Awatar użytkownika
micard
Posty: 124
Rejestracja: 30 wrz 2011 11:28
Wersja środowiska: LabVIEW 2016
Has thanked: 4 times
Been thanked: 2 times
Kontakt:

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

Post autor: micard » 05 gru 2016 21:46

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 42 razy

MK_Zuk
Posty: 80
Rejestracja: 01 gru 2009 11:53
Wersja środowiska: LabVIEW 2014
Has thanked: 1 time
Been thanked: 1 time

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

Post autor: MK_Zuk » 06 gru 2016 13:30

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: 124
Rejestracja: 30 wrz 2011 11:28
Wersja środowiska: LabVIEW 2016
Has thanked: 4 times
Been thanked: 2 times
Kontakt:

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

Post autor: micard » 06 gru 2016 14:52

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: 198
Rejestracja: 07 sty 2010 12:56
Wersja środowiska: LabVIEW 2017
Been thanked: 3 times

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

Post autor: TMa » 07 gru 2016 11:18

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: 124
Rejestracja: 30 wrz 2011 11:28
Wersja środowiska: LabVIEW 2016
Has thanked: 4 times
Been thanked: 2 times
Kontakt:

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

Post autor: micard » 08 gru 2016 08:36

Zdecydowanie się zgadzam ;]

ODPOWIEDZ