Как лучше решить эту ООП задачу? Есть классы: University и Professor. University содержит множество экземпляров Professor. У Professor должен быть метод getUniversity, возвращающий University. Как можно правильно по ООП решить эту задачу? При этом, Professor не должен хранить в себе ссылку на экземпляр университета, ведь это агрегация, и профессор может существовать в отсутствие университета, поэтому ссылка на университет может быть всегда пустой. Более того, нарушается принцип SOLID (OCP): если в будущем мы захотим добавить College и профессор должен будет работать сразу в двух учебных заведениях.
Для решения этой задачи можно использовать принцип инверсии зависимостей (Dependency Inversion Principle). Для этого можно создать интерфейс, который будет представлять учебное заведение (например, интерфейс Institution), а затем классы University и College будут реализовывать этот интерфейс. Professor будет иметь метод getInstitution(), который будет возвращать объект, реализующий интерфейс Institution.
Пример решения задачи:
public interface Institution { // методы учебного заведения } public class University implements Institution { // реализация методов университета } public class College implements Institution { // реализация методов колледжа } public class Professor { private Institution institution; public Professor(Institution institution) { this.institution = institution; } public Institution getInstitution() { return institution; } }
Таким образом, используя интерфейс Institution, мы можем легко добавить другие учебные заведения в будущем без изменения класса Professor. Кроме того, Professor не хранит ссылку на конкретное учебное заведение, что позволяет ему работать с разными типами учебных заведений.
Для решения этой задачи можно использовать принцип инверсии зависимостей (Dependency Inversion Principle). Для этого можно создать интерфейс, который будет представлять учебное заведение (например, интерфейс Institution), а затем классы University и College будут реализовывать этот интерфейс. Professor будет иметь метод getInstitution(), который будет возвращать объект, реализующий интерфейс Institution.
Пример решения задачи:
public interface Institution {// методы учебного заведения
}
public class University implements Institution {
// реализация методов университета
}
public class College implements Institution {
// реализация методов колледжа
}
public class Professor {
private Institution institution;
public Professor(Institution institution) {
this.institution = institution;
}
public Institution getInstitution() {
return institution;
}
}
Таким образом, используя интерфейс Institution, мы можем легко добавить другие учебные заведения в будущем без изменения класса Professor. Кроме того, Professor не хранит ссылку на конкретное учебное заведение, что позволяет ему работать с разными типами учебных заведений.