Мне просто приходится задумываться о концепции ОО, которая может звучать довольно тривиально, но я не знаю, почему я нахожу ее довольно запутанной.
В любом случае, я думаю, например, есть ли у меня класс Animal и класс Location. И я позволяю только одному животному находиться в одном месте в любое время. Так что это похоже на отношения 1: 1. В то же время мне бы хотелось, чтобы классы Animal и Location не нуждались в какой-либо двунаправленной ссылке, чтобы они оставались слабосвязанными. Если сказать, у меня есть это:
class Animal {
private Location loc;
public Animal(int x, int y) {
loc = new Location(x,y);
}
public static newAnimal(Location[][] map, int x, int y) {
if(map[x][y] != null) {
return new Animal(x, y);
} else return null;
}
class Location extends Point {
public Location(int x, int y) {
super(x, y);
}
}
public static void main(String[] args) {
//populates a map
Location[][] map = new Location[10][10];
for(int x=0; x<10; x++) {
for(int y=0; y<10; y++) {
map[x][y] = new Location(x, y);
}
}
Animal dog = new Animal(2, 4); //dog is at location 2,4
Animal cat = new Animal(5, 6); //cat is at location 5,6
//But this does not restrict a constraint requirement that there should only be one animal at any one point
Animal horse = new Animal(2, 4); //now, horse is at the same location as dog but we only wanted one location to have one animal
Animal rabbit = Animal.newAnimal(map, 20, 50); //rabbit is null because it is out of the map size
}
Из этого я предвижу 2 проблемы.
Во-первых, поскольку мое местоположение не знает, находится ли уже животное на нем, многие животные могут указывать на одно и то же место в массиве карты. Это нарушило бы ограничение множественности 1-1, которое я хотел. В моем случае я позволил Животному владеть Местом. это может быть причиной, почему это могло произойти. Если, скажем, я позволю Месту владеть Животным, это можно решить. Но в случае, если я хочу знать, где находится мое Животное, мне нужно пройтись по всей карте, чтобы просто найти местоположение одного из моих Животных? В качестве альтернативы, я могу сохранить двунаправленную ссылку, но это приведет к сильной связи классов.
Вторая проблема, которую я чувствую, может быть проблемой - это дизайн в классе Animal. У меня есть статический метод newAnimal () для создания экземпляров новых животных. Я сделал это таким образом, потому что думал, что разрешение вызывающей стороне создавать новый экземпляр Animal непосредственно из конструктора может разрешить ввод координат вне диапазона. Но я все еще нахожу дизайн очень неловким.
Я использую коды Java в моем примере. И я думаю, что дизайн внутри объектов класса сам по себе и еще не связан с базой данных.
Любые предложения по улучшению двух вопросов, которые я поднял, могут быть великолепными.
Спасибо!