Отличие статических от динамических методов класса.
- JohnChaban
- leader
- Сообщения: 669
- Зарегистрирован: 18 фев 2010, 13:26
- Версия LabVIEW: 2015,2016
- Откуда: Город Сосновый Бор Ленинградская Область
- Контактная информация:
Отличие статических от динамических методов класса.
Всем привет
В чем отличие статических методов класса в LbVIEW от динамических?
В чем отличие статических методов класса в LbVIEW от динамических?
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Re: Отличие статических от динамических методов класса.
Вы имеете ввиду вот это?
Тем что родительский динамический класс, ребенок может override, в отличие от статического.
Посмотрите вложенный проект. В методе Calculate ребенок использует два родительских метода, один из которых перезаписан (override)
Тем что родительский динамический класс, ребенок может 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!
So far, the Universe is winning!
- JohnChaban
- leader
- Сообщения: 669
- Зарегистрирован: 18 фев 2010, 13:26
- Версия LabVIEW: 2015,2016
- Откуда: Город Сосновый Бор Ленинградская Область
- Контактная информация:
-
- professor
- Сообщения: 3408
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Отличие статических от динамических методов класса.
в стандартных примерах есть простейший пример на эту тему.JohnChaban писал(а):Можете для 2014 сделать?
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Re: Отличие статических от динамических методов класса.
Что то загрузил свой собственный архив, а открыть не смог - данные повреждены.
Вот перезалил
Вот перезалил
- Вложения
-
- Classes.zip
- LV2013
- (48.61 КБ) 102 скачивания
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!
So far, the Universe is winning!
- JohnChaban
- leader
- Сообщения: 669
- Зарегистрирован: 18 фев 2010, 13:26
- Версия LabVIEW: 2015,2016
- Откуда: Город Сосновый Бор Ленинградская Область
- Контактная информация:
Re: Отличие статических от динамических методов класса.
Вопрос у меня в родительском классе и в дочернем есть динамический прибор с одинаковым именем.
Когда беру и подключаю прибор из родительского класса к дочернему да действительно он меняет входы.
Но со временем возникает ошибка несоответвсия выходов то есть прибор из дочернего класса открывается с ошибкой не могу понять почему?
Смотри вложение.
Когда беру и подключаю прибор из родительского класса к дочернему да действительно он меняет входы.
Но со временем возникает ошибка несоответвсия выходов то есть прибор из дочернего класса открывается с ошибкой не могу понять почему?
Смотри вложение.
Re: Отличие статических от динамических методов класса.
У переопределенного метода входы и выходы должны быть идентичны методу из родительского класса. Насколько я понял, у Child класса выход String, а у Parent - Numeric
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: Отличие статических от динамических методов класса.
Динамические методы обязаны иметь одинаковый тип данных на входах/выходах. Это не полиморфическая виайка, которая может иметь разные типы данных.
Если Вам нужно, чтобы классы работали с разными типами данных, нужно создавать методы-accessors; которые будут статическими, и будут работать с данным классом. Но это нужно лишь тогда, когда Вы хотите либо записать "особый" тип данных внутрь класса, или прочитать его оттуда. Тогда эти методы будут статическими, а методы для работы с этими данными - динамическими, т.к. им не всегда нужны входа/выхода.
Это элементарные базовые понятия работы с классами; советую посмотреть какие-нибудь видео, почитать статьи или здесь на форуме, или на NI форуме; и проклацать примеры. Тогда картина будет намного яснее...
Посмотрите мой пример (в LV 2016).
Если Вам нужно, чтобы классы работали с разными типами данных, нужно создавать методы-accessors; которые будут статическими, и будут работать с данным классом. Но это нужно лишь тогда, когда Вы хотите либо записать "особый" тип данных внутрь класса, или прочитать его оттуда. Тогда эти методы будут статическими, а методы для работы с этими данными - динамическими, т.к. им не всегда нужны входа/выхода.
Это элементарные базовые понятия работы с классами; советую посмотреть какие-нибудь видео, почитать статьи или здесь на форуме, или на NI форуме; и проклацать примеры. Тогда картина будет намного яснее...
Посмотрите мой пример (в LV 2016).
- Вложения
-
- classes.zip
- (88.13 КБ) 90 скачиваний
Мы делили апельсин - много наших полегло...
- JohnChaban
- leader
- Сообщения: 669
- Зарегистрирован: 18 фев 2010, 13:26
- Версия LabVIEW: 2015,2016
- Откуда: Город Сосновый Бор Ленинградская Область
- Контактная информация:
Re: Отличие статических от динамических методов класса.
Спасибо сделал свой класс уложилось в голове все.
- Juri
- I/O
- Сообщения: 263
- Зарегистрирован: 19 апр 2017, 23:06
- Версия LabVIEW: 2021
- Благодарил (а): 13 раз
- Поблагодарили: 6 раз
Re: Отличие статических от динамических методов класса.
Так и не осилил зачем вообще нужны классы в лабвью
- JohnChaban
- leader
- Сообщения: 669
- Зарегистрирован: 18 фев 2010, 13:26
- Версия LabVIEW: 2015,2016
- Откуда: Город Сосновый Бор Ленинградская Область
- Контактная информация:
Re: Отличие статических от динамических методов класса.
Это самый сложный вопрос надо ли пользоваться классами или нет.
Вариант ответа № 1 Как в с++ сделал например набор классов под определенные задачи и таскаешь их за собой из проекта в проект.
Вариант ответа №2 Посмотрите в LabVIEW какие есть типы данных, создайте свои и придумайте методы их обработки таскайте их за собой из проекта в проект.(У меня получилось пока в 2 работах подключить свой базовый класс и работать с ним (удобно было формировать блок-диаграмму)).
Вариант ответа №3 (расплывчатый) Labview нужно попробовать сравнить с объектным языком программирования например С++ и посмотреть (В с++ есть конструктор создания объекта (то есть объект ваш создается в памяти вы с ним работает а потом в конце когда не надо уничтожаете)) тоже самое есть в Labview.
Вариант №4 дальше не знаю надо у более образованных людей спрашивать.
Надеюсь не много написал.
Вариант ответа № 1 Как в с++ сделал например набор классов под определенные задачи и таскаешь их за собой из проекта в проект.
Вариант ответа №2 Посмотрите в LabVIEW какие есть типы данных, создайте свои и придумайте методы их обработки таскайте их за собой из проекта в проект.(У меня получилось пока в 2 работах подключить свой базовый класс и работать с ним (удобно было формировать блок-диаграмму)).
Вариант ответа №3 (расплывчатый) Labview нужно попробовать сравнить с объектным языком программирования например С++ и посмотреть (В с++ есть конструктор создания объекта (то есть объект ваш создается в памяти вы с ним работает а потом в конце когда не надо уничтожаете)) тоже самое есть в Labview.
Вариант №4 дальше не знаю надо у более образованных людей спрашивать.
Надеюсь не много написал.
- JohnChaban
- leader
- Сообщения: 669
- Зарегистрирован: 18 фев 2010, 13:26
- Версия LabVIEW: 2015,2016
- Откуда: Город Сосновый Бор Ленинградская Область
- Контактная информация:
Re: Отличие статических от динамических методов класса.
[quote="Kosist"]Динамические методы обязаны иметь одинаковый тип данных на входах/выходах. Это не полиморфическая виайка, которая может иметь разные типы данных.
Если Вам нужно, чтобы классы работали с разными типами данных, нужно создавать методы-accessors; которые будут статическими, и будут работать с данным классом. Но это нужно лишь тогда, когда Вы хотите либо записать "особый" тип данных внутрь класса, или прочитать его оттуда. Тогда эти методы будут статическими, а методы для работы с этими данными - динамическими, т.к. им не всегда нужны входа/выхода.
У вас не совсем понятно такая вещь: методы статические это для работы с внутренними данными класса. А динамические тогда получается с какими данными работать должны.
У меня получилось так что динамические методы работают как виртуальные или функции которые можно перегружать.
Если Вам нужно, чтобы классы работали с разными типами данных, нужно создавать методы-accessors; которые будут статическими, и будут работать с данным классом. Но это нужно лишь тогда, когда Вы хотите либо записать "особый" тип данных внутрь класса, или прочитать его оттуда. Тогда эти методы будут статическими, а методы для работы с этими данными - динамическими, т.к. им не всегда нужны входа/выхода.
У вас не совсем понятно такая вещь: методы статические это для работы с внутренними данными класса. А динамические тогда получается с какими данными работать должны.
У меня получилось так что динамические методы работают как виртуальные или функции которые можно перегружать.
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: Отличие статических от динамических методов класса.
Все методы работают со внутренними данными класса. Я имел ввиду, что если Вам надо записать внутрь дочернего класса его "особый" тип данных, который для родителя и остальных дочерних классов будет другим, то Вы не сможете сделать это при помощи динамического метода, т.к. входа/выходы будут иметь другой тип данных. Конечно, Вы можете сделать динамический метод со входом типа "вариант", и затем конвертировать его в нужный тип данных в дочерних классах. Но иногда такое решение не вполне приемлемо.JohnChaban писал(а): У вас не совсем понятно такая вещь: методы статические это для работы с внутренними данными класса. А динамические тогда получается с какими данными работать должны.У меня получилось так что динамические методы работают как виртуальные или функции которые можно перегружать.
Динамические методы нужны, как Вы и написали, чтобы иметь "виртуальные" функции, которые дочерние классы могут, но не всегда должны "переопределять" (override).
Статические методы полезны в родительских классах тем, что они однозначно определяют логику метода, и не дают возможность переопределить ее в дочернем классе. Очень часто делается статический метод, который вызывает динамические методы - т.е. он как-бы объединяет их воедино, задавая логику выполнения; а вот конкретная имплементация динамических методов определяется дочерними классами, которые могут переопределить этот метод. Также, если метод делает одно и то же для всех классов в иерархии, то зачем его переопределять в дочерних классах, если это будет просто повторение кода?
Например, родительский метод работает с текстом. Есть метод для записи строки, считывания строки, и ее обработки. И, например, запись/считывание всегда будут происходить одинаково. Тогда, эти методы будут статическими. А вот обработка будет происходить по-размному: один дочерний класс будет архивировать строку; другой будет "перемешивать" байты, и т.д.
Также, разделение на динамические/статические + разный scope методов (приватные, защищенные, публичные, и т.д.) устанавливает правила, по которым должны писаться дочерние классы + как будут использоваться классы в приложении.
Например, класс работает с файлами. И он открывате файл при инициализации объекта, а закрывает при деинициализации. Поэтому, Вы можете сделать отдельные методы для открытия/закрытия файла как приватные, и они будут вызываться лишь в методах класса. И нельзя будет их "влепить" где-то посреди приложения, а тогда думать-гадать, отчего файл закрытый, или еще что-то.
Сложно объяснять без примеров, может позже попробую подготовить что-то...
Мы делили апельсин - много наших полегло...
- JohnChaban
- leader
- Сообщения: 669
- Зарегистрирован: 18 фев 2010, 13:26
- Версия LabVIEW: 2015,2016
- Откуда: Город Сосновый Бор Ленинградская Область
- Контактная информация:
Re: Отличие статических от динамических методов класса.
Сегодня коллега спросил что такое в имеено LabVIEW объект а что такое класс.
Ну по идее иерархия такова LabviewObject->LabvievClass->Classmetod.
Правильно ли я думаю и как получить на блок-диаграмме LabviewObject?
Ну по идее иерархия такова LabviewObject->LabvievClass->Classmetod.
Правильно ли я думаю и как получить на блок-диаграмме LabviewObject?
-
- professor
- Сообщения: 3408
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Отличие статических от динамических методов класса.
1) зачем вам объект?
2) объект это в принципе тоже класс
3) на графический объект примерно так
2) объект это в принципе тоже класс
3) на графический объект примерно так