我只是想了解一個面向對象的概念,這聽起來很瑣碎,但我不知道爲什麼我覺得它很混亂。對象關係設計
無論如何,我想,例如,如果我有一個動物類和位置類。我只允許一隻動物隨時在一個地方。所以它就像是一對一的關係。同時,我希望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代碼。我認爲類內的設計本身並不涉及數據庫。
改善我提出的兩個問題的任何建議都可能很好。 謝謝!
一棵樹不包含猴子,而猴子也知道他在哪一棵樹,甚至可能如何計算猴子時尚之後剩下多少香蕉? – Affe 2011-06-03 06:57:41
@Affe,感謝您添加評論。我仍然有點困惑。你能再詳細一點嗎?謝謝! – Carven 2011-06-03 07:14:19
這是我的方式來說,如果您的業務/應用程序域包含兩個共享狀態的事物,它們在定義上是耦合的。如果試圖模仿他們,那麼跳過籃球有什麼好處呢? – Affe 2011-06-03 07:19:11