Leen Опубликовано 18 августа, 2006 Жалоба Поделиться Опубликовано 18 августа, 2006 На работе поставили задачу: ЕСТЬ исходники проги, управляющей железом, разработанным нашей фирмой неск. лет назад. И жлезо, и прога, ессно, есть. В проге 4 режима. А заказчик предъявил ТЗ и сказал, что мы обещали 5! И еще одну фичу... НАДО Ввести туда этот режим и эту фичу... Место мне не указали, но намекнули... Примечание: я - не профессиональный программист, я гордо считаю себя чайником. Просто нравится учиться. И пишу это для таких же чайников. Ессно, я - единственный в фирме, кто более-менее знает с++. А так как автора и след простыл, то пришлось осваивать исходник (интересно, что бы я без него делал? У кого-нить был опыт ГЛОБАЛЬНОЙ переделки проги под билдер БЕЗ сорсов?). Для начала плюнул на графику, перегнал все *.cpp и *.h в один текстовик, прикинул размер... 248 листов... Делать нечего, принтанул. Шеф поворчал, но у него - клиент, так что мне ничо не було. Первое, что начал читать - структура данных. Прога управляет техпроцессом в реалтайме, собирает о нем инфу, ведет логи и строит графики. Писец. На пару часов работы под данные надо 200 МБ ОЗУ. Люди! Человеки! Не мешайте указатели и объекты! Сами же потом не вспомните, чего и где писали! Держите единый стиль! А то RegimeParam.Regime[pGStat].A->Current.Value->stop... No comments. Потом по дурости начал писать ВСЕ переменные, что были в главной форме. Начал с визуальных, сначала не брезговал и лейбами (TLMDLabel, если кто знает, чего это). Быстро надоело, пошел за пивом. Короче, к исходу первой недели моих мытарств имелось два плаката А1, с дипломных времен, покрытых блок-схемами (ОГРОМНОЕ СПАСИБО тому, кто их придумал, а заодно информатички, за то, что пинала под (цензура)) основных процедур - нажатия на осн. кнопки (выход, старт/стоп, настройки, инит), процедуры, задействованные в обработках кнопок, работа таймеров и иже с ним. Стало легче. После пары литров пива на НЕсвежую голову. Начал разбираться, где чего происходит. Вот тут у меня заминка - программка-то асинхронная! Одной блок-схемой не обойдешься! Кстати, если кто знает, как нормально зарисовать объектную прогу, поделитесь опытом в рамках этой темы, пожалуйста. Короче, зная систему данных, имея алгоритмы основных функций, я, скрипя всем, что еще шевелилось, начал сивыми лапами - да по исходникам. В общем-то получается, хотя и тяжеловато это. Вывод: освоить сложную прогу в объеме, необходимом для ее изменения, МОЖНО. Главное - набраться терпения и пива. Нет, в самом деле, и сам до этого считал, и от других слышал, что в более-менее громоздкой программе кроме автора разобраться никому не под силу. Вранье. Была бы нужда. По крайней мере, вздумай я ее с нуля переписывать, вышло бы раза в 4-6 подольше. А так - полмесяца - месяц. Ссылка на комментарий Поделиться на другие сайты Поделиться
Shurr Опубликовано 18 августа, 2006 Жалоба Поделиться Опубликовано 18 августа, 2006 Кстати, если кто знает, как нормально зарисовать объектную прогу, поделитесь опытом в рамках этой темы, пожалуйста. Вопрос на засыпку: ты что-нибудь слышал о UML? Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 18 августа, 2006 Жалоба Поделиться Опубликовано 18 августа, 2006 (изменено) Leen: тебе повезло что это был С++ :) А не просто С. Только я прочёл и не пойму к чему тему то создал - типа как тяжело ковырятся в чужих исходниках или просто о буднях программиста? Изменено 18 августа, 2006 пользователем Indomito Ссылка на комментарий Поделиться на другие сайты Поделиться
Leen Опубликовано 18 августа, 2006 Автор Жалоба Поделиться Опубликовано 18 августа, 2006 2 Shurr: нет, не сложно - расскажи. 2 Indomito: да в общем-то о буднях, просто когда мне это Щастье подвалило, не мог придумать, с какого конца взяться. А мы ж не какие-нибудь уникальные снежинки над манхеттеном, в смысле, вдруг кому еще так же повезло. Моожет кому и пригодится. А насчет тяжело - так мне никто и не общал, что жить легко. Тебе думаю - тоже. ЗЫ: с просто с - не видел таких больших прог, хотя поменьше (~25000 строк) сам писал. Не знаю, не с чем сравнить. Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 18 августа, 2006 Жалоба Поделиться Опубликовано 18 августа, 2006 Leen: ясно я видел намного большие ....правда их писали 4 года и на простом С, точнее как всегда 0.5 писали, а 3.5 отлаживали (и я иже с ними). Прога сложна очень - управление РЛС, за секунду приходило около 0.5-0.7 Мб в зависимости от передатчика. Ссылка на комментарий Поделиться на другие сайты Поделиться
Shurr Опубликовано 18 августа, 2006 Жалоба Поделиться Опубликовано 18 августа, 2006 Leen Если вкратце - то так: UML (Unified Modelling Language) - Унифицированный Язык Моделирования. :) На самом деле UML языком как таковым не является, а представляет из себя набор определений, правил и рекомендаций, которые позволяют описывать в виде диаграмм модели различных систем, в частности програмные комплексы. UML позволяет строить как статические модели, так и динамические. Это расширяемый язык, т.е. если пользователю не хватает средств для описания какой-то специфической модели - язык может быть расширен, методы и рекомендации по расширению тоже описаны. UML описывает восемь видов диаграмм, каждая из которых имеет свое назначение: Диаграмма вариантов использования (use case diagram) - для описания вариантов использования системы пользователями Диаграмма классов (class diagram) - для представления статической структуры модели в виде классов ООП Диаграмма состояний (statechart diagram) - для представления поведения модели в виде автоматов Диаграмма деятельности (activity diagram) - напоминает блок-схемы, но с широкими дополнительными возможностями Диаграмма последовательности (sequence diagram) - для описания взаимодействия компонент системы во времени Диаграмма кооперации (collaboration diagram) - для описания взаимодействия компонент системы с точки зрения структуры Диаграмма компонентов (component diagram) - для описания физического представления модели Диаграмма развертывания (deployment diagram) - для описания среды, в которой должна работать система Относительно твоего примера: структуру классов системы можно описать на диаграмме классов раз программа асинхронная - значит надо описать временное взаимодействие компонент - это диаграмма последовательности "кнопки (выход, старт/стоп, настройки, инит)" - это внешние воздействия, а значит можно отобразить их на диаграмме вариантов использования Блок-схемы можно практически безболезненно перевести в диаграммы последовательности Переходы устойчивых состояний системы можно описать на диаграмме состояний и прочее и прочее и прочее. Это так, навскидку. UML позволяет строить диаграммы любого уровня абстракции, пользователь сам выбирает степень соответствия модели. ------------------------------------------------------------------------------------------------- Ознакомиться с UML можно, например, по самоучителю, который можно взять здесь. Если после ознакомления появится желание применять UML для описания системы - нужно будет поискать более серьезную литературу. P.S. Кстати, такие комплексы как, например, Rational Rose предоставляют возможность обратного инжиниринга, т.е. использования исходных кодов программ для облегчения построения моделей. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти