Согласен, съёрничал ^_^ Но суть не изменится. Ученики в классе меня интересуют ИМЕННО как ученики. С оценками, родителями и всеми остальными сведениями об учениках. Оценки и родители учителей меня интересуют чуть менее чем никак. Создать класс, который будет точь-в-точь как ученик и затем наследовать ученика от него - это и будет решение т-ща
zub'a, которое будет значительно многословней решения на связанных классах...
В общем, неужели я хочу так многого - разбить конструкцию
- Код: Выделить всё
Type TPupil = Class;
Type TPupils = Specialize TFPGList<TPupil>;
Type TGrade = Class
Private
fPupils: TPupils;
Function GetPupils: TPupils
Public
Property Pupils: TPupils Read GetPupils;
End;
Type TPupil = Class
Private
Function GetGrade: TGrade;
Public
Property Grade: TGrade Read GetGrade;
End;
Всё! Шикарно работающее решение, надёжно инкапсулирующее от пользователей классов TPupil/TGrade то что есть какая-то таблица соответствий. Которое перестаёт работать стоит мне разнести эти два класса по разным модулям. Да, блин, каждый второй модуль в самом Lazarus'е грешит конструкцией "Forward class declarations" <ClassName> = Class; которая, если верить фразе "скорее ошибка проектирования программы, чем недостаток языка." (из-за которой, если кто помнит, и начался весь флейм). Вот только если циклические ссылки идут в одном модуле - то всё хорошо и нормально, а если в нескольких - то сразу же оказывается, что проектировщик дурак и на самом деле есть изящные и правильные решения, не то что... Неужели вы в самом деле в это верите?
Решение товарища
stikriz'a заставляет каждый раз когда мне нужен текущий класс, в котором учится ученик обращаться к третьему классу, что явным образом нарушает инкапсуляцию. Решение товарища
alexs'a - заставляет либо пользоваться приведением типа, либо реализовывать костыльный механизм подстановки ненужного мне класса, некоторым образом напоминающее решение товарища
zub'a.
А если попробовать перестать упираться в "ненужности" возможностей namespace'ов - все ведь решится и решится довольно изящно. Равно как ещё довольно внушительный набор проблем.