Проблема взаимной зависимости между классами, строго говоря, может быть решена с помощью интерфейсов (абстрактных классов, если ваш язык, например, C ++ или Python) IRoom
и IPerson
; в псевдокоде
interface IPerson
IRoom getRoom()
// etc
interface IRoom
iter<IPerson> iterPerson()
// etc
это делает только интерфейсы взаимозависимыми друг от друга - фактические реализации интерфейсов должны зависеть только от интерфейсов.
Это также дает вам много возможностей с точки зрения реализации, если вы хотите избежать циклических ссылочных циклов (что может мешать, например, в CPython, замедляя сборку мусора) - вы можете использовать слабые ссылки базовая реляционная база данных с типичной таблицей отношений «один ко многим» и т. д., и т. д. И для первого простого прототипа вы можете использовать то, что является самым простым в выбранном вами языке (возможно, простые и, увы, обязательно круговые, ссылки [[указатели, в C ++]] с Person
, относящимся к Room
и Room
к list<Person>
).