Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.10;
Скачать: CL | DM;

Вниз

Простой вопрос по Object Pascal.   Найти похожие ветки 

 
Kostafey ©   (2006-11-24 22:26) [0]

Подскажите пожалуйста как можно разделить реализацию класса на несколко модулей (файлов).
Или же просто есть ли Delphi команда аналогичная #include"Somefile" в С++


 
Palladin ©   (2006-11-24 22:35) [1]

{$I} + F1
только на кой это тебе


 
Kostafey ©   (2006-11-24 22:39) [2]

> {$I} + F1
> только на кой это тебе

Да чтоб файл не листать. А так конечно нарушение принципов модульности.

А вот как можно разделить реализацию класса на несколко модулей непонятно.


 
Anatoly Podgoretsky ©   (2006-11-24 22:48) [3]

> Kostafey  (24.11.2006 22:26:00)  [0]

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


 
Sergey Masloff   (2006-11-24 22:49) [4]

Раздели класс на несколько более мелких. Один будет интерфейсом для остальных. Только это извращение


 
Anatoly Podgoretsky ©   (2006-11-24 22:49) [5]

> Kostafey  (24.11.2006 22:39:02)  [2]

Так ты предпочитаешь листать несколько файлов :-)
Может дойти до конца? Каждая строчка один файл?


 
Kostafey ©   (2006-11-24 23:01) [6]

> Так ты предпочитаешь листать несколько файлов :-)
> Может дойти до конца? Каждая строчка один файл?

Да, я согласен правда в этом есть. У меня вообще никакого опата разработки болших проектова нет. (для кого-то он будет и маленьким)
Вот такая конструкция сама по себе не очень красивая, а если вместо {$INCLUDE "SQL_a1.pas"} будут мои 171 строка кода все становиться
нечитаемым, а сами 171 строчка уже отлажены. Вот я подумал убрать их в файл от греха подальше.


begin
 with DataModule_ABR.ADODataSet1 do
 BEGIN
     Result:=true;
     Active:=false;
     DataModule_ABR.ADODataSet2.Active:=false;
     case ABR_kind of
       a0:begin
            MessageDlg("Ionoie cai?in", mtInformation, [mbOK], 0);
            Result:=false;
          end;
       a1:begin  //Aiaeec aeaia auacaia
         {$INCLUDE "SQL_a1.pas"}
          end;
       a2:begin  //Aiaeec ?ani?aaaeaiey auacaia ii ?aiaai ii?a?a
          CommandText :="Select PCH.PCH_NAME, ZVK1.RANK,  count(Zvk1.PCH_COD) as Acount "+
                         "from PCH, ZVK1 "+
                         "Where (ZVK1.PCH_COD=*PCH.PCH_COD) and (DATE_ZVK1 between :DateFrom and :DateTo) "+
                         "group by PCH.PCH_NAME, ZVK1.RANK "+
                         "order by PCH.PCH_NAME, ZVK1.RANK ";

           Parameters.ParamByName("DateFrom").Value:=Per_beg;
           Parameters.ParamByName("DateTo").Value:=Per_end;
          end;
       else
         MessageDlg("Ioeai?iue cai?in", mtError, [mbOK], 0);
         Result:=false;
     end; //case
     if Result then Active:=true;
 END;
end;


 
Kolan ©   (2006-11-24 23:01) [7]

> Только это извращение

Фасад это, а не извращение.

> Да чтоб файл не листать.

А что тут трудного?
Ctrl + Click на имени перенесет тебя к объявлению.
В левом верхнем углу среды есть дерево функций/классов тоже можно переходить быстро.


 
Kolan ©   (2006-11-24 23:02) [8]

> строчка уже отлажены

И что работают во всех 100% случаев. Поверь получится так, что и там нужно будет что-то менять..


 
Kostafey ©   (2006-11-24 23:03) [9]

> А что тут трудного?
> Ctrl + Click на имени перенесет тебя к объявлению.
> В левом верхнем углу среды есть дерево функций/классов тоже
> можно переходить быстро.


Угу. Если это разные подпрограммы, а если одна ?


 
Kostafey ©   (2006-11-24 23:04) [10]

Как я понимаю резюме следующее:

ОСТАВИТЬ ВСЕ КАК ЕСТЬ ??


 
Kolan ©   (2006-11-24 23:05) [11]

> [9] Kostafey ©   (24.11.06 23:03)
> > А что тут трудного?
> > Ctrl + Click на имени перенесет тебя к объявлению.
> > В левом верхнем углу среды есть дерево функций/классов
> тоже
> > можно переходить быстро.
>
>
> Угу. Если это разные подпрограммы, а если одна ?


А что у тя подпрограмма(это же функция/процедура так называется) не вмещается в 1-2 экрана? Тады она написаны хреново. Выделай отдельные(рефакторинг Extract Method)


 
Kolan ©   (2006-11-24 23:05) [12]

> 171

Мистическое число :)


 
Kolan ©   (2006-11-24 23:07) [13]

> если одна ?

Кстати Ctrl+Click вполне пригоден.


 
Kostafey ©   (2006-11-24 23:08) [14]

>Выделай отдельные(рефакторинг Extract Method)

Уверен, эта фраза имеет перевод на человеческий язык.


 
Kostafey ©   (2006-11-24 23:09) [15]

> Кстати Ctrl+Click вполне пригоден.

Ну да, я конечно всех возможностей IDE незнаю


 
Kolan ©   (2006-11-24 23:18) [16]

> Уверен, эта фраза имеет перевод на человеческий язык.

Имеет: Рефакторинг "Извлечение метода"


> Ну да, я конечно всех возможностей IDE незнаю

Пока я так и не понял в чем проблемма? Что тебя подталкнуло разделять класс! на модули...


 
Kostafey ©   (2006-11-24 23:22) [17]

> Имеет: Рефакторинг "Извлечение метода"

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


> Пока я так и не понял в чем проблемма? Что тебя подталкнуло
> разделять класс! на модули...

Разрастание класса и подтолкнуло. Хотя бы разместить реализацию класса в нескольких файлах.
Хотя судя по комментариям участников это не самое лучшее решение ?


 
Kolan ©   (2006-11-24 23:31) [18]

> не самое лучшее решение

Отвратительное.


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

Значит они все неправильные. Зачем делать одно и тоже(или почти одно и тоже) несколько раз? Опять же рефакторинг нужен. Устраните дубликаты. Пример дубликатов в студию..


> Разрастание класса и подтолкнуло.

Прям так распух? 100 000 строк уже есть?


 
Anatoly Podgoretsky ©   (2006-11-24 23:39) [19]

> Kostafey  (24.11.2006 23:01:06)  [6]

Если не обращать внимания на ошибки, то помести "SQL_a1.pas" в отдельную процедуру.


 
Kostafey ©   (2006-11-24 23:39) [20]


> Прям так распух? 100 000 строк уже есть?

Нет, но 400-600 строк и все нужно по-моему в другой файл перебрасывать

> Значит они все неправильные. Зачем делать одно и тоже(или
> почти одно и тоже) несколько раз? Опять же рефакторинг нужен.
> Устраните дубликаты. Пример дубликатов в студию..


А в дубликатах есть просто изменения в SQL-запросах:

           DataModule_ABR.ADODataSet2.CommandText:=
"Select count(PCH_COD)+ "+
         "(select count(PCH_COD) "+
           "from ZVK1ARX o "+
           "where (o.DATE_ZVK between :DateFrom and :DateTo)) as Kol "+
"from ZVK1 "+
"where (DATE_ZVK1 between :DateFrom1 and :DateTo1) ";

           DataModule_ABR.ADODataSet2.Parameters.ParamByName("DateFrom").Value:=Per_beg;
           DataModule_ABR.ADODataSet2.Parameters.ParamByName("DateTo").Value:=Per_end;
           DataModule_ABR.ADODataSet2.Parameters.ParamByName("DateFrom1").Value:=Per_beg;
           DataModule_ABR.ADODataSet2.Parameters.ParamByName("DateTo1").Value:=Per_end;
           DataModule_ABR.ADODataSet2.Active:=true;
           DataModule_ABR.ADODataSet2.First;
           //Iauaa ?enei ii?a?ia ca ?an?aoiue ia?eia
           tmpCount1:=DataModule_ABR.ADODataSet2.FieldValues["Kol"];
           DataModule_ABR.ADODataSet2.Active:=false;
           DataModule_ABR.ADODataSet2.CommandText:=
"Select count(PCH_COD)+ "+
         "(select count(PCH_COD) "+
           "from ZVK1ARX o "+
           "where (o.DATE_ZVK between :DateFrom and :DateTo)) as Kol "+
"from ZVK1 "+
"where (DATE_ZVK1 between :DateFrom1 and :DateTo1) ";

           DataModule_ABR.ADODataSet2.Parameters.ParamByName("DateFrom").Value:=Srv_beg;
           DataModule_ABR.ADODataSet2.Parameters.ParamByName("DateTo").Value:=Srv_end;
           DataModule_ABR.ADODataSet2.Parameters.ParamByName("DateFrom1").Value:=Srv_beg;
           DataModule_ABR.ADODataSet2.Parameters.ParamByName("DateTo1").Value:=Srv_end;
           DataModule_ABR.ADODataSet2.Active:=true;
           DataModule_ABR.ADODataSet2.First;
           //Iauaa ?enei ii?a?ia ca n?aaieaaaiue ia?e?ia
           tmpCount2:=DataModule_ABR.ADODataSet2.FieldValues["Kol"];

           Delta:=tmpCount1-tmpCount2;


 
Kostafey ©   (2006-11-24 23:41) [21]


> [19] Anatoly Podgoretsky ©   (24.11.06 23:39)
> > Kostafey  (24.11.2006 23:01:06)  [6]
>
> Если не обращать внимания на ошибки, то помести "SQL_a1.pas"
> в отдельную процедуру.


Во ! Это-то и оно! А саму процедуру в отдельный файл ?


 
Anatoly Podgoretsky ©   (2006-11-24 23:47) [22]

> Kostafey  (24.11.2006 23:03:09)  [9]

Все что можно вынести в отдельный файл, можно поместить в процедуру.


 
Anatoly Podgoretsky ©   (2006-11-24 23:48) [23]

> Kostafey  (24.11.2006 23:04:10)  [10]

Нет, надо просто разбить на процедуры и им дать значимые имена.


 
Anatoly Podgoretsky ©   (2006-11-24 23:53) [24]

> Kostafey  (24.11.2006 23:39:20)  [20]

Это в отдельную функцию или процедуру.


 
Kostafey ©   (2006-11-24 23:59) [25]

> Anatoly Podgoretsky ©   (24.11.06 23:53)

Ладно. Я все понял. Спасибо что уделили мне время.
Возможно, когда-нибудья научусь писать толковый код.


 
Anatoly Podgoretsky ©   (2006-11-25 00:13) [26]

> Kostafey  (24.11.2006 23:59:25)  [25]

Научишься.



Страницы: 1 вся ветка

Текущий архив: 2006.12.10;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.034 c
2-1164042627
lobach
2006-11-20 20:10
2006.12.10
Как проверить существование пункта в listbox?


15-1164018598
Tex
2006-11-20 13:29
2006.12.10
XPManifest


2-1164489332
kami
2006-11-26 00:15
2006.12.10
Потокобезопасность TStringList


15-1164213822
Сэм
2006-11-22 19:43
2006.12.10
DDR 1024Mb PC 3200 SAMSUNG


15-1163739160
Ded
2006-11-17 07:52
2006.12.10
ЗАДАЧА