Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как программировать большие проекты 
:(
    Опции темы
Гость_bullet
  Дата 24.10.2003, 08:14 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я программист любитель, люблю на досуге писать всяческие программки, но всегда сталкиваюсь с такой проблемой:
Если я не пишу программу за один раз, то на следующий день я уже не могу вспомнить, что и как и где у меня делается, комментарии не помогают, приходится снова смотреть все процедуры и функции и разбираться как они работают, будто бы разбираю чужую программу..
Расскажите пожалуйста как можно построить работу над большим проектом чтобы не возникало подобной проблемы.
  Вверх
~FoX~
Дата 24.10.2003, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



Хех.....всегда сталкиваюсь с такой же проблемой!!!
Но если пишу большой проект или знаю, что его будут дописывать другой программер - я стараюсь развернуто откоментировать все строки, а в шапке пишу большой коментарий(почти в эпистолярном жанре )))) для чего етот модуль вообще нужен, какие процедуры и функции в нем сидят........и что они все вместе делают......!!!
Гуд Лак )))


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Fedor
Дата 24.10.2003, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


Профиль
Группа: Участник
Сообщений: 2090
Регистрация: 8.2.2003
Где: Великий

Репутация: нет
Всего: 32



А зачем разбираться, как работают процедуры? Если они правильны, то достаточно вспомнить, что они получают на вход и что выдают... А для удобочитаемости использую форматирование и табуляцию...
Если программируешь большой проект, используй юниты. С их помощью можно постараться во-первых, не делать файл из 3000 строк, а во-вторых разделить процедуры и функции по "тематике" и не нагромождать доп. фунциями главную программу.



--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
Gloomy
Дата 24.10.2003, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 7.10.2003
Где: England

Репутация: 1
Всего: 1



Мне помогает разбиение программы на модули. Т.е. вынос самостоятельно написанных фукнций и процедур в отдельные модули с последующим подключением их к проекту. Таким образом снижается не только размер главного модуля программы, но и значительно облегчается понимание того что написано.
Но все-таки главную и решающую роль играет стиль написания кода. Это и осмысленные имена переменных, компонентов на форме, и осмысленно названные функции и процедуры. Согласись, что гораздо проще понять код:
Код

 szAccount:= edAccount.Text;
 nInsertResult:= InsertAccount(dbAccountBase, szAccount);

чем
Код

 s:= edit1.Text;
 n:= ia(dbBase1, s);

Так и в названиях переменных. Пиши все имена только на английском и старайся обходится без цифр. Если ты не знаешь как пишется то или иное слово - потрать пару минут, загляни в словарь. Это будет полезно и тебе (пополнишь словарный запас) и программе (она будет более читабельной).

Таким образом: развивай сначала правильный стиль написания кода. А потом дели программу на модули. И тогда все будет гораздо проще ;)
PM MAIL   Вверх
val
Дата 24.10.2003, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: нет
Всего: 7



делай архивы исходников с комментариями к ним... Работает...


--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
dvs
Дата 24.10.2003, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Владимир Драпалюк
**


Профиль
Группа: Участник Клуба
Сообщений: 660
Регистрация: 25.8.2003
Где: Воронеж->Москв а

Репутация: нет
Всего: 19



А еще Можно почитать умные книжки про разработку крупных программных проектов. В них можно найти готовые системы разработки, различные подходы. К примеру, мне понравилась книга Кент Бека "Экстремальное программирование".

Ну а если читать совсем не охота, то зачем задавать такие вопросы?






--------------------
Любите друг друга!
PM MAIL WWW ICQ   Вверх
Vit
Дата 24.10.2003, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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
PM MAIL WWW ICQ   Вверх
stab
Дата 25.10.2003, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 14
Всего: 48



Хотелось бы еще услышать о том, как разбивать программу на плагины\модули. Как это делать? И какие готовые разработки есть?


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Gloomy
Дата 25.10.2003, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 7.10.2003
Где: England

Репутация: 1
Всего: 1



cully
На модули? Легко! Создаешь новый файл *.pas (допустим, myfunc.pas) и выносишь в него громоздские функции, классы, стуктуры, константы и пр.пр. Этот модуль должен быть стандартным, т.е. выглядеть так:
Код

unit myfunc;

interface

uses
 Windows; // подключаешь необходимые модули
 

type
 // здесь пишем классы, структуры и функции
 // функция писать сюда для того чтобы они видели друг друга
 // и чтобы их было видно из проекта, к которму подключится этот модуль
 
 WindowSize = record
    Left, Top, Width, Height: Integer;
 end;

 procedure Proc(const Arg1, Arg2: TStrings);
 function Funct(Arg1: Integer): String;

var
 // здесь глобальные переменные
 GlobalVariable: Int64 = 0;

const
 // и константы
 GlobalConstant: String = 'Hi, All!!!';

implementation

 { ну а тут уже сами функции и процедуры... }

procedure Proc(const Arg1, Arg2: TStrings);
begin
// ....
end;

function Funct(Arg1: Integer): String;
begin
 Result:= '';
end;

end.

А потом подключаешь его к своей программе - кидаешь в одну папку с проектом (или регистрируешь путь в самом Дельфи) и дописываешь в раздел uses проекта.
PM MAIL   Вверх
Pakshin A. S.
Дата 25.10.2003, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



Путём экспериментов, проб и ошибок выбрал для себя следующее:
1) Не лениться писать комментарии большой длины;
2) В начале модуля краткое описание каждой процедуры или функции, можно даже и описать их работу;
3) На листке записать сложные моменты программы, к которым сложно написать комментарий.


P. S. Вообще-то я непонимаю, как можно забыть родную процедурку, которая вынашивалась в голове. Это как, допустим, поэты, они зачастую знают наизусть большинство своих произведений.
PM   Вверх
stab
Дата 25.10.2003, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 14
Всего: 48



Gloomy, я про плагины smile.gif


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Gloomy
Дата 26.10.2003, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 7.10.2003
Где: England

Репутация: 1
Всего: 1



cully
Плагины? Т.е. динамические библиотеки? Тоже ничего страшного - смотри пример wink.gif
Исходник библиотеки:
Код

library testlib;

uses
 Windows;

{$R *.res}

procedure SayHello; stdcall;
begin
 MessageBox(0, 'Hello!', 'Message from DLL', MB_ICONINFORMATION);
end;

exports SayHello;

begin
end.

В раздел type пишешь:
Код

type
 SayHelloA = procedure; stdcall;

И потом для кнопки:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
 sh: SayHelloA;
 handle: THandle;
begin
 handle:= LoadLibrary('testlib.dll');
 if handle = 0 then exit;
 @sh:= GetProcAddress(handle, 'SayHello');
 if @sh = nil then exit;
 sh;
 FreeLibrary(handle);
end;

Вот и вся мудрость smile.gif

Это сообщение отредактировал(а) Gloomy - 26.10.2003, 21:04
PM MAIL   Вверх
Monty
Дата 26.10.2003, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Advanced Lamer
****


Профиль
Группа: Участник Клуба
Сообщений: 3511
Регистрация: 3.4.2003
Где: Гваделупа

Репутация: нет
Всего: 27



А я в последние время стал писать каждую часть программы отдельно от программы, а потом все вместе соединать уже в проекте smile.gif ....... жаль что я стразу так со всем остальным не сделал smile.gif ......... да и отлаживать так удобно! А то теперь я жду когда эти 2.5Метра загрузятся в память чтобы посмотреть отдельной функции программы biggrin.gif .......а теперь все по отдельности и быстро и просто wink.gif


--------------------
...
О, вещая моя печаль,
О, тихая моя свобода
И неживого небосвода
Всегда смеющийся хрусталь!
PM MAIL ICQ   Вверх
stab
Дата 27.10.2003, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 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.
PM MAIL WWW   Вверх
Gloomy
Дата 27.10.2003, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 7.10.2003
Где: England

Репутация: 1
Всего: 1



cully
Цитата
плагин это не обязательно библиотека, как писать библиотеки я знаю

Тогда извини - я просто не понял о чем ты спрашиваешь. Ты написал выше: Gloomy, я про плагины. Вот я и подумал что ты про обычные динамические библиотеки user posted image
Цитата
Хотелось бы работать не с функциями, а с объектами, этого как раз dll нормально не позволяют делать.

Интересная и, несомненно, полезная идея. Но как реализовать это я не знаю user posted image Если будет время обязательно займусь изучением этой проблемы. Вдруг даже что-нибудь придумаю user posted image
Цитата
и не надо из меня делать ламера.

Ты обиделся на фразу "Вот и вся мудрость"? Извини пожалуйста - я никак не хотел этим тебя оскорбить user posted image Я вспомнил время когда придумал этот код и очень гордился таким изящным решением проблемы. Велико же было мое удивление когда я нашел такой же код в книжке user posted image

Это сообщение отредактировал(а) Gloomy - 27.10.2003, 17:53
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2376 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.