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

Вниз

Разбить один класс на 2 модуля   Найти похожие ветки 

 
Sco ©   (2006-03-05 06:18) [0]

unit ABS
interface
type
 fff class
  procedure * 10
 end;

unit ABS2
interface
type
 и тут тот же самый класс, просто другие процедуры.
end.

У меня просто модуль стал очень большой и я хотел бы знать как можно класс в нём разбить на 2 модуля.
Надеюсь понятно обьяснил?


 
palva ©   (2006-03-05 09:26) [1]

Можно во втором модуле описать второй класс, который является наследником первого. Только аккуратно, чтобы процедуры первого класса не обращались к полям второго. Ну и другие нюансы наверняка будут.


 
TUser ©   (2006-03-05 09:50) [2]

Или {$i ... использовать. А очень большой модуль - это сколько?


 
Sco ©   (2006-03-05 14:40) [3]

Ну не очень большой, но мне уже не удобно, у меня там 3д анимация, и я путаюсь


 
pasha_golub ©   (2006-03-05 17:27) [4]

Поддерживаю TUser ©   (05.03.06 09:50) [2]

Вариант с {$I ...} очень удобная штука. Сам таким пользуюсь.


 
Sco ©   (2006-03-05 18:11) [5]

pasha_golub ©
Обьясни, а то мне до директив пока, как чукчу до Эвереста. Как ей пользоваться, приведи пример, плиз.


 
evvcom ©   (2006-03-05 22:58) [6]


> Вариант с {$I ...} очень удобная штука.

Для того, что нужно автору, я не считаю include удобным. Всё, что в этом инклуде не найти потом по "Find declaration". IDE этого не увидит. Может просто научиться пользоваться тем, что предоставляет IDE (Object TreeView, Code Explorer)? Наверняка стандартные модули больше "очень большого модуля" автора, а там не по одному классу.


 
Германн ©   (2006-03-06 01:25) [7]


> Sco ©   (05.03.06 14:40) [3]
>
> Ну не очень большой, но мне уже не удобно, у меня там 3д
> анимация, и я путаюсь

Я так понял, что данная анимация очень много строк занимает.?
Так вот реализацию этих функций и вынеси в другой юнит (модуль).
А далее либо {$I...}, либо Uses. Во втором случае замечания evvcom ©   (05.03.06 22:58) [6] учтутся. Наверно.?
Я, лично, пользовался до сих пор только "Find" и "Find in files".


 
Sco ©   (2006-03-06 04:14) [8]

evvcom -> не а, именно по одному, ну модуль ещё не громаден, но кода я ещё туда столько воткну, что успею обматерить каждого по отдельности программиста Борланд. Дело в том что он очень одиннаков, но никак, по моему не сожмёшь.
Германн -> а {si Classik_Graph.pas} вставлять?


 
Sco ©   (2006-03-06 13:25) [9]

Ну так как её использовать? Я по разному попробовал.
Вот такое не прокатило
unti1;
interface
abs: class
 procedure p1;
end;

unit2
interface
{si unit1}
abs: class
 procedure p2
end;
implementation
procedure abs.p2;
begin

end;

Ну скажите как её используют???


 
wicked ©   (2006-03-06 13:29) [10]

> Sco ©   (06.03.06 13:25)
дружище, судя по вопросам, рано тебе еще графикой и анимацией заниматься... книжки читать о модульном программировании, начинать с малого....
по опыту скажу, что графика прекрасно раскидывается в небольшие элегантные модули....


 
Sco ©   (2006-03-06 14:07) [11]

> wicked © Действительно мне в 16 лет безумно интересно модульное программирование, прямо спать без него не могу, а графика и анимация, это так для зрелого возраста, мне туда лучше не соваться. Ты это имел ввиду, я понимаю в твои 26 тебе может и интересно модульное программирование, но по мне так я лучше учебник физики вызубрю, всё равно сдавать, чем что то такое заумное, как директивы, модули. Ну не понимаю, не ужели тебе не проще было написать маленькую схемку?


 
Сергей М. ©   (2006-03-06 15:23) [12]


> как можно класс в нём разбить на 2 модуля.
> Надеюсь понятно обьяснил?


Ну где же понятно-то ?

Речь ведешь вроде бы об одном классе, а сам приводишь пример с двумя ...


 
Sco ©   (2006-03-06 16:43) [13]

Сергей М. ©  > Не класс один, но большой и неудобный, хочу чтобы он в двух или трёх модулях был. Ну допутим отображения и определние клеток в одном, их анимация в другом, а класс один.


 
Джо ©   (2006-03-06 16:46) [14]

> [13] Sco ©   (06.03.06 16:43)
> Сергей М. ©  > Не класс один, но большой и неудобный,

Это все будут костыли, не более того. Начать нужно с того, чтобы переделать "большой и неудобный" класс в набор небольших и удобных.


 
Сергей М. ©   (2006-03-06 17:26) [15]


> Sco ©   (06.03.06 16:43) [13]


Требования Делфи таковы что декларация и реализация любого класса и всех его методов/свойств должны присутствовать в одном и том же юните.
Частичным решением при этом может быть использование включаемых модулей (см. директиву $I[NCLUDE]), но это в общем случае действительно не более чем "костыль", а у тебя  именно общий случай, поскольку никаких конкретных сведений о структуре класса ты не приводишь.


 
Sco ©   (2006-03-06 18:48) [16]

Джо ©  чтож придётся работать в одном модуле с одним классом, буду учится делать код читаемым, маленьким, "элегантным" и т.д..


 
wicked ©   (2006-03-06 18:56) [17]

> Sco ©
ты так ничего и не понял.... да и не за возраст тебе говорилось, а за отсутствие элементарнейших знаний, без которых писать "графику и анимацию" просто невозможно.... это как хотеть бегать, но уметь пока что ползать и не уметь даже стоять на ровных ногах....


 
Игорь Шевченко ©   (2006-03-07 01:15) [18]


>  и тут тот же самый класс, просто другие процедуры


А другой класс не проще сделать ?

не fff, а ggg, например. Тоже имя...

или переходи на .Net Framework 2.0 - там partial classes есть, как раз то, что тебе надо.


 
evvcom ©   (2006-03-07 08:45) [19]


> {si unit1}

Сравни с

> {$I ...}


 
API ©   (2006-03-07 09:08) [20]

unti1;
interface
abs: class
procedure p1;
end;

unit2
interface
{si unit1}
abs: class
procedure p2
end;
implementation
procedure abs.p2;
begin

end;

Ну скажите как её используют???


Модуль unit1:

unit unit1;

interface

type
 T3DClass = class
   procedure Method1;
   procedure Method2;
   procedure Method3;
 end;

implementation

{$I some_text.pas}

procedure T3DClass.Method1;
begin
end;

end.


Файл some_text.pas:


{начало текста}
procedure T3DClass.Method2;
begin
end;

procedure T3DClass.Metod3;
begin
end;
{конец текста}


Обратите внимание, в файле "some_text.pas" никаких "unit unit2;" - нет.
На самом деле, это не модуль, в понимании Delphi.
Это просто текстовый файл, содержимое которого будет вставлено в том месте, где будет встречена директива {$I ...}.
Поэтому, этот "псевдо-модуль" не должен быть объявлен нигде, но только в том файле, который его использует, и только в директиве {$I ...}.
В момент компиляции, Delphi без изменений вставит его содежимое вместо директивы {$I ...}, как будто бы этот текст там присутствует.


 
Sco ©   (2006-03-07 15:15) [21]

API © не сработало, пишет что Unit ожидается а "procedure" найдено


 
Джо ©   (2006-03-07 15:20) [22]

> [21] Sco ©   (07.03.06 15:15)
> API © не сработало, пишет что Unit ожидается а "procedure"
> найдено

А в каком месте модуля ты разместил {$I ...} ?


 
Плохиш ©   (2006-03-07 15:21) [23]


> Sco ©   (07.03.06 15:15) [21]

Читай [20] до полного просветления.


 
Sco ©   (2006-03-07 17:00) [24]

Вот в очередном из вариантов, я поставил {$i сразу после implementation и он мне теперь выделяет первую попашуюся процедуру или функцию в классе и пешет что её нет в модуле!


 
Бурундук ©   (2006-03-07 21:39) [25]

Sco ©   (07.03.06 17:00) [24]
>"Дело в том что он очень одиннаков, но никак, по моему не сожмёшь."
Не исключено, что это только по твоему.
Пример приведи.


 
Германн ©   (2006-03-08 02:40) [26]


> Sco ©   (07.03.06 17:00) [24]
>
> Вот в очередном из вариантов, я поставил {$i сразу после
> implementation и он мне теперь выделяет первую попашуюся
> процедуру или функцию в классе и пешет что её нет в модуле!


Сдаётся мне, что ты не различаешь понятия "декларация" и "реализация".


 
Sco ©   (2006-03-08 11:32) [27]

Могу скинуть на E-Mail кому-нибудь. Декларация - ето там где функции описываются, а реализация ето где сама функция, т.е. после implementation. Так?


 
Германн ©   (2006-03-09 01:33) [28]


> Sco ©   (08.03.06 11:32) [27]
>
> Могу скинуть на E-Mail кому-нибудь. Декларация - ето там
> где функции описываются, а реализация ето где сама функция,
>  т.е. после implementation. Так?

Так.

Кидай на мыло в анкете. Посмотрю.



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

Форум: "Основная";
Текущий архив: 2006.04.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.016 c
3-1139687196
veb
2006-02-11 22:46
2006.04.09
Ограничения ADOTable.Filter


1-1141665861
Navi
2006-03-06 20:24
2006.04.09
Ошибка при вызове GetActiveOleObject из DLL


15-1142527982
Ketmar
2006-03-16 19:53
2006.04.09
немного исходников....


15-1142557166
Ketmar
2006-03-17 03:59
2006.04.09
фе. "конкурсы" какие-то...


1-1141561561
Fenix
2006-03-05 15:26
2006.04.09
Копирование отформатированного текст из RichEdit a





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский