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

Простейшие вопросы в области инженерной разработки
Аватара пользователя
JohnChaban
leader
leader
Сообщения: 669
Зарегистрирован: 18 фев 2010, 13:26
Версия LabVIEW: 2015,2016
Откуда: Город Сосновый Бор Ленинградская Область
Контактная информация:

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

Сообщение JohnChaban »

Всем привет
В чем отличие статических методов класса в LbVIEW от динамических?
Аватара пользователя
taras_33

Activity
professional
professional
Сообщения: 391
Зарегистрирован: 31 окт 2009, 18:25
Награды: 1
Версия LabVIEW: 2019
Поблагодарили: 13 раз
Контактная информация:

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

Сообщение taras_33 »

Вы имеете ввиду вот это?
classes.png
Тем что родительский динамический класс, ребенок может override, в отличие от статического.
Посмотрите вложенный проект. В методе Calculate ребенок использует два родительских метода, один из которых перезаписан (override)
Вложения
Classes.zip
(49.24 КБ) 118 скачиваний
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
Аватара пользователя
JohnChaban
leader
leader
Сообщения: 669
Зарегистрирован: 18 фев 2010, 13:26
Версия LabVIEW: 2015,2016
Откуда: Город Сосновый Бор Ленинградская Область
Контактная информация:

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

Сообщение JohnChaban »

Можете для 2014 сделать?
Artem.spb

Activity Автор
professor
professor
Сообщения: 3391
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

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

Сообщение Artem.spb »

JohnChaban писал(а):Можете для 2014 сделать?
в стандартных примерах есть простейший пример на эту тему.
Аватара пользователя
taras_33

Activity
professional
professional
Сообщения: 391
Зарегистрирован: 31 окт 2009, 18:25
Награды: 1
Версия LabVIEW: 2019
Поблагодарили: 13 раз
Контактная информация:

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

Сообщение taras_33 »

Что то загрузил свой собственный архив, а открыть не смог - данные повреждены.
Вот перезалил
Вложения
Classes.zip
LV2013
(48.61 КБ) 100 скачиваний
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
Аватара пользователя
JohnChaban
leader
leader
Сообщения: 669
Зарегистрирован: 18 фев 2010, 13:26
Версия LabVIEW: 2015,2016
Откуда: Город Сосновый Бор Ленинградская Область
Контактная информация:

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

Сообщение JohnChaban »

Вопрос у меня в родительском классе и в дочернем есть динамический прибор с одинаковым именем.
Когда беру и подключаю прибор из родительского класса к дочернему да действительно он меняет входы.
Но со временем возникает ошибка несоответвсия выходов то есть прибор из дочернего класса открывается с ошибкой не могу понять почему?
Смотри вложение.
Вложения
Прибор называется Dynamic_Out
Прибор называется Dynamic_Out
Stkn
assistant
assistant
Сообщения: 128
Зарегистрирован: 25 янв 2009, 11:08
Версия LabVIEW: 2014

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

Сообщение Stkn »

У переопределенного метода входы и выходы должны быть идентичны методу из родительского класса. Насколько я понял, у Child класса выход String, а у Parent - Numeric
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

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

Сообщение Kosist »

Динамические методы обязаны иметь одинаковый тип данных на входах/выходах. Это не полиморфическая виайка, которая может иметь разные типы данных.
Если Вам нужно, чтобы классы работали с разными типами данных, нужно создавать методы-accessors; которые будут статическими, и будут работать с данным классом. Но это нужно лишь тогда, когда Вы хотите либо записать "особый" тип данных внутрь класса, или прочитать его оттуда. Тогда эти методы будут статическими, а методы для работы с этими данными - динамическими, т.к. им не всегда нужны входа/выхода.
Это элементарные базовые понятия работы с классами; советую посмотреть какие-нибудь видео, почитать статьи или здесь на форуме, или на NI форуме; и проклацать примеры. Тогда картина будет намного яснее...
Посмотрите мой пример (в LV 2016).
explanation.PNG
Вложения
classes.zip
(88.13 КБ) 88 скачиваний
Мы делили апельсин - много наших полегло...
Аватара пользователя
JohnChaban
leader
leader
Сообщения: 669
Зарегистрирован: 18 фев 2010, 13:26
Версия LabVIEW: 2015,2016
Откуда: Город Сосновый Бор Ленинградская Область
Контактная информация:

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

Сообщение JohnChaban »

Спасибо сделал свой класс уложилось в голове все.
Аватара пользователя
Juri
I/O
I/O
Сообщения: 263
Зарегистрирован: 19 апр 2017, 23:06
Версия LabVIEW: 2021
Благодарил (а): 13 раз
Поблагодарили: 6 раз

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

Сообщение Juri »

Так и не осилил зачем вообще нужны классы в лабвью
Аватара пользователя
JohnChaban
leader
leader
Сообщения: 669
Зарегистрирован: 18 фев 2010, 13:26
Версия LabVIEW: 2015,2016
Откуда: Город Сосновый Бор Ленинградская Область
Контактная информация:

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

Сообщение JohnChaban »

Это самый сложный вопрос надо ли пользоваться классами или нет.
Вариант ответа № 1 Как в с++ сделал например набор классов под определенные задачи и таскаешь их за собой из проекта в проект.
Вариант ответа №2 Посмотрите в LabVIEW какие есть типы данных, создайте свои и придумайте методы их обработки таскайте их за собой из проекта в проект.(У меня получилось пока в 2 работах подключить свой базовый класс и работать с ним (удобно было формировать блок-диаграмму)).
Вариант ответа №3 (расплывчатый) Labview нужно попробовать сравнить с объектным языком программирования например С++ и посмотреть (В с++ есть конструктор создания объекта (то есть объект ваш создается в памяти вы с ним работает а потом в конце когда не надо уничтожаете)) тоже самое есть в Labview.
Вариант №4 дальше не знаю надо у более образованных людей спрашивать.
Надеюсь не много написал.
Аватара пользователя
JohnChaban
leader
leader
Сообщения: 669
Зарегистрирован: 18 фев 2010, 13:26
Версия LabVIEW: 2015,2016
Откуда: Город Сосновый Бор Ленинградская Область
Контактная информация:

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

Сообщение JohnChaban »

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

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

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

Сообщение Kosist »

JohnChaban писал(а): У вас не совсем понятно такая вещь: методы статические это для работы с внутренними данными класса. А динамические тогда получается с какими данными работать должны.У меня получилось так что динамические методы работают как виртуальные или функции которые можно перегружать.
Все методы работают со внутренними данными класса. Я имел ввиду, что если Вам надо записать внутрь дочернего класса его "особый" тип данных, который для родителя и остальных дочерних классов будет другим, то Вы не сможете сделать это при помощи динамического метода, т.к. входа/выходы будут иметь другой тип данных. Конечно, Вы можете сделать динамический метод со входом типа "вариант", и затем конвертировать его в нужный тип данных в дочерних классах. Но иногда такое решение не вполне приемлемо.
Динамические методы нужны, как Вы и написали, чтобы иметь "виртуальные" функции, которые дочерние классы могут, но не всегда должны "переопределять" (override).
Статические методы полезны в родительских классах тем, что они однозначно определяют логику метода, и не дают возможность переопределить ее в дочернем классе. Очень часто делается статический метод, который вызывает динамические методы - т.е. он как-бы объединяет их воедино, задавая логику выполнения; а вот конкретная имплементация динамических методов определяется дочерними классами, которые могут переопределить этот метод. Также, если метод делает одно и то же для всех классов в иерархии, то зачем его переопределять в дочерних классах, если это будет просто повторение кода?
Например, родительский метод работает с текстом. Есть метод для записи строки, считывания строки, и ее обработки. И, например, запись/считывание всегда будут происходить одинаково. Тогда, эти методы будут статическими. А вот обработка будет происходить по-размному: один дочерний класс будет архивировать строку; другой будет "перемешивать" байты, и т.д.
Также, разделение на динамические/статические + разный scope методов (приватные, защищенные, публичные, и т.д.) устанавливает правила, по которым должны писаться дочерние классы + как будут использоваться классы в приложении.
Например, класс работает с файлами. И он открывате файл при инициализации объекта, а закрывает при деинициализации. Поэтому, Вы можете сделать отдельные методы для открытия/закрытия файла как приватные, и они будут вызываться лишь в методах класса. И нельзя будет их "влепить" где-то посреди приложения, а тогда думать-гадать, отчего файл закрытый, или еще что-то.
Сложно объяснять без примеров, может позже попробую подготовить что-то...
Мы делили апельсин - много наших полегло...
Аватара пользователя
JohnChaban
leader
leader
Сообщения: 669
Зарегистрирован: 18 фев 2010, 13:26
Версия LabVIEW: 2015,2016
Откуда: Город Сосновый Бор Ленинградская Область
Контактная информация:

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

Сообщение JohnChaban »

Сегодня коллега спросил что такое в имеено LabVIEW объект а что такое класс.
Ну по идее иерархия такова LabviewObject->LabvievClass->Classmetod.
Правильно ли я думаю и как получить на блок-диаграмме LabviewObject?
Artem.spb

Activity Автор
professor
professor
Сообщения: 3391
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

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

Сообщение Artem.spb »

1) зачем вам объект?
2) объект это в принципе тоже класс
3) на графический объект примерно так
go.png
Ответить

Вернуться в «Для чайников»