#class #oop
#класс #ООП
Вопрос:
При определении классов объектов для связанных объектов, каков «правильный» или «предпочтительный» способ обработки отношений в ООП?
Например, у нас есть User
класс, который определяет пользователя, и у нас есть Meeting
класс, который представляет собрание, на котором пользователь будет ведущим, а несколько пользователей-гостями.
class User { private int uid; private string uname; private int privs; // constructor, getters, setters }
class Meeting { private int mid; private string mname; private string start_dtime; private string end_dtime; private int host_uid; // This? private User host; // Or This? // constructor, getters, setters }
Если я выберу вариант только host_uid
в Meeting
классе, то в коде использование может быть:
Meeting mtg = new Meeting(23); // 23 is a meeting ID User husr = new User(mtg-gt;getHostUID() ); cout lt;lt; "Meeting " lt;lt; mtg-gt;getMName() lt;lt; " hosted by " lt;lt; husr-gt;getUName();
Если я использую встроенный класс, использование становится:
Meeting mtg = new Meeting(23); // 23 is a meeting ID cout lt;lt; "Meeting " lt;lt; mtg-gt;getMName() lt;lt; " hosted by " lt;lt; mtg-gt;getHost()-gt;getUName();
Второй кажется более аккуратным, более удобным, но более кодирующим и сложным в классе для построения отношений. Если бы мы также подумали о необходимости иметь множество User
для гостей.
Вопрос в том, должен ли родительский класс, представляющий родителя в реляционной модели, иметь эти отношения, встроенные в него (в виде массивов), или лучше упростить его и просто иметь идентификаторы для дочерних объектов.
При каких обстоятельствах один из подходов предпочтительнее другого?