Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];

Вниз

Простой вопрос по 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.033 c
15-1163783232
TUser
2006-11-17 20:07
2006.12.10
Не сочтите за рекламу,


3-1159945457
Roma L
2006-10-04 11:04
2006.12.10
Проблема с удалением данных в таблице Access


2-1164028160
Kelim
2006-11-20 16:09
2006.12.10
Блокирование/разблокирование устройств


4-1154297383
Andrewk88
2006-07-31 02:09
2006.12.10
NetUserGetGroups


1-1161853464
DelphiLexx
2006-10-26 13:04
2006.12.10
Как избежать сбоев RxGifAnimator





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский