Форум: "Основная";
Текущий архив: 2002.05.13;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c