2014-11-03 117 views
1

我目前正在參加一個OOP班,這裏是我的問題:面向對象的數據庫難題?

假設數據庫的自行車出租:班'自行車'=>子班'借來的自行車'和'返回的自行車'。借來的自行車有附加字段「到期日」,回到自行車領域的「位置」

的任務是擴展這個數據庫來處理各種事情,你可以從租賃貸款。但是,實施需要儘可能以面向對象爲導向。我一直在翻閱我的Java的書,但我一直沒能找到一個聰明的解決方案。因此,如何添加每個項目(自行車,滾軸溜冰鞋......)與相關附加字段「借用」或「返回」的功能,而無需爲每種類型的項目分別設置不同的子類?

(我建議我的老師,每一個「項目」的狀態是「借」或「返回」,但有人告訴我,這是不是面向對象的足夠)

所有幫助表示讚賞!

+0

給所有「項目」(自行車,旱冰鞋等)類與外地借來同父類/返回。 – 2014-11-03 16:39:20

+0

謝謝大家的回覆!我相信所有這些方法都可以在實踐中發揮作用。仍然我不確定什麼是實現這個最面向對象的方式?我最初的建議是將字段'isBorrowed'(或類似的東西)添加到'Item'類,但我被告知這不是一個面向對象的方法。使用一個接口是不經意的OO,但在這種情況下,我仍然需要在類「Item」中具有'due'和'location'字段,這是不理想的。我很困惑。 – Kuririn 2014-11-04 11:40:08

回答

0

創建一個getStatus()方法的接口,使所有條目類實現它。

0

創建借的人,回到那些2個接口。

public interface returnedItem(){ 
    public String getLocation(); 
    public void setLocation(String s); 
} 

public interface borrowedItem(){ 
    public Date getDue(); 
    public void setDue(Date date); 
} 
+0

如果我使用這種方法,我需要在類'item'中包含字段'due'和'location',對吧?這是我原來的建議,我的老師已經改變了。 – Kuririn 2014-11-04 11:43:27

0

讓所有對象(自行車,溜冰鞋等)借用或返回的一種簡單方法是製作一個超級班。

例:

public class Borrowable { 
    private boolean borrowed = false; 

    public borrow() { 
     borrowed = true; 
    } 

    public return() { 
     borrowed = false; 
    } 

    public isBorrowed() { 
     return borrowed; 
    } 

} 

如果擴展該類自行車,那麼你可以調用borrowable方法,而無需重新編寫代碼。

+0

我也提出了這種方法,但顯然它不夠OO? – Kuririn 2014-11-04 11:46:34

+0

太糟糕了,我不能跟你的老師說話。這是OOP的全部內容。 – kmac 2014-11-04 21:16:53

0

使用interface

interface Item{ 
    boolean isBorrowed(); 
} 

通過實施interface然後讓abstract類的所有不同的項目。

abstract class Bike implements Item{ 
    //code 
} 

abstract class RollerSkates implements Item{ 
    //code 
} 

//etc. 

現在extend這些abstract類:

public class BorrowedBike extends Bike{ 
    //code 
    //add additional field 'due date' 
    boolean isBorrowed(){ 
     return true; 
    } 
} 

public class ReturnedBike extends Bike{ 
    //code 
    //add additional field 'location' 
    boolean isBorrowed(){ 
     return false; 
    } 
} 
+0

這是一個非常明確的方式來實現這一點,但不幸的是,其目的是爲了避免每個類型的項目都有子類。我仍然感到困惑。 – Kuririn 2014-11-04 11:48:40

+0

@Kuririn你可以發佈你寫的代碼和老師的確切回覆嗎?這是一個相對體面的面向對象的方法,但你的老師可能有其他想法(也許是泛型,枚舉,字符串等)。也可能你的老師沒有向你解釋他/她想要什麼。 – 2014-11-04 14:36:04

0

你可以做的就是創建一個類類型的每個項目, 創建項目類,這是一個通用類,並從它繼承2分 - 班借項,並返回一個

class Bike 
... 
class Skates 
... 
class Roller 

class Item<T> 
... 
class BorrowedItem<T> extends Item<T> 
... 
class ReturnedItem<T> extends Item<T> 
0

而不是使borrowed bike和的0對於自行車分類 你可以按照一種方法做出一個類 item與變量nameOfItemtype它可以是自行車,滾柱或任何其他。 它會舉行一個實例

Name   status 
bike   returned 
roller stakes borrowed