Вам сразу сказали, что можно сделать два класса, а потом в третьем модуле от них отнаследоваться, используя для ссылок предков, и это паскаль не запрещает. Смысл не в этом. Смысл в том, что в конкретно Вашей программе, в том случае, как Вы описали, делать изврат ненужно. Коллекции нужны, чтобы не писать самому ридеры-райтеры. И таких извратов в компонентном программировании много, и не надо их плодить дополнительно.
А я сразу согласился, но указал, что изврат и костыль как раз это. Забудьте о каких либо примерах, вернёмся к чистой абстракции.
Один класс имеет ссылку на второй класс, второй - на первый. И я должен или держать их в одном модуле, или создавать совершенно не нужный мне промежуточный класс.
Есть такой замечательный принцип открытия-закрытия. Не изменяя текущего положения вещей в паскале мы можем дополнить его возможности, добавив поддержку более развитой системы пространства имён, в форме тех же Java'овских пакетов.
stikriz, зайдём с другой стороны - а в чем плюсы того, что мне запрещено разбивать связанные классы на разные модули, связанные одним пространством имён?
Вам сразу сказали, что можно сделать два класса, а потом в третьем модуле от них отнаследоваться, используя для ссылок предков, и это паскаль не запрещает. Смысл не в этом. Смысл в том, что в конкретно Вашей программе, в том случае, как Вы описали, делать изврат ненужно. Коллекции нужны, чтобы не писать самому ридеры-райтеры. И таких извратов в компонентном программировании много, и не надо их плодить дополнительно.
Гораздо проще написать собственный препроцессор, который будет исправлять некоторые косяки паскаля. Но он будет работать медленней и костыльней, чем реализация правильных методик в самом компиляторе. На патчи к самому компилятору знаний и времени не хватит
Но, сам же и не пользуюсь - выразительнее два раза присвоить в двух операторах
А чем плохо использовать свойства в качестве Var/Out аргуметов методов? Или это тоже "он такой. И это хорошо."?
Предпоследний вопрос.
stikriz, Вы считаете, что перекрестная связь между классами - зло (вида <ClassName> = Class;)?
И если нет (повторение мать учения), в чем плюсы того, что я не могу классы с перекрестными ссылками друг на друга разнести на разные модули без создания дополнительных родительских классов (при том что при замещении в одном модуле они не нужны)?
Добавлено спустя 1 минуту 20 секунд:AGrade := APupil.Grade; - ну вот вообще ненаглядно и неудобно
Всё правильно, с точки зрения АТД ученик и не должен знать в каком классе он учится. Не с точки зрения алгебры множеств, а с точки зрения здравого смысла.