Вопрос по ООП
- Войдите на сайт для отправки комментариев
Вс, 22/09/2019 - 15:46
Не так давно начал изучать ООП.
Есть класс Button.
Есть несколько объектов buttonOne, buttonTwo, buttonThree.
Есть метод loop() который опрашивает состояние кнопки и устанавливает флаг.
Приходится для каждого объекта вызывать buttonOne.loop(), buttonTwo.loop()...
Существует метод(инструмент) в ОПП, что бы одним вызовом loop() произошел опрос всех объектов.
Мне тоже интересно стало. Подпишусь, почитаю :)
anarch, Вы можете отличить графическую среду разработки от просто среды разработки. Мышеклик от программирования ручками.
Хочу программировать мышекликом ;)
Хочу программировать мышекликом ;)
Если правильно понимаю например Qt где то сам без участия программиста крутит циклы и опрашивает объекты?
Т.е. то что я спросил это задача фреймворка?
Если касаясь наследования, то как оно происходит если наследуется класс сетевого соединения.
При каждом создании объекта будет открываться новое соединение?
Просто все что пока изучил по ООП так это или простым примеров вот тыкаем сюда и будет хорошо или с хэштегом #тыжепрограммист сам все поймешь.
Если правильно понимаю например Qt где то сам без участия программиста крутит циклы и опрашивает объекты?
Если вы создаете объект то всегда надо предусмотреть метод его инициализации,хоть в конструкторе.А так же метод выполнения- по очереди по прерыванию по событию. Опять же эти методы надо как-то прикрутить к соответсвующим веткам программы, что бы объект работал. Это делается или ручками, или графической средой или методами подключения/отключения.(Qt) Вот и ковыряйтесь что и как вам проще сделать
ООП здесь и не пахнет даже, это управление экземплярами объектов.
В том же Qt, виджет, чтобы его опрашивали автоматически, прикрепляет свой слот к событию, т.е. супервизор должен откуда- то знать, кому посылать события и от кого ждать данных
В том же Qt, виджет, чтобы его опрашивали автоматически, прикрепляет свой слот к событию, т.е. супервизор должен откуда- то знать, кому посылать события и от кого ждать данных
В том и дело создаем кнопку и работаем с ней и не заморачиваемся где и в каком цикле ее опрашивать.
Знаем что от нее может поступить сигнал и к нему привязываем слот.
Может сразу Винду или Линух повесить.(сарказм)
Не так давно начал изучать ООП.
Есть класс Button.
Есть несколько объектов buttonOne, buttonTwo, buttonThree.
Есть метод loop() который опрашивает состояние кнопки и устанавливает флаг.
Приходится для каждого объекта вызывать buttonOne.loop(), buttonTwo.loop()...
Существует метод(инструмент) в ОПП, что бы одним вызовом loop() произошел опрос всех объектов.
Ну дык напиши метод :-)
Что то типа
В том же Qt, виджет, чтобы его опрашивали автоматически, прикрепляет свой слот к событию, т.е. супервизор должен откуда- то знать, кому посылать события и от кого ждать данных
В том и дело создаем кнопку и работаем с ней и не заморачиваемся где и в каком цикле ее опрашивать.
Знаем что от нее может поступить сигнал и к нему привязываем слот.
Какие проблемы?
Создаем два класса: кнопка и диспетчер кнопок.
Кнопка при создании должна зарегистрироваться в диспетчере, после чего уже диспетчер будет заботиться о том, когда и как ее опрашивать, а в общем цикле (в прерывании - где угодно) будет только вызов метода диспетчера.
Не так давно начал изучать ООП.
Есть класс Button.
Есть несколько объектов buttonOne, buttonTwo, buttonThree.
Есть метод loop() который опрашивает состояние кнопки и устанавливает флаг.
Приходится для каждого объекта вызывать buttonOne.loop(), buttonTwo.loop()...
Существует метод(инструмент) в ОПП, что бы одним вызовом loop() произошел опрос всех объектов.
Уточняю компьютер всегда работает без участия программиста.Конечно программист может возле него сидеть.
Гнусное суеверие! Компьютер без без участия программиста не работает! Программист включает компутер, без включения оно не работаит!
Уточняю компьютер всегда работает без участия программиста.Конечно программист может возле него сидеть.
Гнусное суеверие! Компьютер без без участия программиста не работает! Программист включает компутер, без включения оно не работаит!
Вместо примерного ответа ;да нет; столько философии )
Такая тенденция пошла на форумах, что на новичков, любителей смотрят с презрением (ты от куда такой вылупился).
Такая тенденция пошла на форумах, что на новичков, любителей смотрят с презрением (ты от куда такой вылупился).
https://en.wikipedia.org/wiki/RTFM : RTFM is an initialism for the expression "read the fucking manual". The initialism appeared in print in 1979 on the table of contents page of the LINPACK User's Guide[2] in the form "R.T.F.M."
Вместо примерного ответа ;да нет; столько философии )
Вопрос не предполагал ответ типа "да/нет". Формально можно было ответить на "существует ли" чем-нибудь типа "да/нет", но стало ли бы Вам легче?
Ответ же на подразумеваемый вопрос "как это сделать" были даны (не один) и даже с примерами кодов.
Чем же Вам форум не угодил? Чего Вы ожидали? Можете объяснить?
P.S. Не любите философию - не задавайте философских вопросов.
Добавлю, не любите философии-не занимайтесь программированием. Потому что перед тем как что-то написать надо тщательно обдумать. А вот как научится правильно думать и есть философия. Но люди не хотят думать. Вот и приходится их палкой учить думать. Это и есть второе действие на этом форуме.
С начала палкой это "ХОРОШИЙ" подход.
Для меня логика и философия две совершенные противоположности.
Для меня логика и философия две совершенные противоположности.
??????????
Чот х..ею, дорогая редакция!
86-91 МехМат МГУ, кафедра математической логики, ... ежели чо. ;)))))))))))))))
86-91 МехМат МГУ, кафедра математической логики, ... ежели чо. ;)))))))))))))))
Но не математической философии же!
Что такое жизнь в военное время- это жизнь в мирное время ускоренное в 100 раз. Армия это инструмент добиваться цели быстро. Если генералов учат думать- ну всяким философиям и стратегиям, то солдатам устав и сержант с палкой что бы лишних мыслей не было.
Хотите быстро стать "программистом" , то планшет и лайкайте сколько угодно.И главное никакой философии не надо. Это все что надо для "солдатского программирования", ну и товарища что бы по рукам бил, если чего-то вздумаете написать.Потому что писать это не солдатское дело. Лайк и дизлайк наше все.
ПС: войска диванного программирования.
Иногда удивляюсь как с такими войсками вообще можно воевать.
А если генералу голову прострелили все хана... кто за солдата думать будет если не обучали.
В любом деле быстро не бывает. А если и бывает то очень плохо.
Иногда удивляюсь как с такими войсками вообще можно воевать.
А если генералу голову прострелили все хана... кто за солдата думать будет если не обучали.
А если и полковнику прострелили - майор.
В крайнем случае - лейтенант.
Или на худой конец - прапорщик.
В конце концов еще и ефрейтор есть.
Иногда удивляюсь как с такими войсками вообще можно воевать.
А если генералу голову прострелили все хана... кто за солдата думать будет если не обучали.
В любом деле быстро не бывает. А если и бывает то очень плохо.
ПС: Вот внятное объяснение о Карле 12 и шведах без всякой теперешней политики но с политикой тогдашней, так как война это все же политика но военными средствами https://youtu.be/Y1LygQ7H1z8?t=3444 на 57:29 Но любителям истории того времени лучше посмотреть все.
От философии плавно перешли к истории и военному делу ))) прям как в универе вводный курс )) профессор а когда же мы к программированию перейдем? )
меня запускали - вывод - не программист )))
Для меня логика и философия две совершенные противоположности.
К сожалению, это заметно.
Что такое жизнь в военное время- это жизнь в мирное время ускоренное в 100 раз. Армия это инструмент добиваться цели быстро. Если генералов учат думать- ну всяким философиям и стратегиям, то солдатам устав и сержант с палкой что бы лишних мыслей не было.
)) Иногда армейская дисциплина здорово помогала. (Где то уже писал.)
Учебка. На доске плакат со схемой устройства. Собачки, звёздочки, пружинки, храповики, зацепы... - офигенная куча всего! Механика + электрика. Преподаватель рассказывает сначала в общем, затем детально. Всем ясно? Какой там! Рассказывает ещё ОДИН раз. После этого вызывает к доске. И, если кто то заткнулся, все встали и пошли наяривать круги вокруг плаца... Так вот, когда рассказывал сидишь буквально с открытым ртом, боясь пропустить хоть слово. Потому что знаешь чем это чревато. Ну и тумаков ещё от сверстников получишь. И очень быстро всё доходило, через ноги особенно.)
А сейчас, иной раз, смотришь как баран на новые ворота... И думаешь, та ну его нафиг, как-нибудь обойдусь.( Ну или долбишь фиг знамо сколько времени.(
меня запускали - вывод - не программист )))
Отличный тест получается ))) вахтер на глаз раскусил!
Преподаватель и военный две разных профессии.
И не способность командира преподавать не должна сказываться на солдате.
По хорошему командира менять нужно, а не солдатов гонять.
Но так уж сложилось, и с эти ни чего наверное не поделать.
И не способность командира преподавать не должна сказываться на солдате.
По хорошему командира менять нужно, а не солдатов гонять.
Интересное предложение военной реформы.
Простите, чем (какого уровня подразделениями и частями) Вам доводилось командовать, что Вы так поднаторели в этих вопросах?
Преподаватель и военный две разных профессии.
И не способность командира преподавать не должна сказываться на солдате.
По хорошему командира менять нужно, а не солдатов гонять.
Но так уж сложилось, и с эти ни чего наверное не поделать.
Простите, чем (какого уровня подразделениями и частями) Вам доводилось командовать, что Вы так поднаторели в этих вопросах?
Миновало меня это занятие командовать к счастью.
От философии плавно перешли к истории и военному делу ))) прям как в универе вводный курс )) профессор а когда же мы к программированию перейдем? )
так вроде в самом начале ветки дали несколько ответов с примерами кода - и вопрос был исчерпан, судя по тому, что уточняющих вопросов от вас не было. А раз по сути все ясно - далее, вполне логично, пошел треп...
Если хотите получать внятные ответы на форумах - учитесь сами напрявлять дискуссию в нужное русло.
меня запускали - вывод - не программист )))
Отличный тест получается ))) вахтер на глаз раскусил!
там не вахтёр, там охрана )))
Миновало меня это занятие командовать к счастью.
Ну, тогда ценность твоего мнения о том, что надо и что не надо делать в армии, ... эээ ... , как тут кто-то изящно выразился: "не превышает разумных ожиданий" :)
Я все не читал, так как блудня пошла после некоторых первых сообщений.
Вопрос знатокам (так сказать гуру программирования) - у меня появилась идейка, как все-таки реализовать подобное (что автор озвучил в своем вопросе) по средствам ООП.
Идея заключается в следующем:
Берем класс button (или как там класс для кнопки обозвали?) и дополняем его полем name (для наглядности). Далее создаем структуру (может быть проще и класс, но я не понял некоторые моменты и у меня (в теории) все хорошо сошлось на структуре) к примеру buttons, структура по сути своей - связанный динамический список, главным элементом которой является переменная типа button.
Чтения всех состояний кнопок одновременно: Функция (метод) обходит все элементы списка и вызывает метод ::read(); В loop() вызывается один раз вне зависимости от количества кнопок.
Нажата ли кнопка или может сменилось состояние на другое? Для этого используем функцию (метод) что-то вроде getStateByName(%button_name%); Она проходится по всему списку, как только найдена кнопка с нужным именем - возвращает ее состояние. Соответственно и создание элементов типа кнопки происходит через своеобразный "конструктор" структуры (класса) buttons.
Ну и так далее, смотря что нужно "на выхлопе" получить...
Скажите, пожалуйста, гуру - чем (почему) данное решение не может быть использовано в проектах? Так как я не сильный знаток в тонкостях утечек памяти и тому подобного.... А может быть вообще есть какие-то подводные камни или что еще по хуже...
чем (почему) данное решение не может быть использовано в проектах?
Может. И ещё 100500 подобных - тоже могут.
Нечто подобное обсуждалось в #10, в #11, в #12, только там были не списки, а массивы, а в #11 так там вообще структура данных не уточнялась, неважно список, массив, хоть очередь - диспетчер и есть диспетчер.
Обычно каждый изобретает то, что ему удобно. У мня вот есть общий класс "Сенсор" от которого и унаследовано все, что можно/нужно читать. Это может быть кнопка, фоторезистор, даччик дыма или вапще Dallas какойнить, пофик все читается единообразно. Как только значение/состояние сенсора изменилось, он сам кладет в очередь сообщение о смене своего состояния. Главному циклу в loop() остается только это правильно обработать. Тем более, что в сообщение входит ID сенсора, который его послал.
Значит мои умозаключения были верны. Верно ли я понимаю, что реализация класса в данном виде невозможна и более логично сделать класс, элементами которого будет структура связанного списка с классом кнопки в качестве данных? Ух как сказал, сам в шоке))) И не противоречит ли это «написанию хорошего кода».
Заранее спасибо за ответ.
На сегодня это за гранью моего восприятия. Мы с котом спать пошли.
"Хороший код" превращается в отвратительный, как только перестаёт быть или эффективным или понятным.
Наворачивание внутри класса связных списков неизвестной размерности ради того, чтобы кто-то мог одной функцией раз в пятилетку "опросить все кнопки" наврядли можно назвать эффективным распоряжением ресурсов, как минимум.
Про бритву Оккама читали?
BOOM "помедленее. я запписываю..."
В каком "данном виде" реализация класса невозможна ? Реализация класса. который будет включать все кнопки проекта? - возможна, вроде уже ответили.
А вообще, главная проблема новичков. задающих подобные вопросы - что они ждут на них какого-то конкретного и однозначного ответа. какого-нить "единственно правильного" метода решения задачи.
А его нет.
На сегодня это за гранью моего восприятия. Мы с котом спать пошли.
Рад буду увидеть сообщения от Вас завтра. Спокойной ночи и Вам и Вашему коту (как зовут кота?)
"Хороший код" превращается в отвратительный, как только перестаёт быть или эффективным или понятным.
Наворачивание внутри класса связных списков неизвестной размерности ради того, чтобы кто-то мог одной функцией раз в пятилетку "опросить все кнопки" наврядли можно назвать эффективным распоряжением ресурсов, как минимум.
Про бритву Оккама читали?
Понял, то есть такая реализация - далека от совершенства, от слова - вообще.
Про бритву с удовольствием прочту. Если можно ссылку дать? Если нет - постараюсь сам найти.
Наворачивание внутри класса связных списков неизвестной размерности ради того, чтобы кто-то мог одной функцией раз в пятилетку "опросить все кнопки" наврядли можно назвать эффективным распоряжением ресурсов, как минимум.
+100
Почему вопрос ТС вызвал флейм и почему автора не устроили ответы? - очень просто. потому что его вопрос в отрыве от конкретной задачи смысла не имеет. Надо знать, что это за кнопки. сколько их, насколько похожа или отличается их функция...
если речь про 110 кнопок клавиатуры - обьединение их в один класс оправдано, так как работа с каждой кнопкой повторяет соседнюю. Если же одна кнопка - кнопка энкодера, а другая - включение питания внешнего модуля. то обьядинять их в один класс незачем. кнопки разные по сути и работать с ними нужно совершенно по разному.
BOOM "помедленее. я запписываю..."
————————-
А вообще, главная проблема новичков. задающих подобные вопросы - что они ждут на них какого-то конкретного и однозначного ответа. какого-нить "единственно правильного" метода решения задачи.
А его нет.
Я, на сколько возможно, медленно печатаю, так что записывать не составит труда )))
—————————
Хотелось бы конкретного и правильного, но это всем так хочется. Меня и не конкретно устроил вполне
ЗЫ: Не то чтобы я юнец зелёный, скорее забывший все напроч старец. Уж не один десяток лет прошёл, когда занимался программированием. Что то всплывает в памяти, а в основном да - учусь заново.
ПС: Это и есть основная причина почему у квонокода не появилось базовых классов с виртуальными функциями и наследований.