2014-11-03 79 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