-
- Смысл не просто зажечь светодиод а зажечь светодиод с помощью
единого интерфейса независимо от того находится ли светодиод на
локальном пине, на шине, доступен через модбас или этот светодиод
на марсоходе, а марсоход уже летит в грунт. Boвa(24 знак., 23.06.2024 13:42 - 13:52)
- Вы пытаетесь свалить в одну кучу сущности обладающие принципиально
разными свойствами, это неприемлемо!!! Кстати типовая фича
ООПшнутых. Светодиод на GPIO зажгется всегда и мгновенно, светодиод
на hc595 зажгется после завершения spi транзакции а на модбас может
не зажечься вовсе если связь потеряна. А теперь представьте что
другой такой же гений абстракций применит ваш класс для управления
сигналом DE трансивера RS485 через оптрон (а ЧО, этож светодиод) а
оно на 595 регистре. 3m(41 знак., 23.06.2024 14:15)
- Класс Led не получится применить для RS485, если он нормально
спроектирован. Компилятор ошибку должен выдать. На этапе написания
кода даже будет ошибка. В этом суть. И на другой плате тот же код
будет работать, достаточно лишь нижний слой-распиновну сменить. А
Скрипач будет все свои функции переписывать. - Costic(24.06.2024 23:28)
- Этот, как его.. паттерн "мост" Tyмблep(1 знак., 05.07.2024 15:14, ссылка)
- Небезинтересно. Спасибо :) Cкpипaч(354 знак., 05.07.2024 15:54)
- Не совсем. Tyмблep(847 знак., 05.07.2024 17:59)
- Неправильное понимание паттерна "мост" и его назначения. Сразу пишу
что неправильно, это тонкий вопрос в дизайне и архитектуре. Смысл
паттерна "мост" не в том, чтобы соорудить некую общую абстракцию и
наделять её смысловой реализацией, разделив их. Смысл только в том
чтобы технически разделить интерфейс и технически позволить
подменять актуальную реализацию. И абстракция-интерфейс и
реализация как правило чётко определены (т.е. вообще-то глобально
мы ЗНАЕМ, однако так RxTx(1596 знак., 05.07.2024 20:34)
- Нет, не согласен. Tyмблep(1843 знак., 08.07.2024 15:44)
- Наследование вообще применимо мало где. Потому что оно предполагает
строгую иерархию без побочных эффектов. А это применимо только для
полностью абстрактных вещей типа графики, оконной системы. Там где
голимая математика в памяти можно строить иерархию классов. Как
только появляются реальные физические объекты лучше убегать в
сторону агрегирования указателей и т.п. - =AlexD=(08.07.2024 15:45)
- Приехали. =:0 Tyмблep(539 знак., 08.07.2024 15:53)
- Абстрактный класс - это костыль плюсиков, в которых изначально не
было интерфейсов. Кстати, кто-то из великих плюсоводов писал что
дружественные функции пользительнее для здоровья. - =AlexD=(08.07.2024 16:16)
- "Это другое, понимать надо" (c) Tyмблep(557 знак., 15.07.2024 14:14)
- Я и не сравниваю. Я абисняю что согласно последней моде
наследоваться - харам (за исключение абстрактных костылей типа
интерфейсов). Самый простой путь получить доступ к внутренностям -
унаследоваться, что 98% плюсовых погромиздов и делают. А дружить -
это же ДУМАТЬ надоть. Нафих вообще... - =AlexD=(15.07.2024 15:33)
- Не знаю про моду. Tyмблep(1344 знак., 16.07.2024 15:20)
- Ну, полюбому, реализовать "отличие...числовой константой" вы должны
ручками. Сами. А, потом, гордо, пользоваться получившимся объектом.
Хотя, чисто механически, смысла в этом осталось не так чтобы много. - mse homjak(16.07.2024 15:48)
- Ещё бы ! Tyмблep(440 знак., 16.07.2024 17:38)
- Не понял, почему "ручками гораздо дольше"? Не, можно упороться на
ровном месте, моё почтение. Спору нет. Но если у вас ужэ есть набор
параметризируемых функцый, то что за проблема просто передавать в
ужэ написанную функцыю параметр, соотвецтвующий конкретной микруле? mse homjak(324 знак., 16.07.2024 17:59)
- Как бы почти же самое. Tyмблep(1795 знак., 16.07.2024 18:18)
- Ну и? Все процедуры должны быть вами написаны! Под требования ООП.
Все "классы-предки", это просто абстракция. Физически, это,
условно, функция, в которую передаётся условный указатель на список
параметров конкретного жука. Которая вами написана. Вся роль
"классовой боротьбы", это передача параметров(которые вы ужэ
подготовили) в функции(котрые вы ужэ написали). Это всё хорошо и
выгодно, если всю работу за вас сделал дядя, а вы только
пользуетесь. Но дядя, как правило, не в mse homjak(49 знак., 16.07.2024 19:54)
- Просто хаос в голове. Tyмблep(1531 знак., 22.07.2024 16:43)
- Вы полюбому напишете эти процэдуры с параметрами, в том или ином
виде. mse homjak(703 знак., 22.07.2024 18:27)
- А вы хотели, чтобы процедуры сами собой взошли, без труда ? Типа
крекс-фекс-пекс - и готово ? Tyмблep(343 знак., 22.07.2024 20:10)
- Ну? Я-жэ и говорю:"жмёшь кнопку, мешок на спине, жмёшь другую, спина в мыле". mse homjak(138 знак., 22.07.2024 20:55)
- Бывает. У меня именно так. Без всех этих огромных (но бесполезных)
надстроек. Cкpипaч(323 знак., 22.07.2024 20:19)
- Что бывает ? Tyмблep(194 знак., 22.07.2024 20:22)
- Бывает - "типа крекс-фекс-пекс - и готово". Cкpипaч(152 знак., 22.07.2024 20:32)
- Что бывает ? Tyмблep(194 знак., 22.07.2024 20:22)
- А вы хотели, чтобы процедуры сами собой взошли, без труда ? Типа
крекс-фекс-пекс - и готово ? Tyмблep(343 знак., 22.07.2024 20:10)
- СТМовский Куб обходится как-то без этого мракобесия. И его
применение не вызывает особых затруднений. Есть претензия к
качеству кода, но этодругое. - =AlexD=(22.07.2024 16:55)
- Кстати, интересный вопрос, почему в КУБ-е не использовали эти
возможности С++? - AlexBi(22.07.2024 18:53)
- А смысл? Делать две разные либы - одна на Си, другая на С++? Не, ну сделать свои обёртки они конечно могут, но видимо не видят смысла в лишней работе. - =AlexD=(23.07.2024 09:27)
- Вероятно, я знаю эту тайну. Tyмблep(732 знак., 22.07.2024 20:47)
- Опытные программисты знают что если пишешь не для себя, а для
использования другими, то лучше не применять всю мощь плюсов без
особой необходимости. Иначе потом замучают вопросами "как это
использовать?" и воплями "ничего не понятно" и "ничего не
работает". А сделать библиотеку которую смогут использовать не
заглядывая внутрь - это ещё более сложная задача, особенно когда
процессор в 200 раз медленнее и памяти в миллион раз меньше. - ЫЫyкпy(23.07.2024 08:46)
- Основная проблема объектных библиотек (вне зависимости от языка) в том, что авторы не могут предусмотреть все варианты использования. А чаще всего возникает необходимость использовать какую-то часть библиотеки отдельно, вне иерархии. Например не на поток данных, а на файл или структуру в памяти. Процедурные библиотеки в этом плане проще, там только с хедерами могут накосячить, напихав в них всё что ни попадя. Но с этим можно бороться. С иерархией классов уже ничего не сделать =AlexD=(1 знак., 23.07.2024 09:24)
- С++ с современными возможностями, метапрограммированием выглядит не таким простым как С - AlexBi(22.07.2024 23:39)
- Опытные программисты знают что если пишешь не для себя, а для
использования другими, то лучше не применять всю мощь плюсов без
особой необходимости. Иначе потом замучают вопросами "как это
использовать?" и воплями "ничего не понятно" и "ничего не
работает". А сделать библиотеку которую смогут использовать не
заглядывая внутрь - это ещё более сложная задача, особенно когда
процессор в 200 раз медленнее и памяти в миллион раз меньше. - ЫЫyкпy(23.07.2024 08:46)
- А что это даст? (ну кроме самого по себе "использования") - Cкpипaч(22.07.2024 20:18)
- Программа станет более понятной, меньше по объему, написанному руками (код КУБа не учитываем), лучше контроль ошибок несовместимости настроек (заполняя разные структуры легко ошибиться), результирующий код меньше/быстрее (оптимизатор еще не так крут, на сколько мне известно) - AlexBi(22.07.2024 23:36)
- Кстати, интересный вопрос, почему в КУБ-е не использовали эти
возможности С++? - AlexBi(22.07.2024 18:53)
- Вы полюбому напишете эти процэдуры с параметрами, в том или ином
виде. mse homjak(703 знак., 22.07.2024 18:27)
- Просто хаос в голове. Tyмблep(1531 знак., 22.07.2024 16:43)
- Ну и? Все процедуры должны быть вами написаны! Под требования ООП.
Все "классы-предки", это просто абстракция. Физически, это,
условно, функция, в которую передаётся условный указатель на список
параметров конкретного жука. Которая вами написана. Вся роль
"классовой боротьбы", это передача параметров(которые вы ужэ
подготовили) в функции(котрые вы ужэ написали). Это всё хорошо и
выгодно, если всю работу за вас сделал дядя, а вы только
пользуетесь. Но дядя, как правило, не в mse homjak(49 знак., 16.07.2024 19:54)
- Как бы почти же самое. Tyмблep(1795 знак., 16.07.2024 18:18)
- Не понял, почему "ручками гораздо дольше"? Не, можно упороться на
ровном месте, моё почтение. Спору нет. Но если у вас ужэ есть набор
параметризируемых функцый, то что за проблема просто передавать в
ужэ написанную функцыю параметр, соотвецтвующий конкретной микруле? mse homjak(324 знак., 16.07.2024 17:59)
- Ещё бы ! Tyмблep(440 знак., 16.07.2024 17:38)
- Ну, полюбому, реализовать "отличие...числовой константой" вы должны
ручками. Сами. А, потом, гордо, пользоваться получившимся объектом.
Хотя, чисто механически, смысла в этом осталось не так чтобы много. - mse homjak(16.07.2024 15:48)
- Не знаю про моду. Tyмблep(1344 знак., 16.07.2024 15:20)
- Я и не сравниваю. Я абисняю что согласно последней моде
наследоваться - харам (за исключение абстрактных костылей типа
интерфейсов). Самый простой путь получить доступ к внутренностям -
унаследоваться, что 98% плюсовых погромиздов и делают. А дружить -
это же ДУМАТЬ надоть. Нафих вообще... - =AlexD=(15.07.2024 15:33)
- "Это другое, понимать надо" (c) Tyмблep(557 знак., 15.07.2024 14:14)
- Абстрактный класс - это костыль плюсиков, в которых изначально не
было интерфейсов. Кстати, кто-то из великих плюсоводов писал что
дружественные функции пользительнее для здоровья. - =AlexD=(08.07.2024 16:16)
- Приехали. =:0 Tyмблep(539 знак., 08.07.2024 15:53)
- Наследование вообще применимо мало где. Потому что оно предполагает
строгую иерархию без побочных эффектов. А это применимо только для
полностью абстрактных вещей типа графики, оконной системы. Там где
голимая математика в памяти можно строить иерархию классов. Как
только появляются реальные физические объекты лучше убегать в
сторону агрегирования указателей и т.п. - =AlexD=(08.07.2024 15:45)
- Нет, не согласен. Tyмблep(1843 знак., 08.07.2024 15:44)
- Модуль dummy_led.c+h и две функции в нем. Позднее, вместо dummy_led можно подключить в проект любой другой. - Cкpипaч(05.07.2024 18:08)
- Неправильное понимание паттерна "мост" и его назначения. Сразу пишу
что неправильно, это тонкий вопрос в дизайне и архитектуре. Смысл
паттерна "мост" не в том, чтобы соорудить некую общую абстракцию и
наделять её смысловой реализацией, разделив их. Смысл только в том
чтобы технически разделить интерфейс и технически позволить
подменять актуальную реализацию. И абстракция-интерфейс и
реализация как правило чётко определены (т.е. вообще-то глобально
мы ЗНАЕМ, однако так RxTx(1596 знак., 05.07.2024 20:34)
- Не совсем. Tyмблep(847 знак., 05.07.2024 17:59)
- Небезинтересно. Спасибо :) Cкpипaч(354 знак., 05.07.2024 15:54)
- Почему? Прерпишется функцыя setLedState(0/1). Собсно, "нижний слой-распиновка". Зачем переписывать все функцыи? - mse homjak(25.06.2024 16:38)
- Ошибки в момент компиляции можно избежать, но код конечно правильно работать не будет. Однако это не говорит о плохости так как умелый программист всегда найдет 1000 способов вышибить себе мозги. Boвa(262 знак., 25.06.2024 00:19)
- У него будет изменён только нижний слой, платформозависимый.
Бизнес-логика ни одной строчкой не поменяется. - POV(24.06.2024 23:35)
- Даже дата-время последнего обращения у файлов с бизнес-логикой не изменится (что, к слову, тоже небесполезно). - Cкpипaч(25.06.2024 08:01)
- Этот, как его.. паттерн "мост" Tyмблep(1 знак., 05.07.2024 15:14, ссылка)
- Та самая дырявая в абстракция - имет больше свойств чем описано в интерфейсе. Если мы хотим единообразия в таком вопросе, то интерфейс нужно расширять методами и кодами ошибок на весь зоопарк, даже на ногопортовый светодиод. А это куча лишней писанины и ещё больше лишних проверок в коде. Изредка в этом есть смысл, например для плагинов. Но чаще - нет. - =AlexD=(24.06.2024 09:54)
- Точнее "довожу до абсурда". - Boвa(23.06.2024 14:51)
- С дуру и хрен сломать можно :) - VladislavS.(23.06.2024 14:20)
- Класс Led не получится применить для RS485, если он нормально
спроектирован. Компилятор ошибку должен выдать. На этапе написания
кода даже будет ошибка. В этом суть. И на другой плате тот же код
будет работать, достаточно лишь нижний слой-распиновну сменить. А
Скрипач будет все свои функции переписывать. - Costic(24.06.2024 23:28)
- Не стоит брать слишком большую лопату. - Cкpипaч(23.06.2024 13:44)
- +1 - Гyдвин(23.06.2024 14:31)
- Вы пытаетесь свалить в одну кучу сущности обладающие принципиально
разными свойствами, это неприемлемо!!! Кстати типовая фича
ООПшнутых. Светодиод на GPIO зажгется всегда и мгновенно, светодиод
на hc595 зажгется после завершения spi транзакции а на модбас может
не зажечься вовсе если связь потеряна. А теперь представьте что
другой такой же гений абстракций применит ваш класс для управления
сигналом DE трансивера RS485 через оптрон (а ЧО, этож светодиод) а
оно на 595 регистре. 3m(41 знак., 23.06.2024 14:15)
- В данной теме светодиод это лишь сущность для обсуждения принципов без залезания в дебри. - VladislavS.(23.06.2024 13:36)
- Смысл не просто зажечь светодиод а зажечь светодиод с помощью
единого интерфейса независимо от того находится ли светодиод на
локальном пине, на шине, доступен через модбас или этот светодиод
на марсоходе, а марсоход уже летит в грунт. Boвa(24 знак., 23.06.2024 13:42 - 13:52)