私はたまたまOOの概念について考えていますが、それは非常に些細なことのように聞こえるかもしれませんが、なぜそれが非常に混乱しているのかわかりません。
とにかく、たとえば、AnimalクラスとLocationクラスがあるかどうかを考えています。そして、私はいつでも1匹の動物だけが1つの場所にいることを許可します。つまり、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の多重度制約に違反します。私の場合、私は動物に場所を所有させました。これが、これが発生する理由である可能性があります。場所に動物を所有させると言うと、これは解決できます。しかし、私の動物がどこにいるかを知りたい場合は、私の動物の場所の1つがどこにあるかを見つけるために、マップ全体をループする必要がありますか?または、双方向の参照を保持することもできますが、これによりクラスが高度に結合されます。
私が問題になる可能性があると感じる2番目の問題は、Animalクラスのデザインです。新しい動物をインスタンス化するための静的なnewAnimal()メソッドがあります。呼び出し元がコンストラクターから直接新しいAnimalインスタンスを作成できるようにすると、範囲外の座標入力が可能になると考えたため、このようにしました。しかし、私はまだデザインが非常に厄介だと感じています。
私の例ではJavaコードを使用しています。そして、私はクラスオブジェクト自体の設計を考えており、データベースはまだ含まれていません。
私が提起した2つの問題を改善するための提案は素晴らしいかもしれません。ありがとう!