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

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

Activity
assistant
assistant
Сообщения: 113
Зарегистрирован: 11 авг 2011, 15:45
Награды: 1
Версия LabVIEW: 2011
Откуда: Москва
Контактная информация:

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

Сообщение mxdamage »

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

В данном примере channel ref является ребенком channel, и хочет получить его свойства
Безымянный.png
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

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

Сообщение mzu2006 »

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

вообще же вопрос интересен. Кратко, 3 замечания:
- В стандартном шаблоне проектирования SIngleton методы переносятся вручную.
- Можно написать прибамбас методами скриптинга
- В принципе для реализации одинакового интерфейса нескольких объектов - есть инструментарий интерфейсов. Типовой реализации нет. Более-менее успешные попытка сделана здесь :http://lavag.org/topic/10040-exterface-architecture/
Аватара пользователя
mxdamage

Activity
assistant
assistant
Сообщения: 113
Зарегистрирован: 11 авг 2011, 15:45
Награды: 1
Версия LabVIEW: 2011
Откуда: Москва
Контактная информация:

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

Сообщение mxdamage »

Спасибо большое за комментарий!
mzu2006 писал(а):В данном примере скорее всего ошибка проектирования: класс ссылки сделан производным от основного.
Это да, это были мои эксперименты, и больше я не делаю так. Честно-честно )
Но вопрос не состоял в том, правильно ли я составил структуру классов, а как создать из родителя ребенка, передав ему все свойства родителя. Мне такая возможность казалась очевидной, а на деле оказалось все гораздо сложнее:
mzu2006 писал(а): - В стандартном шаблоне проектирования SIngleton методы переносятся вручную.
- Можно написать прибамбас методами скриптинга
- В принципе для реализации одинакового интерфейса нескольких объектов - есть инструментарий интерфейсов. Типовой реализации нет. Более-менее успешные попытка сделана здесь :http://lavag.org/topic/10040-exterface-architecture/
Видимо, ООП не предполагает такого обращения с классами. Далеко пока еще до Object-oriented thinking
Аватара пользователя
drzet
interested
interested
Сообщения: 3
Зарегистрирован: 08 сен 2011, 21:26
Версия LabVIEW: 2012
Откуда: Пермь

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

Сообщение drzet »

Всем привет!
Пытаюсь реализовать следующую задачу: различные объекты находятся на одной машине в сети Ethernet, назовем ее "контроллер", а с "хоста" (другая машина в сети) требуется управлять данными объектами, т.е. обращаться к ним также через их методы. На самом "контроллере" проблем нет, а вот как сделать обмен методов по сети? Думал, через shared variables. Но тогда получится нарушение инкапсуляции...
Аватара пользователя
Aleksey Feoktistov

Activity Gold Silver Black
leader
leader
Сообщения: 898
Зарегистрирован: 20 янв 2009, 00:15
Награды: 6
Версия LabVIEW: 2015
Откуда: Tyumen
Поблагодарили: 2 раза
Контактная информация:

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

Сообщение Aleksey Feoktistov »

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

Каким образом лучше записывать и считывать значения конкретного Тэга (в цикле или как-то еще)?
Если у меня 100 переменных Tag, то как мне лучше организовать корень программы?
Такого опыта у меня нет и мозг взрывается когда пытаюсь представить структуру такой программы :suicide:
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

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

Сообщение Borjomy_1 »

Если очень упрощенно, то объект (Obj) это кластер. И данные внутри кластера связаны с внешним миром через методы и свойства. Для того, чтобы контролировать запись и чтение свойств и нужны propertyes. Можно обойтись и без объекта и работать с кластером. А методы обеспечивать с помощью SubVI. Будет практически тоже самое.
Для работы создаешь массив из 100 твоих объектов. Выделяешь индексом необходимый и производишь с ним манипуляции с помощью методов. Потом не забудь записать результат (выходной объект) обратно в массив. Иначе ничего не сохранится. Точно так-же, как и с кластером. Некоторые особо продвинутые оперируют не объектом, а ссылкой на него (палитра Program/Application Control/Memory Control/Data Value Reference. В таком случае при обращении к объекту данные сохраняются автоматически. При создании метода просто замени контролы объектов на Data Value Reference (с вложением контрола объекта)
Аватара пользователя
taras_33

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

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

Сообщение taras_33 »

Можно создать Родительский клас со своими методами, а все переменные-классы наследовать от него. В этом случае все наследники унаследуют и все родительские методы, а не только данные. Для каждого наследника будет создана своя копия данных, которыми можно манипулировать методами родителя, а можно добавить свои собственные. Причем родительский метод можно перезаписать (override) или оставить как есть. Например во вложенном проекте, Child 1 override строку и изменяя дату, Child 2 override родительский метод Manipulate with Number умножая число на 5. Вообщем посмотрите вложенный проект
Вложения
Test.zip
(146.38 КБ) 373 скачивания
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!
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

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

Сообщение Vitekkz88 »

Поднимаются темы про ООП, поэтому 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 КБ) 5783 просмотра
Видим пустой кластер с именем Cluster of class private data. В этом кластере необходимо описать атрибуты(поля) объекта класса. Внесем в кластер 3 поля: А, В, С . Два поля будут отвечать за входные числа для мат.операций, третье поле будет хранить результат.
3_Создание класса.png
3_Создание класса.png (2.93 КБ) 5783 просмотра
Создадим абстрактные методы для выполнения математических операций суммы, умножения, вычитания:
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 КБ) 5783 просмотра
Для каждого класса создадим пары методов: set и get как VI(про теорию использования геттеров и сеттеров почитайте либо в книге, либо в гугле). Хорошим тоном в ООП считается иметь пару таких методов для каждого атрибута объекта класса. С помощью этих методов будем задавать и получать значения полей. Метод set для каждого объекта будет закрытым. Это позволит нам защитить поля от изменения вне класса для определенного объекта. Метод get оставим открытым, это позволит нам получать значения полей(атрибутов). В LabVIEW предусмотрены VI for Data Member Access, они как раз выполняют роль геттров и сеттеров и настраиваются на чтение/запись при создании. Так же VI for Data Member Access можно привязать к property node для объекта класса.
7_Создание класса.png
7_Создание класса.png (9.5 КБ) 5783 просмотра
8_Создание класса.png
8_Создание класса.png (2.63 КБ) 5783 просмотра
Методы 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 КБ) 5783 просмотра
Это программа, спроектированная по всем правилам ООП. Три класса, один базовый абстрактный и два для конкретных объектов. Данные и методы, которые обрабатывают эти данные – объединены в одном классе. Абстрактный метод «сложение» унаследован и переопределен внутри каждого класса(наследование и полиморфизм). Метод класса-родителя «сложение» может быть динамически переписан любым из классов детей.
Дерево проекта:
14_Создание класса.png
14_Создание класса.png (11.47 КБ) 5783 просмотра
Важно для себя понять, что ООП придумали для упрощения процесса сопровождения и дальнейшей разработки программного обеспечения. Извечный вопрос: где применять? Ответ:
1.В командной разработке, когда каждый программист фактически пилит свой кусок кода не нарушая общую структуру программы.
2.В проектах, которые имеют высокую степень схожести с дальнейшими проектами.
3. Удобно создавать шаблон приложения, с последующим динамическим переопределением методов класса под нужды конкретного приложения в дальнейшем.
Непривычно для меня это было делать именно в LabVIEW, но в целом суть одинаковая что в LVOOP, что в C++/Java. Конечно существует ряд отличий, но они скорее с точки зрения синтаксиса и фич, нежели философии в целом. Тем не менее я остаюсь при своём: мне сильно помогли знания, полученные из классических книг по ООП. Если бы я впервые решил освоить LVOOP по мануалам NI - то понимал бы дольше, а объем информации получил бы смешной. Чтобы спроектировать ООП-программу, нужно хорошо думать и предусматривать, чтобы как можно лучше применять абстракции. Иначе можно столкнуться с тем, что будет создан класс "всемогУн", а парадигма будет лишь на бумаге, а не в проекте.
Резюмирую: LVOOP - годно, использовать можно!
Последний раз редактировалось Vitekkz88 08 сен 2018, 16:57, всего редактировалось 1 раз.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Аватара пользователя
jane_wild
master
master
Сообщения: 459
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 83 раза
Поблагодарили: 15 раз
Контактная информация:

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

Сообщение jane_wild »

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

Не могли бы вы проект выложить вместо скриншотов. А то что то все смешалось в голове ... люди.. кони..
Спасибо
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

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

Сообщение Vitekkz88 »

: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 в одном проекте так же не вносят ясности...
Ясность в том, что каждый класс - завершенный программный модуль, который встраивается в основное ПО. Разработка класса для создания полностью независимых
объектов является сутью объектно-ориентированного подхода и мне захотелось это представить таким образом.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Аватара пользователя
jane_wild
master
master
Сообщения: 459
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 83 раза
Поблагодарили: 15 раз
Контактная информация:

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

Сообщение jane_wild »

На мой взгляд, программирование это та область, где невозможно чему либо научиться без практики. Ваши рассуждения напоминают мне обед по телефону, можно договориться до того, что слюньки потекут, только вот менее голодным ты не станешь. Так же и здесь, ну знаете Вы и можете объяснить, каким образом наследование ослабляет инкапсуляцию и что? Сильно оно Вам помогает в написании кода? Можно досканально по книгам выучить как нажимать педали, управляя автомобилем, это научит Вас ездить? Я не против теории и книг, я за то, что эта самая теория должна постоянно подтверждаться практикой. Читала я книгу рекомендованную Вами - млекопитающие, собаки, кошки... пингвины вроде и птицы, а летать не умеют и тд. Вроде как все доходчиво, но как это все применить на практике? Поэтому в этой ветке хотелось бы видеть реальные примеры применения этой концепции с пояснениями, которые были бы понятными даже для женщин :wink: Например как применить OOP при создании DAQmx задач? Если создавать родительский класс, то какие атрибуты он должен содержать, для AI необходимы scales, для DI нет.... как может выглядеть интерфейс? Вообщем много вопросов....
Но к сожалению пока я вижу
Входы и выходы были созданы автоматически при создании VI for Override, какое там было имя хз.
Хотелось бы мне посмотреть на эту автоматику, когда ты override метод, а он генерируется с входным кластером другого класса... На youtube можно найти много примеров, но они в основном "делай раз, два, три" без объясниний теоритической части....
Artem.spb

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

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

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

jane_wild писал(а):Но к сожалению пока я вижу
Входы и выходы были созданы автоматически при создании VI for Override, какое там было имя хз.
Хотелось бы мне посмотреть на эту автоматику, когда ты override метод, а он генерируется с входным кластером другого класса...
При Override метода автоматом создаётся функция с теми же входами-выходами, что и у родителя. На то он и Override.
Аватара пользователя
jane_wild
master
master
Сообщения: 459
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 83 раза
Поблагодарили: 15 раз
Контактная информация:

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

Сообщение jane_wild »

При Override метода автоматом создаётся функция с теми же входами-выходами, что и у родителя. На то он и Override.
Вы не поняли, согласно дереву проекта, у автора базовый класс с именем BaseCalc и три динамических метода, которые override в классах ClassCalculator и ClassBoolCalc, так вот посмотрите на скриншот override add_method.vi В обоих классах входной кластер имеет BaseClass in и BaseClass out, а должны быть с именем дочернего класса ClassBoolCalc например
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

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

Сообщение Vitekkz88 »

jane_wild, :D
"Теория без практики..." Поэтому, прежде чем осваивать примеры по ООП(любого языка, это важно), нужно понять саму парадигму такого программирования.
jane_wild писал(а): ну знаете Вы и можете объяснить, каким образом наследование ослабляет инкапсуляцию и что? Сильно оно Вам помогает в написании кода?
Конечно, мне очень помогает не только базовые определения, но и принципы о которых вы не прочтёте в общих обзорных материалах. Это способствует написанию более чистого, безопасного и понятного кода.
jane_wild писал(а): Читала я книгу рекомендованную Вами - млекопитающие, собаки, кошки... пингвины вроде и птицы, а летать не умеют и тд
Эммм, это вы опять же с практической стороны смотрите. Сомневаюсь, что вы прочли эту книгу, иначе вспомнили бы службу работы такси, а не зверушек :crazy: В ней про принципы и мышление приличный объем информации. Обалденная книга, просто must have и не на один раз. А Вы для обучения используете скетчи-пятиминутки на юутубе от программистов, взрощенных по мотивам "С++ за 21 день". Эт не правильно)
Хотите с пользой потратить время на ютубе? Посмотрите лекции Сергея Немчинского(Sergey Nemchinsky на ютубе, например. Он Java-разработчик и у него есть отличный материал по ООП(вводные лекции без уклона в Java), либо аналогичный академический материал.
Всё это в купе с чтением книг даст результат. А если не даст - то не парьтесь и пишите в обычном стиле, LabVIEW это позволяет без проблэм.
Реальные примеры? Четвертое сообщение в ветке : http://www.labviewportal.org/viewtopic. ... =191#p3007
Где и как применять я писал выше, пропустим.
Если у Вас простая задача для DAQmx, - то ООП тут избыточно и написать обычным стилем будет проще/быстрее. Исходить нужно не просто из базового класса, а из базового абстрактного класса, которым будет являться "оборудование", от этого класса будут наследоваться другие классы, которые будут описывать объекты с полями и методами. Так же у Вас могут быть независимые классы или классы, которые будут наследоваться не от базового класса. Вообще тема по наследованию(опять же возвращаясь к лекциям и книгам) - очень такая узкая, накосячить можно будь здоров. Идеальным классом считается тот, который ни от кого ничего не наследует(ну кроме абстрактного). Он просто наружу выводит пару тройку методов для взаимодействия и всооо, давайте данные, а я их там сам внутри себя как надо обработаю и наружу результат отдам.
jane_wild писал(а): Вы не поняли...входной кластер имеет BaseClass in и BaseClass out, а должны быть с именем дочернего класса ClassBoolCalc например
Да вот как раз Артём меня понял :brows: Почему должны быть с именем дочернего класса? :nono: Вы работаете с ОБЪЕКТОМ или с ссылками на ОБЪЕКТ, но никак не с именем выходного терминала.
Вложения
1_Создание класса.png
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Аватара пользователя
jane_wild
master
master
Сообщения: 459
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 83 раза
Поблагодарили: 15 раз
Контактная информация:

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

Сообщение jane_wild »

иначе вспомнили бы службу работы такси
Это Вы про то что клиенту не нужно знать как до аэропорта добраться, а водитель не должен знать как устроен двигатель (инкапсуляция)....
Да Бог с ним, я про то, что примеров OOP для LV, с толковыми объяенениями нет. Вот где вы увидели реальный пример в скриншоте четвертого сообщения? Собственно так же как и у Вас, как бы теорию рассказали, а проект не выложили ... и что там такого секретного? Или места много занимает?
А вот за ссылку на youtube спасибо, на досуге посмотрю.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Модели программирования»