Страница 1 из 2

Отличие статических от динамических методов класса.

Добавлено: 22 мар 2018, 20:45
JohnChaban
Всем привет
В чем отличие статических методов класса в LbVIEW от динамических?

Re: Отличие статических от динамических методов класса.

Добавлено: 23 мар 2018, 01:37
taras_33
Вы имеете ввиду вот это?
classes.png
Тем что родительский динамический класс, ребенок может override, в отличие от статического.
Посмотрите вложенный проект. В методе Calculate ребенок использует два родительских метода, один из которых перезаписан (override)

Re: Отличие статических от динамических методов класса.

Добавлено: 23 мар 2018, 14:45
JohnChaban
Можете для 2014 сделать?

Re: Отличие статических от динамических методов класса.

Добавлено: 23 мар 2018, 15:12
Artem.spb
JohnChaban писал(а):Можете для 2014 сделать?
в стандартных примерах есть простейший пример на эту тему.

Re: Отличие статических от динамических методов класса.

Добавлено: 23 мар 2018, 15:56
taras_33
Что то загрузил свой собственный архив, а открыть не смог - данные повреждены.
Вот перезалил

Re: Отличие статических от динамических методов класса.

Добавлено: 24 мар 2018, 11:13
JohnChaban
Вопрос у меня в родительском классе и в дочернем есть динамический прибор с одинаковым именем.
Когда беру и подключаю прибор из родительского класса к дочернему да действительно он меняет входы.
Но со временем возникает ошибка несоответвсия выходов то есть прибор из дочернего класса открывается с ошибкой не могу понять почему?
Смотри вложение.

Re: Отличие статических от динамических методов класса.

Добавлено: 24 мар 2018, 11:57
Stkn
У переопределенного метода входы и выходы должны быть идентичны методу из родительского класса. Насколько я понял, у Child класса выход String, а у Parent - Numeric

Re: Отличие статических от динамических методов класса.

Добавлено: 24 мар 2018, 11:58
Kosist
Динамические методы обязаны иметь одинаковый тип данных на входах/выходах. Это не полиморфическая виайка, которая может иметь разные типы данных.
Если Вам нужно, чтобы классы работали с разными типами данных, нужно создавать методы-accessors; которые будут статическими, и будут работать с данным классом. Но это нужно лишь тогда, когда Вы хотите либо записать "особый" тип данных внутрь класса, или прочитать его оттуда. Тогда эти методы будут статическими, а методы для работы с этими данными - динамическими, т.к. им не всегда нужны входа/выхода.
Это элементарные базовые понятия работы с классами; советую посмотреть какие-нибудь видео, почитать статьи или здесь на форуме, или на NI форуме; и проклацать примеры. Тогда картина будет намного яснее...
Посмотрите мой пример (в LV 2016).
explanation.PNG

Re: Отличие статических от динамических методов класса.

Добавлено: 24 мар 2018, 20:02
JohnChaban
Спасибо сделал свой класс уложилось в голове все.

Re: Отличие статических от динамических методов класса.

Добавлено: 24 мар 2018, 23:36
Juri
Так и не осилил зачем вообще нужны классы в лабвью

Re: Отличие статических от динамических методов класса.

Добавлено: 25 мар 2018, 18:45
JohnChaban
Это самый сложный вопрос надо ли пользоваться классами или нет.
Вариант ответа № 1 Как в с++ сделал например набор классов под определенные задачи и таскаешь их за собой из проекта в проект.
Вариант ответа №2 Посмотрите в LabVIEW какие есть типы данных, создайте свои и придумайте методы их обработки таскайте их за собой из проекта в проект.(У меня получилось пока в 2 работах подключить свой базовый класс и работать с ним (удобно было формировать блок-диаграмму)).
Вариант ответа №3 (расплывчатый) Labview нужно попробовать сравнить с объектным языком программирования например С++ и посмотреть (В с++ есть конструктор создания объекта (то есть объект ваш создается в памяти вы с ним работает а потом в конце когда не надо уничтожаете)) тоже самое есть в Labview.
Вариант №4 дальше не знаю надо у более образованных людей спрашивать.
Надеюсь не много написал.

Re: Отличие статических от динамических методов класса.

Добавлено: 26 мар 2018, 10:17
JohnChaban
[quote="Kosist"]Динамические методы обязаны иметь одинаковый тип данных на входах/выходах. Это не полиморфическая виайка, которая может иметь разные типы данных.
Если Вам нужно, чтобы классы работали с разными типами данных, нужно создавать методы-accessors; которые будут статическими, и будут работать с данным классом. Но это нужно лишь тогда, когда Вы хотите либо записать "особый" тип данных внутрь класса, или прочитать его оттуда. Тогда эти методы будут статическими, а методы для работы с этими данными - динамическими, т.к. им не всегда нужны входа/выхода.
У вас не совсем понятно такая вещь: методы статические это для работы с внутренними данными класса. А динамические тогда получается с какими данными работать должны.
У меня получилось так что динамические методы работают как виртуальные или функции которые можно перегружать.

Re: Отличие статических от динамических методов класса.

Добавлено: 26 мар 2018, 14:54
Kosist
JohnChaban писал(а): У вас не совсем понятно такая вещь: методы статические это для работы с внутренними данными класса. А динамические тогда получается с какими данными работать должны.У меня получилось так что динамические методы работают как виртуальные или функции которые можно перегружать.
Все методы работают со внутренними данными класса. Я имел ввиду, что если Вам надо записать внутрь дочернего класса его "особый" тип данных, который для родителя и остальных дочерних классов будет другим, то Вы не сможете сделать это при помощи динамического метода, т.к. входа/выходы будут иметь другой тип данных. Конечно, Вы можете сделать динамический метод со входом типа "вариант", и затем конвертировать его в нужный тип данных в дочерних классах. Но иногда такое решение не вполне приемлемо.
Динамические методы нужны, как Вы и написали, чтобы иметь "виртуальные" функции, которые дочерние классы могут, но не всегда должны "переопределять" (override).
Статические методы полезны в родительских классах тем, что они однозначно определяют логику метода, и не дают возможность переопределить ее в дочернем классе. Очень часто делается статический метод, который вызывает динамические методы - т.е. он как-бы объединяет их воедино, задавая логику выполнения; а вот конкретная имплементация динамических методов определяется дочерними классами, которые могут переопределить этот метод. Также, если метод делает одно и то же для всех классов в иерархии, то зачем его переопределять в дочерних классах, если это будет просто повторение кода?
Например, родительский метод работает с текстом. Есть метод для записи строки, считывания строки, и ее обработки. И, например, запись/считывание всегда будут происходить одинаково. Тогда, эти методы будут статическими. А вот обработка будет происходить по-размному: один дочерний класс будет архивировать строку; другой будет "перемешивать" байты, и т.д.
Также, разделение на динамические/статические + разный scope методов (приватные, защищенные, публичные, и т.д.) устанавливает правила, по которым должны писаться дочерние классы + как будут использоваться классы в приложении.
Например, класс работает с файлами. И он открывате файл при инициализации объекта, а закрывает при деинициализации. Поэтому, Вы можете сделать отдельные методы для открытия/закрытия файла как приватные, и они будут вызываться лишь в методах класса. И нельзя будет их "влепить" где-то посреди приложения, а тогда думать-гадать, отчего файл закрытый, или еще что-то.
Сложно объяснять без примеров, может позже попробую подготовить что-то...

Re: Отличие статических от динамических методов класса.

Добавлено: 27 мар 2018, 09:50
JohnChaban
Сегодня коллега спросил что такое в имеено LabVIEW объект а что такое класс.
Ну по идее иерархия такова LabviewObject->LabvievClass->Classmetod.
Правильно ли я думаю и как получить на блок-диаграмме LabviewObject?

Re: Отличие статических от динамических методов класса.

Добавлено: 27 мар 2018, 10:12
Artem.spb
1) зачем вам объект?
2) объект это в принципе тоже класс
3) на графический объект примерно так
go.png