Russian Qt Forum

Qt => Вопросы новичков => Тема начата: billidean от Февраль 15, 2016, 16:23



Название: Правильный стиль программирования
Отправлено: billidean от Февраль 15, 2016, 16:23
Добрый день всем.

Пишу программу управления процессом работы внешних устройств.
У меня в программе (пишу на Qt, естественно :)) есть такой момент: по нажатию кнопки происходит выполнение очень длинной последовательности действий: инициализация внешнего железа, запуск неких калибровочных процессов, движение неких движков, ...., при этом каждый раз происходит ожидание завершения каждого из действий (с таймаутами, конечно же).
Пока все  было в процессе срочного написания и отладки с требованием "лишь бы поскорее заработало, а причешем прогу потом", поэтому писал путем накидывания кода в один обработчик кнопки. НО, пришло время причесывать прогу и встал БОЛЬШОЙ вопрос, в каком стиле пишут такие длинные процедуры?? (текущая составила 750 строк кода).
Думаю просто разбить на некоторое количество функций и вызывать их последовательно.

Но как-то немного засомневался, правильно ли я запланировал :-\ :-\

Если у кого-нибудь есть опыт написания подобных длинных процедур, прошу наставить на путь истинный.


Название: Re: Правильный стиль программирования
Отправлено: Bepec от Февраль 15, 2016, 17:27
Процедуру в другой поток кинуть, вместо условий на выход, делаем сигнал состояния.
Основной поток лишь запускает и потом через сигналы смотрит состояние.


Название: Re: Правильный стиль программирования
Отправлено: __Heaven__ от Февраль 16, 2016, 09:40
Вы же сами себе и расписали :)
инициализация внешнего железа, запуск неких калибровочных процессов, движение неких движков, ....

Это и будут ваши разбиения на более маленькие функции. Не сомневайтесь :)


Название: Re: Правильный стиль программирования
Отправлено: qate от Февраль 16, 2016, 10:14
"лишь бы поскорее заработало, а причешем прогу потом"

дык, так большинство программ пишутся


Название: Re: Правильный стиль программирования
Отправлено: Igors от Февраль 16, 2016, 10:27
...и встал БОЛЬШОЙ вопрос, в каком стиле пишут такие длинные процедуры?? (текущая составила 750 строк кода).
Думаю просто разбить на некоторое количество функций и вызывать их последовательно.
Вы сами почувствуете удачность этого решения по тому "насколько хорошо разбивается". Если ф-ции выходят по 2-3 аргумента - то все норм, наверняка удастся даже код сократить. А вот если "колбаса" с 5 и более параметрами - значит что-то "не то"


Название: Re: Правильный стиль программирования
Отправлено: __Heaven__ от Февраль 16, 2016, 11:44
Ну и куда же без этого (http://www.ozon.ru/context/detail/id/21916535/)


Название: Re: Правильный стиль программирования
Отправлено: Vamireh от Февраль 16, 2016, 18:48
Пишу подобные программы (правда, давно на C# перешел). Будет ли меняться последовательность действий?

В любом случае, лучшее, что я нашел для себя - это записать все действия в виде понятных человеку скриптов, а потом тупо их выполнять. Создается интерфейс (то есть, тьфу, абстрактный класс), у которого методы типа:
  • Exec(Command command)
  • Stop()
  • Quit()

Реализуются классы для управления всеми вашими устройствами. А интерпретатор этих скриптов построчно читает скрипт и запускает Exec() для текущей команды. Методы Stop() и Quit() нужны для приостановки (кнопка Пауза) или остановки (кнопка Закончить).

В общем как-то так, лень писать. Еще придется парсер писать и т.д.

EDIT: еще могу добавить, что по такому принципу управляются десяток устройств с временем выполнения одного скрипта до 5-7 суток непрерывной работы.


Название: Re: Правильный стиль программирования
Отправлено: popper от Февраль 16, 2016, 19:31
Когда-то сам для решения подобной задачи пытался освоить QStateMachine однако терпения не хватило :-\