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

Простейшие вопросы в области инженерной разработки

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

Postby JohnChaban on 22 Mar 2018, 20:45

Всем привет
В чем отличие статических методов класса в LbVIEW от динамических?
User avatar
JohnChaban
master
master
 
Posts: 476
Joined: 18 Feb 2010, 13:26
Location: Город Сосновый Бор Ленинградская Область
LabVIEW Version: 2015,2016
Karma: 0

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

Postby taras_33 on 23 Mar 2018, 01:37

Вы имеете ввиду вот это?

classes.png


Тем что родительский динамический класс, ребенок может override, в отличие от статического.
Посмотрите вложенный проект. В методе Calculate ребенок использует два родительских метода, один из которых перезаписан (override)
Attachments
Classes.zip
(49.24 KiB) Downloaded 46 times
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!
User avatar
taras_33
developer
developer
 
Posts: 256
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 121
CLD VIP

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

Postby JohnChaban on 23 Mar 2018, 14:45

Можете для 2014 сделать?
User avatar
JohnChaban
master
master
 
Posts: 476
Joined: 18 Feb 2010, 13:26
Location: Город Сосновый Бор Ленинградская Область
LabVIEW Version: 2015,2016
Karma: 0

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

Postby Artem.spb on 23 Mar 2018, 15:12

JohnChaban wrote:Можете для 2014 сделать?

в стандартных примерах есть простейший пример на эту тему.
Artem.spb
expert
expert
 
Posts: 1427
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 246
CLD hardware I/O VIP freelance

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

Postby taras_33 on 23 Mar 2018, 15:56

Что то загрузил свой собственный архив, а открыть не смог - данные повреждены.
Вот перезалил
Attachments
Classes.zip
LV2013
(48.61 KiB) Downloaded 37 times
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!
User avatar
taras_33
developer
developer
 
Posts: 256
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 121
CLD VIP

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

Postby JohnChaban on 24 Mar 2018, 11:13

Вопрос у меня в родительском классе и в дочернем есть динамический прибор с одинаковым именем.
Когда беру и подключаю прибор из родительского класса к дочернему да действительно он меняет входы.
Но со временем возникает ошибка несоответвсия выходов то есть прибор из дочернего класса открывается с ошибкой не могу понять почему?
Смотри вложение.
Attachments
doch.jpg
Прибор называется Dynamic_Out
User avatar
JohnChaban
master
master
 
Posts: 476
Joined: 18 Feb 2010, 13:26
Location: Город Сосновый Бор Ленинградская Область
LabVIEW Version: 2015,2016
Karma: 0

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

Postby Stkn on 24 Mar 2018, 11:57

У переопределенного метода входы и выходы должны быть идентичны методу из родительского класса. Насколько я понял, у Child класса выход String, а у Parent - Numeric
Stkn
assistant
assistant
 
Posts: 123
Joined: 25 Jan 2009, 11:08
LabVIEW Version: 2014
Karma: 10
CLAD

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

Postby Kosist on 24 Mar 2018, 11:58

Динамические методы обязаны иметь одинаковый тип данных на входах/выходах. Это не полиморфическая виайка, которая может иметь разные типы данных.
Если Вам нужно, чтобы классы работали с разными типами данных, нужно создавать методы-accessors; которые будут статическими, и будут работать с данным классом. Но это нужно лишь тогда, когда Вы хотите либо записать "особый" тип данных внутрь класса, или прочитать его оттуда. Тогда эти методы будут статическими, а методы для работы с этими данными - динамическими, т.к. им не всегда нужны входа/выхода.
Это элементарные базовые понятия работы с классами; советую посмотреть какие-нибудь видео, почитать статьи или здесь на форуме, или на NI форуме; и проклацать примеры. Тогда картина будет намного яснее...
Посмотрите мой пример (в LV 2016).
explanation.PNG
Attachments
classes.zip
(88.13 KiB) Downloaded 33 times
Мы делили апельсин - много наших полегло...
User avatar
Kosist
leader
leader
 
Posts: 899
Joined: 21 Feb 2011, 23:44
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 253
CLAD I/O VIP students

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

Postby JohnChaban on 24 Mar 2018, 20:02

Спасибо сделал свой класс уложилось в голове все.
User avatar
JohnChaban
master
master
 
Posts: 476
Joined: 18 Feb 2010, 13:26
Location: Город Сосновый Бор Ленинградская Область
LabVIEW Version: 2015,2016
Karma: 0

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

Postby Usss on 24 Mar 2018, 23:36

Так и не осилил зачем вообще нужны классы в лабвью
Usss
user
user
 
Posts: 71
Joined: 19 Apr 2017, 23:06
LabVIEW Version: 2017
Karma: 10

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

Postby JohnChaban on 25 Mar 2018, 18:45

Это самый сложный вопрос надо ли пользоваться классами или нет.
Вариант ответа № 1 Как в с++ сделал например набор классов под определенные задачи и таскаешь их за собой из проекта в проект.
Вариант ответа №2 Посмотрите в LabVIEW какие есть типы данных, создайте свои и придумайте методы их обработки таскайте их за собой из проекта в проект.(У меня получилось пока в 2 работах подключить свой базовый класс и работать с ним (удобно было формировать блок-диаграмму)).
Вариант ответа №3 (расплывчатый) Labview нужно попробовать сравнить с объектным языком программирования например С++ и посмотреть (В с++ есть конструктор создания объекта (то есть объект ваш создается в памяти вы с ним работает а потом в конце когда не надо уничтожаете)) тоже самое есть в Labview.
Вариант №4 дальше не знаю надо у более образованных людей спрашивать.
Надеюсь не много написал.
User avatar
JohnChaban
master
master
 
Posts: 476
Joined: 18 Feb 2010, 13:26
Location: Город Сосновый Бор Ленинградская Область
LabVIEW Version: 2015,2016
Karma: 0

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

Postby JohnChaban on 26 Mar 2018, 10:17

[quote="Kosist"]Динамические методы обязаны иметь одинаковый тип данных на входах/выходах. Это не полиморфическая виайка, которая может иметь разные типы данных.
Если Вам нужно, чтобы классы работали с разными типами данных, нужно создавать методы-accessors; которые будут статическими, и будут работать с данным классом. Но это нужно лишь тогда, когда Вы хотите либо записать "особый" тип данных внутрь класса, или прочитать его оттуда. Тогда эти методы будут статическими, а методы для работы с этими данными - динамическими, т.к. им не всегда нужны входа/выхода.
У вас не совсем понятно такая вещь: методы статические это для работы с внутренними данными класса. А динамические тогда получается с какими данными работать должны.
У меня получилось так что динамические методы работают как виртуальные или функции которые можно перегружать.
User avatar
JohnChaban
master
master
 
Posts: 476
Joined: 18 Feb 2010, 13:26
Location: Город Сосновый Бор Ленинградская Область
LabVIEW Version: 2015,2016
Karma: 0

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

Postby Kosist on 26 Mar 2018, 14:54

JohnChaban wrote: У вас не совсем понятно такая вещь: методы статические это для работы с внутренними данными класса. А динамические тогда получается с какими данными работать должны.У меня получилось так что динамические методы работают как виртуальные или функции которые можно перегружать.

Все методы работают со внутренними данными класса. Я имел ввиду, что если Вам надо записать внутрь дочернего класса его "особый" тип данных, который для родителя и остальных дочерних классов будет другим, то Вы не сможете сделать это при помощи динамического метода, т.к. входа/выходы будут иметь другой тип данных. Конечно, Вы можете сделать динамический метод со входом типа "вариант", и затем конвертировать его в нужный тип данных в дочерних классах. Но иногда такое решение не вполне приемлемо.
Динамические методы нужны, как Вы и написали, чтобы иметь "виртуальные" функции, которые дочерние классы могут, но не всегда должны "переопределять" (override).
Статические методы полезны в родительских классах тем, что они однозначно определяют логику метода, и не дают возможность переопределить ее в дочернем классе. Очень часто делается статический метод, который вызывает динамические методы - т.е. он как-бы объединяет их воедино, задавая логику выполнения; а вот конкретная имплементация динамических методов определяется дочерними классами, которые могут переопределить этот метод. Также, если метод делает одно и то же для всех классов в иерархии, то зачем его переопределять в дочерних классах, если это будет просто повторение кода?
Например, родительский метод работает с текстом. Есть метод для записи строки, считывания строки, и ее обработки. И, например, запись/считывание всегда будут происходить одинаково. Тогда, эти методы будут статическими. А вот обработка будет происходить по-размному: один дочерний класс будет архивировать строку; другой будет "перемешивать" байты, и т.д.
Также, разделение на динамические/статические + разный scope методов (приватные, защищенные, публичные, и т.д.) устанавливает правила, по которым должны писаться дочерние классы + как будут использоваться классы в приложении.
Например, класс работает с файлами. И он открывате файл при инициализации объекта, а закрывает при деинициализации. Поэтому, Вы можете сделать отдельные методы для открытия/закрытия файла как приватные, и они будут вызываться лишь в методах класса. И нельзя будет их "влепить" где-то посреди приложения, а тогда думать-гадать, отчего файл закрытый, или еще что-то.
Сложно объяснять без примеров, может позже попробую подготовить что-то...
Мы делили апельсин - много наших полегло...
User avatar
Kosist
leader
leader
 
Posts: 899
Joined: 21 Feb 2011, 23:44
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 253
CLAD I/O VIP students

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

Postby JohnChaban on 27 Mar 2018, 09:50

Сегодня коллега спросил что такое в имеено LabVIEW объект а что такое класс.
Ну по идее иерархия такова LabviewObject->LabvievClass->Classmetod.
Правильно ли я думаю и как получить на блок-диаграмме LabviewObject?
User avatar
JohnChaban
master
master
 
Posts: 476
Joined: 18 Feb 2010, 13:26
Location: Город Сосновый Бор Ленинградская Область
LabVIEW Version: 2015,2016
Karma: 0

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

Postby Artem.spb on 27 Mar 2018, 10:12

1) зачем вам объект?
2) объект это в принципе тоже класс
3) на графический объект примерно так
go.png
Artem.spb
expert
expert
 
Posts: 1427
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 246
CLD hardware I/O VIP freelance

Next

Return to Для чайников

Who is online

Users browsing this forum: No registered users and 9 guests

cron