Один вопрос, который возникает у меня, заключается в том, действительно ли логика является логикой отчета или логикой ученика.В отчете вы можете указать:
thing = (student.getX() + student.getY() ) * student.getZ();
или просто
thing = student.getThing();
Я предполагаю, что, вероятно, некоторые вещи принадлежат учащемуся.что мы не можем вычислить вещь , потому что некоторые из X, Y или Z неправильно инициализированы.Поэтому вызов getThing () может вызвать исключение, но это кажется странным.Почему объект должен предлагать некоторую возможность getThing (), но не может это сделать?
Мне кажется, что ваш класс Student нуждается в рефакторинге.Студенты могут использовать основной набор возможностей, и их достаточно, чтобы можно было составлять определенные отчеты.Следовательно, у вас есть, скажем, IRegistered интерфейс и более богатый интерфейс IActiveStudent.Вашему классу отчетов требуется IRegistered, а другим классам нужен IActiveStudent.
Различные объекты Student изменяют свои возможности в течение своей жизни, подобно тому, как Caterpiller превращается в мотылька.У вас нет метода fly () для гусеницы, и, следовательно, вам не нужен метод canYouFlyYet () для всех ваших классов чешуекрылых.