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

Вниз

Object Pascal: Как обьявить два взаимосвязанных класса ?   Найти похожие ветки 

 
IGOREK ©   (2002-04-29 15:24) [0]

Уважаемые мастера. Прошу прощения за может быть простые вопросы
(только недавно перешел с C++ на Object Pascal)
Есть два взаимосвязанных класса напр.
A = class
procedure f(V: B);
end;
B = class
procedure f(V: A);
end;

Требуется их обьявить:
1) в одном модуле, но один класс должен быть видимым пользователям
модуля (в interface части), а другой нет
2) отдельно каждый в своем модуле

Причем обойтись без приведения типов, напр.
procedure B.f(V: TObject);
begin
A(V). ...
end;

Для первого случая я не знаю как сделать...
Для второго случая чтобы обойти ошибку "circular unit reference"
я не придумал ничего лучше приведения типов.

Спасибо, если кто откликнется.

P.S. А в С++ так все просто и элегантно...


 
DieHard ©   (2002-04-29 15:32) [1]

type
B=class;

A = class
procedure f(V: B);
end;
B = class
procedure f(V: A);
end;


 
Anatoly Podgoretsky ©   (2002-04-29 15:37) [2]

Это не получится никаким методом, допустим ты хочешь, что бы был видимым класс А, но он требует что бы был видимым класс B
Аналогично для второго класса.
Тебе надо пересмотреть подход к классам, например иметь базовый класс с абстрактыми методами.


 
Толик ©   (2002-04-29 15:46) [3]

К сожалению, никак. Как вариант, можно предложить объявить второй класс в разделе implementation, тогда он будет виден только внутри этого unit"а (по аналогии с С++, когда объявляешь класс внутри другого класса)
PS. А вот в C++ действительно всё просто, ну так это всё-таки С++, а не что-нибудь...


 
Игорь Шевченко ©   (2002-04-29 15:55) [4]

День добрый, Толик ©,

И в C++ можно плохую иерархию классов спроектировать :-)

С уважением,


 
Толик ©   (2002-04-29 16:23) [5]

to Игорь Шевченко ©:
Речь идёт не о плохой или хорошей иерархии классов, а об ограничениях, накладываемых Делфями. Ну нельзя такую штуку реализовать в Делфях и всё... И не потому что Делфи плохие, а потому что у любой проги есть свои ограничения. Дело в том, что подобные ограничения часто усложняют жизнь, а в Делфях они встречаются достаточно часто (вспомните недавний диалог про вызовы виртуальных ф-й и VMTOFFSET). Но если со всеми этими ограничениями так много людей используют Делфи, наверное что-то их привлекает? :)


 
Игорь Шевченко ©   (2002-04-29 17:13) [6]

День добрый, Толик,


> Ну нельзя такую штуку реализовать в Делфях и всё

А очень надо? :-)

На хорошую иерархию классов Delphi ограничений не накладывает :-)

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

С уважением,


 
IGOREK ©   (2002-04-29 18:00) [7]

2Anatoly Podgoretsky © (29.04.02 15:37)
> Тебе надо пересмотреть подход к классам, например иметь базовый класс с абстрактыми методами.

Да нет. Два класса совершенно разные и глупо делать общий базовый.
Кроме того так все равно без приведения типов не обойтись (хотя может тут я не прав).

У меня первый проект на Delphi (пакет компонентов).
Но очень часто всречается взаимное использование или аггрегация классов. Не сбивать же все в один модуль (как в VCL семейства классов сбиты).
Кроме того есть классы вспомогательные и не должны быть видны пользователю.
Вот такие проблеммы с Object Pascal.
И как только на нем грамотно писать сложные вещи?..

Может в новом стандарте будет лучше, но когда он будет?...



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

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

Наверх




Память: 0.48 MB
Время: 0.011 c
14-39843
Леха
2002-04-04 10:31
2002.05.13
Есть такое предложение


14-39851
JEff
2002-03-08 16:09
2002.05.13
Изменение Caption а QRDBText а


1-39776
alxx
2002-04-28 21:14
2002.05.13
Опять по поводу библиотеки типов


14-39849
vopros
2002-04-04 12:03
2002.05.13
Люди кто нибудь пользовался ипотечным кредитом?


7-39874
Потерянный
2002-02-13 16:10
2002.05.13
Спящий режим