ООП - объектно-ориентированое программирование

Общие принципы, проектирование, модуляризация, темплейты и шаблоны

Re: ООП - объектно-ориентированое программирование

Postby mxdamage on 20 Mar 2012, 14:05

Подскажите, пожалуйста, как передать одним махом все свойства родителя ребенку?
По одному - понятно, можно создать динамический акцессор у родителя, и применить его с ребенком, а вот так, чтобы все свойства перешли при создании?
Я пытался использовать To more specific class, но получил ошибку 1448

В данном примере channel ref является ребенком channel, и хочет получить его свойства
Безымянный.png
User avatar
mxdamage
assistant
assistant
 
Posts: 113
Joined: 11 Aug 2011, 15:45
Location: Москва
Medals: 1
Activity (1)
LabVIEW Version: 2011
Karma: 24

Re: ООП - объектно-ориентированое программирование

Postby mzu2006 on 20 Mar 2012, 20:48

В данном примере скорее всего ошибка проектирования: класс ссылки сделан производным от основного.
Рекомендую ознакомиться с документами из списка: http://labviewportal.org/viewtopic.php?f=23&t=3010 (ОО Дизайн)

вообще же вопрос интересен. Кратко, 3 замечания:
- В стандартном шаблоне проектирования SIngleton методы переносятся вручную.
- Можно написать прибамбас методами скриптинга
- В принципе для реализации одинакового интерфейса нескольких объектов - есть инструментарий интерфейсов. Типовой реализации нет. Более-менее успешные попытка сделана здесь :http://lavag.org/topic/10040-exterface-architecture/
User avatar
mzu2006
doctor
doctor
 
Posts: 2456
Joined: 16 Aug 2008, 02:12
Location: St-Petersburg (RU), Phila, Boston, Washington DC
Medals: 3
Professionalism (1) Tutorials (1) Black (1)
LabVIEW Version: 7.1 10 11 12
Karma: 279
CLAD CLD I/O PDA VIP vision bloggers teachers

Re: ООП - объектно-ориентированое программирование

Postby mxdamage on 21 Mar 2012, 09:43

Спасибо большое за комментарий!
mzu2006 wrote:В данном примере скорее всего ошибка проектирования: класс ссылки сделан производным от основного.

Это да, это были мои эксперименты, и больше я не делаю так. Честно-честно )
Но вопрос не состоял в том, правильно ли я составил структуру классов, а как создать из родителя ребенка, передав ему все свойства родителя. Мне такая возможность казалась очевидной, а на деле оказалось все гораздо сложнее:
mzu2006 wrote:- В стандартном шаблоне проектирования SIngleton методы переносятся вручную.
- Можно написать прибамбас методами скриптинга
- В принципе для реализации одинакового интерфейса нескольких объектов - есть инструментарий интерфейсов. Типовой реализации нет. Более-менее успешные попытка сделана здесь :http://lavag.org/topic/10040-exterface-architecture/

Видимо, ООП не предполагает такого обращения с классами. Далеко пока еще до Object-oriented thinking
User avatar
mxdamage
assistant
assistant
 
Posts: 113
Joined: 11 Aug 2011, 15:45
Location: Москва
Medals: 1
Activity (1)
LabVIEW Version: 2011
Karma: 24

Re: ООП - объектно-ориентированое программирование

Postby drzet on 24 Jun 2015, 13:24

Всем привет!
Пытаюсь реализовать следующую задачу: различные объекты находятся на одной машине в сети Ethernet, назовем ее "контроллер", а с "хоста" (другая машина в сети) требуется управлять данными объектами, т.е. обращаться к ним также через их методы. На самом "контроллере" проблем нет, а вот как сделать обмен методов по сети? Думал, через shared variables. Но тогда получится нарушение инкапсуляции...
User avatar
drzet
interested
interested
 
Posts: 3
Joined: 08 Sep 2011, 21:26
Location: Пермь
LabVIEW Version: 2012
Karma: 0

Re: ООП - объектно-ориентированое программирование

Postby Aleksey Feoktistov on 06 Jan 2016, 17:07

Наконец-то попалась задача в которой можно использовать ООП.
Есть массив переменных.
у каждой переменной есть набор атрибутов
практически каждый атрибут имеет заранее определенное значение. это значение я хочу определять в программе. для возможности масштабировать систему и использовать ее в следующих проектах
OOP.png


Но я пока никак не могу понять логику ООП :dntknw:
Исходные данные класса "Tag"
- Метод get_Tag - считывает все значения объекта
- Метод set_Tag - присваивает все значения объекту.

Каким образом лучше записывать и считывать значения конкретного Тэга (в цикле или как-то еще)?
Если у меня 100 переменных Tag, то как мне лучше организовать корень программы?
Такого опыта у меня нет и мозг взрывается когда пытаюсь представить структуру такой программы :suicide:
User avatar
Aleksey Feoktistov
leader
leader
 
Posts: 897
Joined: 20 Jan 2009, 00:15
Location: Tyumen
Medals: 6
Activity (2) Gold (1) Silver (1) Black (2)
LabVIEW Version: 2015
Karma: 82
VIP students

Re: ООП - объектно-ориентированое программирование

Postby Borjomy_1 on 06 Jan 2016, 19:46

Если очень упрощенно, то объект (Obj) это кластер. И данные внутри кластера связаны с внешним миром через методы и свойства. Для того, чтобы контролировать запись и чтение свойств и нужны propertyes. Можно обойтись и без объекта и работать с кластером. А методы обеспечивать с помощью SubVI. Будет практически тоже самое.
Для работы создаешь массив из 100 твоих объектов. Выделяешь индексом необходимый и производишь с ним манипуляции с помощью методов. Потом не забудь записать результат (выходной объект) обратно в массив. Иначе ничего не сохранится. Точно так-же, как и с кластером. Некоторые особо продвинутые оперируют не объектом, а ссылкой на него (палитра Program/Application Control/Memory Control/Data Value Reference. В таком случае при обращении к объекту данные сохраняются автоматически. При создании метода просто замени контролы объектов на Data Value Reference (с вложением контрола объекта)
Borjomy_1
expert
expert
 
Posts: 1809
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 318
VIP

Re: ООП - объектно-ориентированое программирование

Postby taras_33 on 07 Jan 2016, 00:42

Можно создать Родительский клас со своими методами, а все переменные-классы наследовать от него. В этом случае все наследники унаследуют и все родительские методы, а не только данные. Для каждого наследника будет создана своя копия данных, которыми можно манипулировать методами родителя, а можно добавить свои собственные. Причем родительский метод можно перезаписать (override) или оставить как есть. Например во вложенном проекте, Child 1 override строку и изменяя дату, Child 2 override родительский метод Manipulate with Number умножая число на 5. Вообщем посмотрите вложенный проект
Attachments
Test.zip
(146.38 KiB) Downloaded 206 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
adviser
adviser
 
Posts: 224
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 107
CLD

Re: ООП - объектно-ориентированое программирование

Postby Vitekkz88 on 07 Sep 2018, 19:25

Поднимаются темы про ООП, поэтому Up-ну эту тему пока она в тотал не ушла в никролог. Нашел время и разобрался с LVOOP. На будущее тем, кто не знает как подступиться и не знает с чего начать сделаю мануал. Готов всё обсудить, ответить на вопросы(хотя бы попробовать, это повысит мой скил в LVOOP), послушать остальных интересующихся.
Вы можете использовать 2 подхода для изучения:
1. Использовать обучающий материал от NI, по форумам темки почитывать или видюшки смотреть по LVOOP.
2. Использовать общепринятую литературу в мире программирования.
Я вам настоятельно рекомендую начинать со второго, а затем переходить к первому. Хотите понять объектно-ориентированную парадигму
программирования? Нужно будет уделить 2-4 недели для ежедневного чтива теории, просмотру лекций и анализу информации чтобы уяснить основы самой
парадигмы. Изучать ООП по кратким статьям от NI или тематическим книгам я бы советовал после полученной базы знаний из другой литературы. Меня позабавило то, как в книгах с темой LVOOP пытаются рассказать про ООП буквально на 2 страничках, а далее даётся галоп к примерам и вуаля - мы типа знаем ООП. Really? То же самое касается и официальных документов. На столько там сжатый материал, прям брррр. Аналогично и про паттерны проектирования. До сих пор блуждает где-то документ страничек на 8-10, в котором через призму LabVIEW даётся описанием паттернов, по страничке на каждый...наверно так. Ну правда, серьёзно? Это прям как "С++ за 21 день". Вам будет казаться, что вы понимаете, но по большому счету ничего вы толком не узнаете кроме общих фраз.

Часть 1. Вводная информация
Мэтт Вайсфельд «Объектно-ориентированное мышление» - это одна из тех книг, которая должна стать Вашим пособием в изучении объектно-ориентированной
парадигмы программирования. Книга не будет утомлять бесконечным программным кодом, основной упор сделан на рассмотрение понятий и
принципов ООП. Так же описаны возможные подходы к проектированию классов с заботой о будущем использовании. Важно: проектируя программу
объектно-ориентированным способом, вы можете получить как хорошие, так и плохие результаты с той же легкостью, как и при использовании любого
другого подхода. Пусть Вашу бдительность не притупляет ложное чувство безопасности, основанное лишь на том, что вы применяете самую современную
методологию проектирования. То, что в программе будут присутствовать классы – не означает, что перед Вами проработанный проект, а программа
выполнена в ООП-стиле, инфа сотка. Прочтите хотя бы 50% этой книги, а затем двигайтесь дальше к освоению реализации этой парадигмы в LabVIEW.

Часть 2. LabVIEW OOP
Надеюсь, что хотя бы 50% книги Вы прочли и четко представляете такие понятия как «класс», «объект», «метод», «атрибут», «инкапсуляция», «полиморфизм», «наследование», «абстракция», «композиция», «интерфейс».
Давайте рассмотрим, как в LabVIEW выглядят классы, методы и атрибуты:
Класс - это уникальный тип библиотеки, которая всегда содержит кластер с атрибутами объекта и методами.
Объект - это кластер, внутри которого содержаться атрибуты объекта.
Метод – это .vi, который описывает поведение объекта.
В качестве примера будем использовать абстрактный класс «Калькулятор». Создадим базовый класс и наполним его методами и атрибутами объекта. Как создать класс в LabVIEW: Создаём пустой проект -> ПКМ по MyComputer и выбираем как в приведенном ниже рисунке. После выбора Class будет предложено изменить имя класса.
1_Создание класса (1).png

После создания класс содержит одни файл Name_Class.ctl и пока всё. Откроем этот файл и посмотрим на содержимое:
2_Создание класса.png
2_Создание класса.png (1.32 KiB) Viewed 261 times

Видим пустой кластер с именем Cluster of class private data. В этом кластере необходимо описать атрибуты(поля) объекта класса. Внесем в кластер 3 поля: А, В, С . Два поля будут отвечать за входные числа для мат.операций, третье поле будет хранить результат.
3_Создание класса.png
3_Создание класса.png (2.93 KiB) Viewed 261 times

Создадим абстрактные методы для выполнения математических операций суммы, умножения, вычитания:
4_Создание класса.png

Остановим внимание на том, что предлагается на выбор:
VI, Virtual Folder, Property Definition Folder, VI from Dynamic Dispatch Template, VI from Static Dispatch Template, VI for Data Member Access, VI for Override, Control.
Наиболее интересными являются методы с динамической(VI from Dynamic Dispatch Template) и статической(VI from Static Dispatch Template) диспетчеризацией. Динамическая диспетчеризация методов – это механизм, позволяющий определить какой из переопределенных методов нужно вызвать, во время выполнения, а не во время компиляции. Статическая диспетчеризация не позволит нам выполнить перезапись дочерними классами, поэтому работа с таким методом равносильна работе с обычной subVI. Динамическая диспетчеризация вызывает некоторые накладные расходы на вызов метода и перезапись, в то время как статичные этого не требуют. Тем не менее, в подавляющем большинстве отдаётся предпочтение динамическим методам ввиду их гибкости. Про VI for Data Member Access будут пояснения ниже.
Абстрактный метод для сложения (для базового класса создаём методы как VI from Dynamic Dispatch).
5_Создание класса.png

Аналогичным образом создаём методы для умножения и вычитания.
В качестве калькулятора может выступать классический калькулятор, это могут быть счеты или счетные палочки. Операция сложения может быть общепринятой, типа 2+2 = 4, может быть логической, может быть по модулю 2 и т.д. В нашем примере опишем объект «классический калькулятор» и «логический калькулятор». Эти объекты обладают одинаковыми атрибутами и методами, однако реализация методов будет отличаться.
Создаём 2 класса, которые описывают конкретные объекты: ClassCalculator и ClassBoolCalc.
6_Создание класса.png
6_Создание класса.png (5.06 KiB) Viewed 261 times

Для каждого класса создадим пары методов: set и get как VI(про теорию использования геттеров и сеттеров почитайте либо в книге, либо в гугле). Хорошим тоном в ООП считается иметь пару таких методов для каждого атрибута объекта класса. С помощью этих методов будем задавать и получать значения полей. Метод set для каждого объекта будет закрытым. Это позволит нам защитить поля от изменения вне класса для определенного объекта. Метод get оставим открытым, это позволит нам получать значения полей(атрибутов). В LabVIEW предусмотрены VI for Data Member Access, они как раз выполняют роль геттров и сеттеров и настраиваются на чтение/запись при создании. Так же VI for Data Member Access можно привязать к property node для объекта класса.
7_Создание класса.png
7_Создание класса.png (9.5 KiB) Viewed 261 times

8_Создание класса.png
8_Создание класса.png (2.63 KiB) Viewed 261 times

Методы set и get:
9_Создание класса.png

Созданные классы будут наследоваться от базового класса. Для этого заходим в свойства класса и выбираем следующее:
10_Создание класса.png

После этого для каждого объекта класса создаём VI for Override и в диалоговом окне выбираем метод из базового класса(например метод для суммирования). После этого переопределяем реализацию метода так, как нам необходимо(можно удалить всё, оставив только входы и выходы и написать свой метод).Мы помним, что наследуем абстрактный метод, а реализацию метода определяем самостоятельно для каждого объекта класса. Тип VI for Override позволит на лету переопределять реализацию метода классов с общим родителем. Например, для классов ClassCalculator и ClassBoolCalc мы создали методы с следующей реализацией:
11_Создание класса.png

Доступ к методам открыт, поэтому если потребуется переопределить логику работы метода – достаточно указать объект нужного класса и всё поменяется автоматически.
С другой стороны, возникает резонный вопрос: а как можно использовать методы, которые принадлежат только классу конкретного объекта, а не наследуются из базового, ведь LabVIEW не поддерживает множественного наследования. Мы знаем, что класс - это шаблон, по которому создаются объекты. Чтобы вызвать метод какого-то класса, нужно создать объект этого класса, после чего обратиться к объекту для вызова его метода.
В классах ClassCalculator и ClassBoolCalc создадим еще по одному методу тип VI с именем main.vi. со следующей реализацией внутри:
12_Создание класса.png

Основная программ будет выглядеть следующим образом:
13_Создание класса.png
13_Создание класса.png (5.01 KiB) Viewed 261 times

Это программа, спроектированная по всем правилам ООП. Три класса, один базовый абстрактный и два для конкретных объектов. Данные и методы, которые обрабатывают эти данные – объединены в одном классе. Абстрактный метод «сложение» унаследован и переопределен внутри каждого класса(наследование и полиморфизм). Метод класса-родителя «сложение» может быть динамически переписан любым из классов детей.
Дерево проекта:
14_Создание класса.png
14_Создание класса.png (11.47 KiB) Viewed 261 times


Важно для себя понять, что ООП придумали для упрощения процесса сопровождения и дальнейшей разработки программного обеспечения. Извечный вопрос: где применять? Ответ:
1.В командной разработке, когда каждый программист фактически пилит свой кусок кода не нарушая общую структуру программы.
2.В проектах, которые имеют высокую степень схожести с дальнейшими проектами.
3. Удобно создавать шаблон приложения, с последующим динамическим переопределением методов класса под нужды конкретного приложения в дальнейшем.
Непривычно для меня это было делать именно в LabVIEW, но в целом суть одинаковая что в LVOOP, что в C++/Java. Конечно существует ряд отличий, но они скорее с точки зрения синтаксиса и фич, нежели философии в целом. Тем не менее я остаюсь при своём: мне сильно помогли знания, полученные из классических книг по ООП. Если бы я впервые решил освоить LVOOP по мануалам NI - то понимал бы дольше, а объем информации получил бы смешной. Чтобы спроектировать ООП-программу, нужно хорошо думать и предусматривать, чтобы как можно лучше применять абстракции. Иначе можно столкнуться с тем, что будет создан класс "всемогУн", а парадигма будет лишь на бумаге, а не в проекте.
Резюмирую: LVOOP - годно, использовать можно!
Last edited by Vitekkz88 on 08 Sep 2018, 16:57, edited 1 time in total.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
User avatar
Vitekkz88
expert
expert
 
Posts: 1033
Joined: 21 Jan 2014, 15:45
Location: Томск
Medals: 3
Activity (1) Silver (1) Автор (1)
LabVIEW Version: 12,13,14
Karma: 300
hardware I/O VIP

Re: ООП - объектно-ориентированое программирование

Postby jane_wild on 11 Sep 2018, 01:18

Тоже вот хотела бы разобраться с OOP , только вот Вы совсем запутали.
Если дочерние классы содержат свои данные A, B, C, тогда зачем они в базовом классе?
Private Data.png


Далее, на скриншотах Вы показали override методы, а вход и выход виден как базовый класс.
Override.png

и цвет проводов одинаковый.
Три main.vi в одном проекте так же не вносят ясности...

Не могли бы вы проект выложить вместо скриншотов. А то что то все смешалось в голове ... люди.. кони..
Спасибо
User avatar
jane_wild
user
user
 
Posts: 78
Joined: 30 Jun 2016, 02:11
LabVIEW Version: 2016
Karma: 0

Re: ООП - объектно-ориентированое программирование

Postby Vitekkz88 on 11 Sep 2018, 09:21

:D Ну давайте попробуем распутаться :D А каким образом Вы разбираетесь с ООП? Что читаете или смотрите? Если Вы хотите разобраться с ООП по приведенному примеру - то у Вас ничего не получится :brows: Спешу огорчить, но и вся ветка целиком вам не даст представления про ООП, а исходные коды вас еще больше запутают, инфа сотка :crazy: Скажете "А зачем тогда примеры, по которым ООП не понять?" Ответ: примеры даются для того, чтобы показать использование самой парадигмы, а не описать её как таковую.
Смотрите, я не могу пересказать Вам прочтенную литературу по этой парадигме и уложиться в пару абзацев. Это невозможно сделать и именно поэтому я указал литературу к прочтению. Пока не будет понятна модель ООП, пытаться разобраться с практикой и использовать парадигму - утопия. Вы можете выучить определения полиморфизма, инкапсуляции и наследования, но не сможете рассказать:
1. Почему инкапсуляция является фундаментальной объектно-ориентированной концепцией?
2. Каким образом наследование ослабляет инкапсуляцию?
3. А нужен ли нам полиморфизм?
4. Зачем нужны абстрактные классы?
5. Когда допускается повторное использование объектов?
etc
Понимаете? Нужно разделять фундаментальную модель и формальную реализацию этой модели в каком-либо из языков программирования. Вы пытаетесь анализировать формальную реализацию без фундаментального представления парадигмы. Это читается из Ваших вопросов:
jane_wild писал(а): Если дочерние классы содержат свои данные A, B, C, тогда зачем они в базовом классе?

Ну отвечу я так: потому что класс описывает объект, у которого есть атрибуты и методы. Абстрактный класс может содержать, а может и не содержать полей и методов. Вряд ли это внесёт ясность :D
jane_wild писал(а): Далее, на скриншотах Вы показали override методы, а вход и выход виден как базовый класс.

Методы объекта базового класса переопределены(override) в методах объектов дочерних классов. Входы и выходы были созданы автоматически при создании VI for Override, какое там было имя хз, может и переименовал, но это не важно :D Важно то, что метод принадлежит нужному классу, реализует требуемое поведение и доступ к методу выбран тот, какой запланирован.
jane_wild писал(а): Три main.vi в одном проекте так же не вносят ясности...

Ясность в том, что каждый класс - завершенный программный модуль, который встраивается в основное ПО. Разработка класса для создания полностью независимых
объектов является сутью объектно-ориентированного подхода и мне захотелось это представить таким образом.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
User avatar
Vitekkz88
expert
expert
 
Posts: 1033
Joined: 21 Jan 2014, 15:45
Location: Томск
Medals: 3
Activity (1) Silver (1) Автор (1)
LabVIEW Version: 12,13,14
Karma: 300
hardware I/O VIP

Re: ООП - объектно-ориентированое программирование

Postby jane_wild on 11 Sep 2018, 15:37

На мой взгляд, программирование это та область, где невозможно чему либо научиться без практики. Ваши рассуждения напоминают мне обед по телефону, можно договориться до того, что слюньки потекут, только вот менее голодным ты не станешь. Так же и здесь, ну знаете Вы и можете объяснить, каким образом наследование ослабляет инкапсуляцию и что? Сильно оно Вам помогает в написании кода? Можно досканально по книгам выучить как нажимать педали, управляя автомобилем, это научит Вас ездить? Я не против теории и книг, я за то, что эта самая теория должна постоянно подтверждаться практикой. Читала я книгу рекомендованную Вами - млекопитающие, собаки, кошки... пингвины вроде и птицы, а летать не умеют и тд. Вроде как все доходчиво, но как это все применить на практике? Поэтому в этой ветке хотелось бы видеть реальные примеры применения этой концепции с пояснениями, которые были бы понятными даже для женщин :wink: Например как применить OOP при создании DAQmx задач? Если создавать родительский класс, то какие атрибуты он должен содержать, для AI необходимы scales, для DI нет.... как может выглядеть интерфейс? Вообщем много вопросов....
Но к сожалению пока я вижу
Входы и выходы были созданы автоматически при создании VI for Override, какое там было имя хз.
Хотелось бы мне посмотреть на эту автоматику, когда ты override метод, а он генерируется с входным кластером другого класса... На youtube можно найти много примеров, но они в основном "делай раз, два, три" без объясниний теоритической части....
User avatar
jane_wild
user
user
 
Posts: 78
Joined: 30 Jun 2016, 02:11
LabVIEW Version: 2016
Karma: 0

Re: ООП - объектно-ориентированое программирование

Postby Artem.spb on 11 Sep 2018, 15:58

jane_wild wrote:Но к сожалению пока я вижу
Входы и выходы были созданы автоматически при создании VI for Override, какое там было имя хз.
Хотелось бы мне посмотреть на эту автоматику, когда ты override метод, а он генерируется с входным кластером другого класса...

При Override метода автоматом создаётся функция с теми же входами-выходами, что и у родителя. На то он и Override.
Artem.spb
expert
expert
 
Posts: 1371
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 237
CLD hardware I/O VIP freelance

Re: ООП - объектно-ориентированое программирование

Postby jane_wild on 11 Sep 2018, 16:25

При Override метода автоматом создаётся функция с теми же входами-выходами, что и у родителя. На то он и Override.

Вы не поняли, согласно дереву проекта, у автора базовый класс с именем BaseCalc и три динамических метода, которые override в классах ClassCalculator и ClassBoolCalc, так вот посмотрите на скриншот override add_method.vi В обоих классах входной кластер имеет BaseClass in и BaseClass out, а должны быть с именем дочернего класса ClassBoolCalc например
User avatar
jane_wild
user
user
 
Posts: 78
Joined: 30 Jun 2016, 02:11
LabVIEW Version: 2016
Karma: 0

Re: ООП - объектно-ориентированое программирование

Postby Vitekkz88 on 11 Sep 2018, 17:34

jane_wild, :D
"Теория без практики..." Поэтому, прежде чем осваивать примеры по ООП(любого языка, это важно), нужно понять саму парадигму такого программирования.
jane_wild писал(а): ну знаете Вы и можете объяснить, каким образом наследование ослабляет инкапсуляцию и что? Сильно оно Вам помогает в написании кода?
Конечно, мне очень помогает не только базовые определения, но и принципы о которых вы не прочтёте в общих обзорных материалах. Это способствует написанию более чистого, безопасного и понятного кода.
jane_wild писал(а): Читала я книгу рекомендованную Вами - млекопитающие, собаки, кошки... пингвины вроде и птицы, а летать не умеют и тд
Эммм, это вы опять же с практической стороны смотрите. Сомневаюсь, что вы прочли эту книгу, иначе вспомнили бы службу работы такси, а не зверушек :crazy: В ней про принципы и мышление приличный объем информации. Обалденная книга, просто must have и не на один раз. А Вы для обучения используете скетчи-пятиминутки на юутубе от программистов, взрощенных по мотивам "С++ за 21 день". Эт не правильно)
Хотите с пользой потратить время на ютубе? Посмотрите лекции Сергея Немчинского(Sergey Nemchinsky на ютубе, https://www.youtube.com/watch?v=-gGLSxmw3jo&t=3138s), например. Он Java-разработчик и у него есть отличный материал по ООП(вводные лекции без уклона в Java), либо аналогичный академический материал.
Всё это в купе с чтением книг даст результат. А если не даст - то не парьтесь и пишите в обычном стиле, LabVIEW это позволяет без проблэм.
Реальные примеры? Четвертое сообщение в ветке : viewtopic.php?f=23&t=191#p3007
Где и как применять я писал выше, пропустим.
Если у Вас простая задача для DAQmx, - то ООП тут избыточно и написать обычным стилем будет проще/быстрее. Исходить нужно не просто из базового класса, а из базового абстрактного класса, которым будет являться "оборудование", от этого класса будут наследоваться другие классы, которые будут описывать объекты с полями и методами. Так же у Вас могут быть независимые классы или классы, которые будут наследоваться не от базового класса. Вообще тема по наследованию(опять же возвращаясь к лекциям и книгам) - очень такая узкая, накосячить можно будь здоров. Идеальным классом считается тот, который ни от кого ничего не наследует(ну кроме абстрактного). Он просто наружу выводит пару тройку методов для взаимодействия и всооо, давайте данные, а я их там сам внутри себя как надо обработаю и наружу результат отдам.
jane_wild писал(а): Вы не поняли...входной кластер имеет BaseClass in и BaseClass out, а должны быть с именем дочернего класса ClassBoolCalc например
Да вот как раз Артём меня понял :brows: Почему должны быть с именем дочернего класса? :nono: Вы работаете с ОБЪЕКТОМ или с ссылками на ОБЪЕКТ, но никак не с именем выходного терминала.
Attachments
1_Создание класса.png
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
User avatar
Vitekkz88
expert
expert
 
Posts: 1033
Joined: 21 Jan 2014, 15:45
Location: Томск
Medals: 3
Activity (1) Silver (1) Автор (1)
LabVIEW Version: 12,13,14
Karma: 300
hardware I/O VIP

Re: ООП - объектно-ориентированое программирование

Postby jane_wild on 11 Sep 2018, 18:18

иначе вспомнили бы службу работы такси

Это Вы про то что клиенту не нужно знать как до аэропорта добраться, а водитель не должен знать как устроен двигатель (инкапсуляция)....
Да Бог с ним, я про то, что примеров OOP для LV, с толковыми объяенениями нет. Вот где вы увидели реальный пример в скриншоте четвертого сообщения? Собственно так же как и у Вас, как бы теорию рассказали, а проект не выложили ... и что там такого секретного? Или места много занимает?
А вот за ссылку на youtube спасибо, на досуге посмотрю.
User avatar
jane_wild
user
user
 
Posts: 78
Joined: 30 Jun 2016, 02:11
LabVIEW Version: 2016
Karma: 0

PreviousNext

Return to Модели программирования

Who is online

Users browsing this forum: No registered users and 3 guests

cron