![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Разбить один класс на 2 модуля [D7, WinXP]
Sco © (2006-03-05 06:18:00)unit ABS
interface
type
fff class
procedure * 10
end;
unit ABS2
interface
type
и тут тот же самый класс, просто другие процедуры.
end.
У меня просто модуль стал очень большой и я хотел бы знать как можно класс в нём разбить на 2 модуля.
Надеюсь понятно обьяснил?
Германн (2006-03-09 01:33:00) [1]
> Sco © (08.03.06 11:32) [27]
>
> Могу скинуть на E-Mail кому-нибудь. Декларация - ето там
> где функции описываются, а реализация ето где сама функция,
> т.е. после implementation. Так?
Так.
Кидай на мыло в анкете. Посмотрю.
Sco (2006-03-08 11:32:00) [2]Могу скинуть на E-Mail кому-нибудь. Декларация - ето там где функции описываются, а реализация ето где сама функция, т.е. после implementation. Так?
Германн (2006-03-08 02:40:00) [3]
> Sco © (07.03.06 17:00) [24]
>
> Вот в очередном из вариантов, я поставил {$i сразу после
> implementation и он мне теперь выделяет первую попашуюся
> процедуру или функцию в классе и пешет что её нет в модуле!
Сдаётся мне, что ты не различаешь понятия "декларация" и "реализация".
Бурундук (2006-03-07 21:39:00) [4]Sco © (07.03.06 17:00) [24]
>"Дело в том что он очень одиннаков, но никак, по моему не сожмёшь."
Не исключено, что это только по твоему.
Пример приведи.
Sco (2006-03-07 17:00:00) [5]Вот в очередном из вариантов, я поставил {$i сразу после implementation и он мне теперь выделяет первую попашуюся процедуру или функцию в классе и пешет что её нет в модуле!
Плохиш (2006-03-07 15:21:00) [6]
> Sco © (07.03.06 15:15) [21]
Читай [20] до полного просветления.
Джо (2006-03-07 15:20:00) [7]> [21] Sco © (07.03.06 15:15)
> API © не сработало, пишет что Unit ожидается а "procedure"
> найдено
А в каком месте модуля ты разместил {$I ...} ?
Sco (2006-03-07 15:15:00) [8]API © не сработало, пишет что Unit ожидается а "procedure" найдено
API (2006-03-07 09:08:00) [9]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 ...}, как будто бы этот текст там присутствует.
evvcom (2006-03-07 08:45:00) [10]
> {si unit1}
Сравни с
> {$I ...}
Игорь Шевченко (2006-03-07 01:15:00) [11]
> и тут тот же самый класс, просто другие процедуры
А другой класс не проще сделать ?
не fff, а ggg, например. Тоже имя...
или переходи на .Net Framework 2.0 - там partial classes есть, как раз то, что тебе надо.
wicked (2006-03-06 18:56:00) [12]> Sco ©
ты так ничего и не понял.... да и не за возраст тебе говорилось, а за отсутствие элементарнейших знаний, без которых писать "графику и анимацию" просто невозможно.... это как хотеть бегать, но уметь пока что ползать и не уметь даже стоять на ровных ногах....
Sco (2006-03-06 18:48:00) [13]Джо © чтож придётся работать в одном модуле с одним классом, буду учится делать код читаемым, маленьким, "элегантным" и т.д..
Сергей М. (2006-03-06 17:26:00) [14]
> Sco © (06.03.06 16:43) [13]
Требования Делфи таковы что декларация и реализация любого класса и всех его методов/свойств должны присутствовать в одном и том же юните.
Частичным решением при этом может быть использование включаемых модулей (см. директиву $I[NCLUDE]), но это в общемслучае действительно не более чем "костыль", а у тебя именно общий случай, поскольку никаких конкретных сведений о структуре класса ты не приводишь.
Джо (2006-03-06 16:46:00) [15]> [13] Sco © (06.03.06 16:43)
> Сергей М. © > Не класс один, но большой и неудобный,
Это все будут костыли, не более того. Начать нужно с того, чтобы переделать "большой и неудобный" класс в набор небольших и удобных.
Sco (2006-03-06 16:43:00) [16]Сергей М. © > Не класс один, но большой и неудобный, хочу чтобы он в двух или трёх модулях был. Ну допутим отображения и определние клеток в одном, их анимация в другом, а класс один.
Сергей М. (2006-03-06 15:23:00) [17]
> как можно класс в нём разбить на 2 модуля.
> Надеюсь понятно обьяснил?
Ну где же понятно-то ?
Речь ведешь вроде бы об одном классе, а сам приводишь пример с двумя ...
Sco (2006-03-06 14:07:00) [18]> wicked © Действительно мне в 16 лет безумно интересно модульное программирование, прямо спать без него не могу, а графика и анимация, это так для зрелого возраста, мне туда лучше не соваться. Ты это имел ввиду, я понимаю в твои 26 тебе может и интересно модульное программирование, но по мне так я лучше учебник физики вызубрю, всё равно сдавать, чем что то такое заумное, как директивы, модули. Ну не понимаю, не ужели тебе не проще было написать маленькую схемку?
wicked (2006-03-06 13:29:00) [19]> Sco © (06.03.06 13:25)
дружище, судя по вопросам, рано тебе еще графикой и анимацией заниматься... книжки читать о модульном программировании, начинать с малого....
по опыту скажу, что графика прекрасно раскидывается в небольшие элегантные модули....
Sco (2006-03-06 13:25:00) [20]Ну так как её использовать? Я по разному попробовал.
Вот такое не прокатило
unti1;
interface
abs: class
procedure p1;
end;
unit2
interface
{si unit1}
abs: class
procedure p2
end;
implementation
procedure abs.p2;
begin
end;
Ну скажите как её используют???