![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Гость_bullet |
|
|||
|
Unregistered |
Я программист любитель, люблю на досуге писать всяческие программки, но всегда сталкиваюсь с такой проблемой:
Если я не пишу программу за один раз, то на следующий день я уже не могу вспомнить, что и как и где у меня делается, комментарии не помогают, приходится снова смотреть все процедуры и функции и разбираться как они работают, будто бы разбираю чужую программу.. Расскажите пожалуйста как можно построить работу над большим проектом чтобы не возникало подобной проблемы. |
|||
|
||||
| ~FoX~ |
|
|||
![]() НЕ рыжий!!! ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2819 Регистрация: 8.10.2003 Где: Зеленоград Репутация: 13 Всего: 68 |
Хех.....всегда сталкиваюсь с такой же проблемой!!!
Но если пишу большой проект или знаю, что его будут дописывать другой программер - я стараюсь развернуто откоментировать все строки, а в шапке пишу большой коментарий(почти в эпистолярном жанре )))) для чего етот модуль вообще нужен, какие процедуры и функции в нем сидят........и что они все вместе делают......!!! Гуд Лак ))) |
|||
|
||||
| Fedor |
|
|||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: нет Всего: 32 |
А зачем разбираться, как работают процедуры? Если они правильны, то достаточно вспомнить, что они получают на вход и что выдают... А для удобочитаемости использую форматирование и табуляцию...
Если программируешь большой проект, используй юниты. С их помощью можно постараться во-первых, не делать файл из 3000 строк, а во-вторых разделить процедуры и функции по "тематике" и не нагромождать доп. фунциями главную программу. -------------------- Мы - Днепряне. Мы всех сильней. |
|||
|
||||
| Gloomy |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 7.10.2003 Где: England Репутация: 1 Всего: 1 |
Мне помогает разбиение программы на модули. Т.е. вынос самостоятельно написанных фукнций и процедур в отдельные модули с последующим подключением их к проекту. Таким образом снижается не только размер главного модуля программы, но и значительно облегчается понимание того что написано.
Но все-таки главную и решающую роль играет стиль написания кода. Это и осмысленные имена переменных, компонентов на форме, и осмысленно названные функции и процедуры. Согласись, что гораздо проще понять код:
чем
Так и в названиях переменных. Пиши все имена только на английском и старайся обходится без цифр. Если ты не знаешь как пишется то или иное слово - потрать пару минут, загляни в словарь. Это будет полезно и тебе (пополнишь словарный запас) и программе (она будет более читабельной). Таким образом: развивай сначала правильный стиль написания кода. А потом дели программу на модули. И тогда все будет гораздо проще ;) |
||||
|
|||||
| val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: нет Всего: 7 |
делай архивы исходников с комментариями к ним... Работает...
-------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
| dvs |
|
|||
![]() Владимир Драпалюк ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 660 Регистрация: 25.8.2003 Где: Воронеж->Москв а Репутация: нет Всего: 19 |
А еще Можно почитать умные книжки про разработку крупных программных проектов. В них можно найти готовые системы разработки, различные подходы. К примеру, мне понравилась книга Кент Бека "Экстремальное программирование".
Ну а если читать совсем не охота, то зачем задавать такие вопросы? -------------------- Любите друг друга! |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Рекомендации кратко такие:
1) Уделяйте внимание форматированию кода, отступам и т.п. 2) Переменные называйте так чтобы сразу было понятно, пусть будут длинными - это не страшно, например используйте "OldUserPassword" вместо трудно понятного "upsd2". Названия процедур тоже должно отражать их роль: ConnectRemoteServer будет гораздо лучше crtsrv. 3) Избегайте большой вложенности if, циклов и т.п. 4) Избегайте длинных процедур, желательно чтобы процедура целиком умещалась на экране, если длиннее - то разбивайте на несколько 5) Коментарии должны быть не очень длинные, и не очень подробные, а наоборот краткие и по существу. Теперь для более продвинутых пользователей - используйте удобства объектного программирования, создайте нужное количество классов которые были-бы независимые друг от друга. Ты пишешь модуль и свои классы, каждый класс относительно простой и не требует частого исправления - один раз сделал - отладил и дальше даже не открываешь файл с ним, твой файл с кодом всегда небольшой. Ну и в заключение статья Pegas: http://forum.vingrad.ru/index.php?act=ST&f=32&t=11486 -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
Хотелось бы еще услышать о том, как разбивать программу на плагины\модули. Как это делать? И какие готовые разработки есть?
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| Gloomy |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 7.10.2003 Где: England Репутация: 1 Всего: 1 |
cully
На модули? Легко! Создаешь новый файл *.pas (допустим, myfunc.pas) и выносишь в него громоздские функции, классы, стуктуры, константы и пр.пр. Этот модуль должен быть стандартным, т.е. выглядеть так:
А потом подключаешь его к своей программе - кидаешь в одну папку с проектом (или регистрируешь путь в самом Дельфи) и дописываешь в раздел uses проекта. |
|||
|
||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: 21 Всего: 61 |
Путём экспериментов, проб и ошибок выбрал для себя следующее:
1) Не лениться писать комментарии большой длины; 2) В начале модуля краткое описание каждой процедуры или функции, можно даже и описать их работу; 3) На листке записать сложные моменты программы, к которым сложно написать комментарий. P. S. Вообще-то я непонимаю, как можно забыть родную процедурку, которая вынашивалась в голове. Это как, допустим, поэты, они зачастую знают наизусть большинство своих произведений. |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
Gloomy, я про плагины
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| Gloomy |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 7.10.2003 Где: England Репутация: 1 Всего: 1 |
cully
Плагины? Т.е. динамические библиотеки? Тоже ничего страшного - смотри пример Исходник библиотеки:
В раздел type пишешь:
И потом для кнопки:
Вот и вся мудрость Это сообщение отредактировал(а) Gloomy - 26.10.2003, 21:04 |
||||||
|
|||||||
| Monty |
|
|||
![]() Advanced Lamer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3511 Регистрация: 3.4.2003 Где: Гваделупа Репутация: нет Всего: 27 |
А я в последние время стал писать каждую часть программы отдельно от программы, а потом все вместе соединать уже в проекте
-------------------- ... О, вещая моя печаль, О, тихая моя свобода И неживого небосвода Всегда смеющийся хрусталь! |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
Gloomy, плагин это не обязательно библиотека, как писать библиотеки я знаю. Хотелось бы работать не с функциями, а с объектами, этого как раз dll нормально не позволяют делать. Многие скажут: для этого есть пакеты. Но я что-то не нашел путей обнаружения классов присутствующих в пакете и их(пакетов) динамической загрузки\выгрузки. Все просто если не вникать в проблему. Равнятся надо на .net, там можно все динамически загружать\выгружать, узнавать информацию о классах и т.д. RTTI Delphi ни в какое сравнение не идет с Reflection, с помощью Reflection можно даже классы на лету конструировать. С радостью писал бы под .net, но его малая рспространенность и большие требования к железу убивают все его премущества. Вот и хочется малой кровью добиться чего-то похожего на .net используя Delphi.
з.ы. Gloomy, и не надо из меня делать ламера. -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| Gloomy |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 7.10.2003 Где: England Репутация: 1 Всего: 1 |
cully
Тогда извини - я просто не понял о чем ты спрашиваешь. Ты написал выше: Gloomy, я про плагины. Вот я и подумал что ты про обычные динамические библиотеки ![]()
Интересная и, несомненно, полезная идея. Но как реализовать это я не знаю Если будет время обязательно займусь изучением этой проблемы. Вдруг даже что-нибудь придумаю ![]()
Ты обиделся на фразу "Вот и вся мудрость"? Извини пожалуйста - я никак не хотел этим тебя оскорбить Я вспомнил время когда придумал этот код и очень гордился таким изящным решением проблемы. Велико же было мое удивление когда я нашел такой же код в книжке Это сообщение отредактировал(а) Gloomy - 27.10.2003, 17:53 |
||||||
|
|||||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |