LINUX.ORG.RU

Грамотное начальное проектирование проекта

 ,


1

2

Поступила задача переписать старый проект с delphi на Qt. Так как старый проект писали в разный период времени 4 «программиста» (а точнее «дизайнер», «студент», «ЧСВшник» и «мистер Я-все-знаю») разной степени упоротости, то нетрудно догадаться, во что он со временем превратился. Посему получилась подзадача - разработать изначальную основную структуру программы так, чтобы тот, кто будет писать после имел надобность править только один конкретный модуль (или подключить написанный собственноручно без всяких проблем). Основная загвоздка в том, что, собственно программа - это GUI-оболочка для некой железки - она опрашивает её по COM-порту (должна быть предусмотрена возможность добавления модуля для LAN и USB) и, произведя некие математические расчеты, выводит на экран результат (график + таблица). Сама загвоздка в том, что версий устройства много, у каждого свой набор команд и, частично, версия протокола, свой набор операций над данными и т.п. Писать версию программы под каждое устройство не выдет - одна и та же программа должна корректно работать что у гл. инженера с новейшей железкой, что с «прослойкой-интерпретатором» для Wayne Kerr'a.

Собственно сабж. Какую структуру программы следует разработать чтобы иметь полную модульность - буквально до того, чтобы при появлении новой железки с новыми функциями и потребностью в новом гуе нужно было просто написать 5 строк (не буквально, нутыпонел)?


«студент», «ЧСВшник»

anonymous
()
Ответ на: комментарий от dave

Уровень хаоса превысил максимальный уровень. Теперь для того, чтобы добавить один слобец в таблицу надо перелопатить 84к строк кода и потратить больше недели.

inn
() автор топика
Ответ на: комментарий от anonymous

Ценю твой юмор. Кстати, поговаривают, что это черта русских программистов переписывать все. С трудом представляю индуса в таком качестве.

dave ★★★★★
()
Ответ на: комментарий от dave

Ценю твой юмор. Кстати, поговаривают, что это черта русских программистов переписывать все. С трудом представляю индуса в таком качестве.

А гномера?

geekless ★★
()
Ответ на: комментарий от TDrive

Ну точно, ты меня раскрыл. Они мне платят за пиар.

geekless ★★
()
Ответ на: комментарий от inn

Тогда, быть может, устроить какой-нибудь рефакторинг? Чтобы не так глобально. И тогда можно будет двигаться небольшими шагами. Отрефакторил - протестировал. Потом опять отрефакторил, и опять протестировал. Так больше гарантии, что все получится.

Думаю, что слухи о кончине дельфей преждевременные, если это вас беспокоит. Еще неизвестно, кто дольше протянет, дельфи или кутэ (он же, «кьют» для чужестранцев).

И, вообще, многое зависит от того, был ли у вас опыт создания законченных проектов. Много проще, если был. Если не было, то тогда надо когда-то учиться. Почему бы не сейчас? Нет, если банкет оплачивается не из вашего кармана, то вполне можно и переписать :)

dave ★★★★★
()
Ответ на: комментарий от inn

Удвою дейва, кроме костылей из-за неопытности/недальновидности/етц предыдущих писателей, там еще примерно столько же объективно необходимых костылей. Если начнешь переписывать, придется по всем ухабам проехать заново. Пока проедешь, либо ишак сдохнет, либо... ну ты понел. Рефакторь небольшими частями, так, чтобы две версии кода всегда были активны — хочешь по-старому собрал, хочешь по-новому. Как более-менее отладилось, оставляешь по-новому и идешь дальше. Иначе просто развалишь все и тебя уволят как очередного балбеса.

arturpub ★★
()

Свои нативные клиенты не то, что на отдельную железку или проект, а даже на класс проектов это прошлый век. Ставь скаду. В ней тебе придётся делать всего две вещи: писать дрова на девайсы и рисовать интерфейс.

Сейчас ковыряю scadabr (форк коммерциализировавшегося mango). Весчь.

ziemin ★★
()

Заново придется писать, а старый код использовать только для изучения работы железяки. С delphi даже на lazarus упаришься переносить.

ilovewindows ★★★★★
()
Ответ на: комментарий от arturpub

Лол, вспомнил, как мне папа впервые показал такую штуку и даже помог вырвать лист из тетради, что для меня показалось выходом за матрицу (очень младшие классы).

anonymous
()
Ответ на: комментарий от anonymous

В средних мы в дневниках подменяли пронумерованные страницы и переподделывали уже поставленные/показанные четверки с пятерками :)

Потом мы начали бухать и стало по**й, но до этого было по-детски весело.

arturpub ★★
()
Ответ на: комментарий от dave

Код в первую очередь должен быть грамотным и красивым, и только потом - рабочим.

Да чёрт побери, даже больше, хороший код вообще не обязан быть рабочим. Главное - грамотность и красота.

anonymous
()

собственно программа - это GUI-оболочка для некой железки - она опрашивает её по COM-порту (должна быть предусмотрена возможность добавления модуля для LAN и USB)

это-ж классика:

железка<-(свой протокол)->демон<-(унифицированный протокол)->клиент

в первую очередь унифицируются протоколы,пишется демон-пустышка, а в качестве клиента выступает работающий софт на дельфи с мин.правками. Как только всё заработало можно 'разветвляться' - кто-то пишет новых клиентов на Qt/Gtk/java, кто-то железячные части и так далее.

MKuznetsov ★★★★★
()
Ответ на: комментарий от anonymous

Кто-то не сопровождал код и не делала фичи к вчера. А так согласен.

anonymous
()

1. Открываешь Qt Creator

2. Пишешь код

Это единственно верный подход к разработке ПО.

anonymous
()

Грамотное начальное проектирование проекта

... начинается с начала планирования плана. правильно.

Pakostnik ★★★
()

Автар, ты хочешь, чтобы на ЛОРе тебе двумя-тремя постами обьяснили всю суть курса «Обьектно ориентированный анали и дизайн»? Ты очень наивен!

Попробуй что ли спец литературу почитать. К примеру что-то вроде такого http://www.proklondike.com/books/oop/buch_ooad.html

AF ★★★
()

читай рефакторинг Фаулера, прочищает мозги знатно

TERRANZ ★★★★
()
Ответ на: комментарий от inn

чтобы добавить один слобец в таблицу надо перелопатить 84к строк кода

эпичненько.

немного не по теме. имею крайне схожую ситуевину (даже есть какоето чувство дежавю). есть возможность поделится деталями?

ZuBB ★★★★★
()
Ответ на: комментарий от MKuznetsov

это-ж классика:

железка<-(свой протокол)->демон<-(унифицированный протокол)->клиент

в первую очередь унифицируются протоколы,пишется демон-пустышка, а в качестве клиента выступает работающий софт на дельфи с мин.правками. Как только всё заработало можно 'разветвляться' - кто-то пишет новых клиентов на Qt/Gtk/java, кто-то железячные части и так далее.

+1

justAmoment ★★★★★
()
Ответ на: комментарий от HighwayStar

для опроса разных версий железок реализуй загружаемые плагины, в Qt есть для это специальные средства

За это спасибо.

inn
() автор топика
Ответ на: комментарий от TDrive

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

x0r ★★★★★
()
Ответ на: комментарий от x0r

начальное проектирование и паттерны ортогональны.

Нет.

все начинается с архитектуры на бумаге в виде квадратиков.

google: UML

TDrive ★★★★★
()

Писать версию программы под каждое устройство не выдет

ИМХО просто вставь туда интерпретатор LISP'а. ИМХО самое простое.

emulek
()
Ответ на: комментарий от TDrive

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

UML

к чему это ты? UML это унифицированно, но не обязательно.

x0r ★★★★★
()
Ответ на: комментарий от anonymous

Код в первую очередь должен быть грамотным и красивым, и только потом - рабочим.

Да чёрт побери, даже больше, хороший код вообще не обязан быть рабочим. Главное - грамотность и красота.

фцитатнег!

emulek
()
Ответ на: комментарий от KendovNorok

Кто сказал Тзинч? Остальными пренебречь! А по теме:

железка<-(свой протокол)->демон<-(унифицированный протокол)->клиент

+1

zunkree
()
Ответ на: комментарий от inn

Не, моя программа назьівается по другому..

Если позволите еще несколько вопросов. Исходньій код как я понимаю закрьіт? Писать будете на С/С++? Какое приблизительно количество точек на самом большом графике?

ZuBB ★★★★★
()
Ответ на: комментарий от ZuBB

Эм.. В данный момент - закрыт, к сожалению. Программа для внутреннего пользования, так что «добро» на распространение никто не давал. Будет Qt-версия - будем обсуждать этот вопрос.

Какое приблизительно количество точек на самом большом графике?

На графике может быть несколько измерений «кусками». Типа от 1 до 1000 Гц с шагом 1, потом от 1000 до 10000 с шагом 2, потом от 10к до 10м с шагом 100, потом от 10м до 20м с шагом 150. Так что кол-во точек - спорный вопрос. Основная задача - поиск резонанса пьезоэлемента, поэтому как только покрывают все частоты, начинают уменьшать шаг и диапазон. Если он известен заранее сразу вбивают его. P.S. Тот сайт, ссылку на который я давал - это «программист» #2. Сейчас программы выглядит так: https://dl.dropboxusercontent.com/u/31471800/p2p/ысе.GIF

inn
() автор топика
Ответ на: комментарий от qq6ka

Для всего остального. Плюс «рисовать интерфейс» это накидать объектов на форму. Остальное она возьмёт на себя.

ziemin ★★
()
Ответ на: комментарий от inn

Какое приблизительно количество точек на самом большом графике?

На графике может быть ...

Тогда спрошу по другому.

У вас статическая картинка или ее можно скроллить, зумить итп? Если можно то не лагает?

Вот почему спрашиваю: у нас максимальная частота измерений 12.5 мГц. Осцилограф поддерживает 8 каналов. Прогер который занимается UI-ем, говорит что пришлось заюзать асм для того чтобы дать возможность юзеру без тормозов «ходить» по осцилограмме (говорит «ибо большые объемы данных»). Мне интересно он не нашел более простого метода, или он дествительно решыл сложную задачу наиболее эффективным способом?

ZuBB ★★★★★
()
Ответ на: комментарий от x0r

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

Спроектируй, для примера, веб гостевую книгу или новостную ленту (что нибудь простенькое) без привязки к паттернам и ЯП.

TDrive ★★★★★
()
Ответ на: комментарий от x0r

к чему это ты? UML это унифицированно, но не обязательно.

общепринято.

TDrive ★★★★★
()
Ответ на: комментарий от ZuBB

он не нашел более простого метода

Даю 98%, что это так.

anonymous
()

Выдели из проекта постоянную часть, платформу, базис. И на этот базис нанизывай более «лёгкие» части, которые будет просто изменить в последующем.

drSchur ★★★
()

Это вопрос по реализации плагинов или более общий по проектированию софта?

Vit ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.