Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Разбить один класс на 2 модуля [D7, WinXP]


Страницы:   1 2

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;

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо