Вопрос по ООП

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

2

b707 пишет:

sadman41 пишет:

Наворачивание внутри класса связных списков неизвестной размерности ради того, чтобы кто-то мог одной функцией раз в пятилетку "опросить все кнопки" наврядли можно назвать эффективным распоряжением ресурсов, как минимум.

+100

Почему вопрос ТС вызвал флейм и почему автора не устроили ответы? - очень просто. потому что его вопрос в отрыве от конкретной задачи смысла не имеет. Надо знать, что это за кнопки. сколько их, насколько похожа или отличается их функция...

если речь про 110 кнопок клавиатуры - обьединение их в один класс оправдано, так как работа с каждой кнопкой повторяет соседнюю. Если же одна кнопка - кнопка энкодера, а другая - включение питания внешнего модуля. то обьядинять их в один класс  незачем. кнопки разные по сути и работать с ними нужно совершенно по разному.

Собственно говоря, я это прекрасно понимаю и говорил об однотипных кнопках. 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

BOOM пишет:
Собственно говоря, я это прекрасно понимаю и говорил об однотипных кнопках. 

А о переходе количество в качество не слышали. Если 1-2 кнопки , то можно плясать как одинарный клик,двойной,долгое нажатие. Но вот если из одиночных кнопок собирается клавиатура, то здесь эти пляски уже вредны.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

qwone пишет:

BOOM пишет:
Собственно говоря, я это прекрасно понимаю и говорил об однотипных кнопках. 

А о переходе количество в качество не слышали. Если 1-2 кнопки , то можно плясать как одинарный клик,двойной,долгое нажатие. Но вот если из одиночных кнопок собирается клавиатура, то здесь эти пляски уже вредны.

Об этом, действительно не знал. Да что там и не подумал, что это может вызвать проблемы. То есть если 2 десятка кнопок, то двойные нажатия и тем более многократные могут привести к коллапсу? Или я не верно понял? После работы иногда мозг не все адекватно воспринимает. 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Ну вы работали на убитой мышке, где правая , левая кнопка заедает. Вот так и будет чувствовать себе пользователь вашей программы. Это как камушек в ботинке . Ходить можно,но б**я, убил бы производителя.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

BOOM пишет:

sadman41 пишет:

BOOM пишет:
И не противоречит ли это «написанию хорошего кода».

"Хороший код" превращается в отвратительный, как только перестаёт быть или эффективным или понятным.

Наворачивание внутри класса связных списков неизвестной размерности ради того, чтобы кто-то мог одной функцией раз в пятилетку "опросить все кнопки" наврядли можно назвать эффективным распоряжением ресурсов, как минимум.

Про бритву Оккама читали?

Понял, то есть такая реализация - далека от совершенства, от слова - вообще.

Про бритву с удовольствием прочту. Если можно ссылку дать? Если нет - постараюсь сам найти. 

Прочел, не знал просто раньше, что  "множить сущности" - это бритва Оккама....

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

qwone пишет:

Ну вы работали на убитой мышке, где правая , левая кнопка заедает. Вот так и будет чувствовать себе пользователь вашей программы. Это как камушек в ботинке . Ходить можно,но б**я, убил бы производителя.

Правильно ли я понимаю, что это зависит от количества используемых кнопок? Но ведь если обрабатывать тоже количество кнопок по отдельности, могут возникнуть похожие сценарии. Или я не прав в рассуждении?

sadman41
Offline
Зарегистрирован: 19.10.2016

BOOM пишет:

Прочел, не знал просто раньше, что  "множить сущности" - это бритва Оккама....

Не множить сущности.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

sadman41 пишет:

BOOM пишет:

Прочел, не знал просто раньше, что  "множить сущности" - это бритва Оккама....

Не множить сущности.

Да да, прошу прощения. Не множить сущности. 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Скорее не правильно понимаете. Программирование это не написание сферического коня в вакууме, а учет кучи компромиссов. И эти компромиссы могут вылезти когда уже все время и деньги потрачены.

anarch
Offline
Зарегистрирован: 10.09.2017

Кхе...кхе... я не спрашивал про то как реализовать обработчик...

Я спросил можно ли как то из класса дернуть все его объекты единовременно.

Будь то это кнопки или датчики температуры и т.д.

Часть накинулась непонятно с чем, другая принялась показывать примеры обработчиков. 

P.S. пытался перевести в нужное русло. задавал вопрос по тому как реализовывать, наследовать класы с сетевым соединением, когда соединение нужно нескольким объектам. Но форум поплыл своим курсом.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

anarch пишет:

Кхе...кхе... я не спрашивал про то как реализовать обработчик...

Я спросил можно ли как то из класса дернуть все его объекты единовременно.

Будь то это кнопки или датчики температуры и т.д.

Часть накинулась непонятно с чем, другая принялась показывать примеры обработчиков. 

P.S. пытался перевести в нужное русло. задавал вопрос по тому как реализовывать, наследовать класы с сетевым соединением, когда соединение нужно нескольким объектам. Но форум поплыл своим курсом.

А что за буза? Собственно все обсудили и ответили Вам. Или массивы или как я предложил - списки. Никто ни на что не накидывался. Вы поймите, вопрос частный на форуме - это решения (возможные) для большинства. Эго Ваше тут ни в русло, ни в камень. 

ЗЫ: Ещё и моменты реализации для Вас же обсудили. Делайте выводы и вперёд! А если готовое решение если надо - мало вероятно что помогут. Я по своим знаниям могу чего подкинуть от нефиг делать, но это точно не тот случай. 

anarch
Offline
Зарегистрирован: 10.09.2017

qwone пишет:

anarch, Вы можете отличить графическую среду разработки от просто среды разработки. Мышеклик от программирования ручками.

это начало обсуждения совершенно по теме вопроса.

b707
Offline
Зарегистрирован: 26.05.2017

anarch пишет:

Я спросил можно ли как то из класса дернуть все его объекты единовременно.

нет, без ухищрений типа "диспетчеров" - нельзя.

Класс - это лишь описание обьекта в общем. Оно никак не может взаимодействовать с конкретными экземплярами, так же, как атлас анатомии не влияет на конкретных людей, "класс" которых этот атлас описывает :)

anarch
Offline
Зарегистрирован: 10.09.2017

вот такой ответ я и ожидал ;) 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

anarch пишет:

вот такой ответ я и ожидал ;) 

Такой ответ Вам в любой книге по Си прописан. 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

b707 пишет:

anarch пишет:

Я спросил можно ли как то из класса дернуть все его объекты единовременно.

нет, без ухищрений типа "диспетчеров" - нельзя.

Класс - это лишь описание обьекта в общем. Оно никак не может взаимодействовать с конкретными экземплярами, так же, как атлас анатомии не влияет на конкретных людей, "класс" которых этот атлас описывает :)

Скорее механизм сложнее для пользователя, особенно если пользователю надо проще. Здесь сложность вешается на среду обработки. 
Грубый аналог. Что бы передать на большие расстояние сообщение надо написать на бумаге письмо. Но если очень сильно вложится в технологию телефон-смарфон, то пользователю станет проще передать сообщение по телефону. Но каждый раз изобретать телефон, что бы передать сообщение. 

ПС: Упрощено говоря. Вам это не дано. Мне это напряжно. Но некоторые из мелькающих на форуме прямо так и говорили использовать этот подход. Как вариант #153

anarch
Offline
Зарегистрирован: 10.09.2017

qwone у вас в #154 довольно изящное решение.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

BOOM пишет:

Рад буду увидеть сообщения от Вас завтра. Спокойной ночи и Вам и Вашему коту (как зовут кота?)

Кота зовут по-разному.  Офицально - Модест Матвеич (Мотя), но откликается и на "Кудаб.я!!!" и на "Иди жрать, авнюк шерстяной"

В данный момент, кот не спит, значит, хочет жрать, какабычно. 

У него 2 состояния - голод и энергосбережение. других нет. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Красотк!

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ЕвгенийП пишет:

Красотк!

дак у тебя такой же. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

И даже тёзки (по отчеству) :)
Правда, моего так по отчеству (Матвеичем) и называют.

bwn
Offline
Зарегистрирован: 25.08.2014

О, у меня тоже Мотя:

От рождения - Матильда Владимировна Поклонская (довелось ей в тот год родиться, а ветеринар в пачпорт писать отказалась), стала просто Матильда.)))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

И тоже красотка :)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

BOOM пишет:

Значит мои умозаключения были верны. Верно ли я понимаю, что реализация класса в данном виде невозможна и более логично сделать класс, элементами которого будет структура связанного списка с классом кнопки в качестве данных? Ух как сказал, сам в шоке))) И не противоречит ли это «написанию хорошего кода». 

Заранее спасибо за ответ. 

Возможны сами разные реализации. Я подозреваю, что количество возможных реализаций, указанное в http://arduino.ru/forum/programmirovanie/vopros-po-oop#comment-481086  , является лишь нижней оценкой.

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

Кроме того, если вариант из №11 позволял распределять память для кнопок как статически, так и динамически, а также кроме базового класса кнопок использовать их потомков, в варианте с единственным классом ни то, ни другое невозможно. 

anarch
Offline
Зарегистрирован: 10.09.2017

А каким образом можно поймать момент создания объекта и поместить его в диспетчер?

sadman41
Offline
Зарегистрирован: 19.10.2016

Диспетчер сам должен инициировать порождение объекта - тогда ничего ловить не придётся.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sadman41 пишет:

Диспетчер сам должен инициировать порождение объекта - тогда ничего ловить не придётся.

Или уж на худой конец, объекты при своём создании (в конструкторе) должны у него (диспетчера) регистрироваться.

anarch
Offline
Зарегистрирован: 10.09.2017

sadman41 пишет:

Диспетчер сам должен инициировать порождение объекта - тогда ничего ловить не придётся.

т.е. класс диспетчера должен быть унаследован от класса кнопки?

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

anarch пишет:

sadman41 пишет:

Диспетчер сам должен инициировать порождение объекта - тогда ничего ловить не придётся.

т.е. класс диспетчера должен быть унаследован от класса кнопки?

Зачем? Один объект может порождать другой вовсе не будучи с ним в родстве.

Другое дело, что можно создать базовый класс (назовем его "диспечеризуемый") который будет знать диспетчер. Тогда если создавать класс кнопки или чего еще от этого класса, то тогда диспетчер сможет их создавать, регистрировать и выполнять определенные действия не зависимо от того, что это кнопка или что-то еще. 

 

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

anarch пишет:

Существует метод(инструмент) в ОПП, что бы одним вызовом loop() произошел опрос всех объектов. 

ок. если бы я ещё понимал этот куриный язык - "ООП", "методы".

начинай читать тему с конца #558

в лупе объекту/ам передаётся структура параметров/значений, затем читаются переменные объекта/ов.

!таки, выносит мозг вопрос - "как?"

void setup() {
button_0();
button_1();
button_2();
button_3();
}

а, как иначе?

anarch
Offline
Зарегистрирован: 10.09.2017

В любом случае для ардуино с несколькими объектами сильно жирно делать обработчик. Проще и быстрее ручками написать. другое дело если gui со своими 100500 объектами. 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

anarch пишет:

В любом случае для ардуино с несколькими объектами сильно жирно делать обработчик. Проще и быстрее ручками написать. другое дело если gui со своими 100500 объектами. 

А теперь вопрос для продвинутых в GUI- почему у смартфонов стоит сенсорный экран, а не что-то подобное мыши?

anarch
Offline
Зарегистрирован: 10.09.2017

А вы как представляете таскать в кармане смартфон с мышью? ))

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

anarch пишет:

А вы как представляете таскать в кармане смартфон с мышью? ))

А как Вы представляете себе хрень в виде защитных стекол,дополнительных чехлов и все равно ресурс этой хрени мал. Словно кто-то задался извлеч лишние деньги. Так что роллербол или джойстик логичнее.

anarch
Offline
Зарегистрирован: 10.09.2017

ну защитное стекло ни как не спасает от количества прикосновений если вы об этом. у чехла и защитного стекла немного другой функционал.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

qwone пишет:
А как Вы представляете себе хрень в виде защитных стекол,дополнительных чехлов и все равно ресурс этой хрени мал. Словно кто-то задался извлеч лишние деньги. Так что роллербол или джойстик логичнее.

А что если поставить тракбол, то экран не нужен будет, что ли? Ну если бы очки типа Google Glasses получили распространение, тогда да. А так нужен будет и экран плюс тракбол, размеры увеличатся, а пользовать будет менее удобно.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Самое важное вы и не замечаете. Сколько вычислительных ресурсов тратится на... курсор мышки. Убирая этот компонент можно сэкономить ресурсы процессора и емкость аккумулятора. Что является критичным для карманных изделий. Да из всех технологий сенсорных экранов выбрали самый грубый, но очень энергоэкономнный.

anarch
Offline
Зарегистрирован: 10.09.2017

т.е. если бы мышь жрала меньше ресурсов мы бы сейчас в одном кармане смартфон тигали а во втором мышу?

бред какой то...

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

anarch, повербанк тягается и ничего. а до этого ноуты тягать никого не напрягало.

anarch
Offline
Зарегистрирован: 10.09.2017

придет время вместо литиевых элементов будет термоядерный реактор в смартфоне просто подождать нужно немного ))

и не придется таскать павербанк )) 

sadman41
Offline
Зарегистрирован: 19.10.2016

qwone пишет:

 Так что роллербол или джойстик логичнее.

При использовании вслепую сенсорный экран впереди роллерболлов на тыщу корпусов, например. И я еще помню, что такое джойстик на айбиэмовском thinkpad-e - просто адов пи-ец.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

qwone пишет:

Самое важное вы и не замечаете. Сколько вычислительных ресурсов тратится на... курсор мышки. Убирая этот компонент можно сэкономить ресурсы процессора и емкость аккумулятора. Что является критичным для карманных изделий. Да из всех технологий сенсорных экранов выбрали самый грубый, но очень энергоэкономнный.

Ну и сколько? Цифры есть или так, просто абстрактные рассуждения? Да сенсорный экран потребляет  больше трекбола, но разница составляет порядка процента в общем потребелении смартфона. И рессурсы центрального процессора сенсорный экран не расходует. Там стоит свой микроконтроллер, который спит пока в экран не тыкают.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sadman41 пишет:
я еще помню, что такое джойстик на айбиэмовском thinkpad-e
А я вот прямо сейчас сижу за синкпадом (правда ленововским) и красный джойстик вполне себе на месте, вот сейчас его вижу :)

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

asam, а вот и нет. Наличие на экране курсора мышки требует обновлять экран не реже раз в 0,1 секунду . А без этого обновлять по событию требующую перерисовку экрана. Перерисовка экрана это перекачка большого объема информации из буфера у процессора в буфер контроллера экрана. И все на весь этот праздник трубуется энергия.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

qwone пишет:

asam, а вот и нет. Наличие на экране курсора мышки требует обновлять экран не реже раз в 0,1 секунду . А без этого обновлять по событию требующую перерисовку экрана. Перерисовка экрана это перекачка большого объема информации из буфера у процессора в буфер контроллера экрана. И все на весь этот праздник трубуется энергия.

Ну даже не буду обсуждать этот бред про "экран не реже раз в 0,1 секунду". Но даже если это и верно, то получается что трекбол или трекпад, которые и требуют наличия курсора, по вашему, получаеются менее экономичными, потому что для тачскрина курсор не нужен.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Точно. Так и есть. Конечно если питать от сети это не важно, но аккумуляторы малы по емкости и по ресурсу. Покупателю все же удобнее не подключать каждый день к зарядке. Тем более при менее мощном процессоре обгонять конкурентные модели это боллее сильное преимущество на рынке.

anarch
Offline
Зарегистрирован: 10.09.2017

nokia 3310 наше все!

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

qwone пишет:

А без этого обновлять по событию требующую перерисовку экрана.

o_O

1371623214_47204462.gif

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

qwone пишет:

asam, а вот и нет. Наличие на экране курсора мышки требует обновлять экран не реже раз в 0,1 секунду . А без этого обновлять по событию требующую перерисовку экрана. Перерисовка экрана это перекачка большого объема информации из буфера у процессора в буфер контроллера экрана. И все на весь этот праздник трубуется энергия.

Иногда, Пух, лучше жевать, чем говорить.   Ты старайся на улицу выходить пореже, у вас там, видимо, распыляют чота. 

bwn
Offline
Зарегистрирован: 25.08.2014

qwone пишет:

Точно. Так и есть. Конечно если питать от сети это не важно, но аккумуляторы малы по емкости и по ресурсу. Покупателю все же удобнее не подключать каждый день к зарядке. Тем более при менее мощном процессоре обгонять конкурентные модели это боллее сильное преимущество на рынке.

Пух, ты не поверишь, но мой любимый телефон Panasonic, был как раз с трекболом, а любимый из за того, что его раз в три дня к зарядке подключать приходилось (все остальные кажный день, а то и чаще), чисто в ждущем режиме вообще 180 часов обещали. На пенсию он ушел именно по причине окончательной смерти трекбола и отсутствия запчастей.