这些实体的层次结构

时间:2010-11-21 18:21:14

标签: java oop

我需要为以下实体定义面向对象的类层次结构:计算机,处理器,赛扬处理器,Athlon处理器,HP,戴尔,鼠标,键盘。

我想出了如下内容:

public interface Computer
{
    public void mouse();
    public void keyboard();
}
public class Processor
{
   public void Celeron(){ }
   public void Athlon(){ }
}
public class HP extends Processor,implements Computer
{
}

有人可以指出这个设计有什么问题吗?另外,如果有人能提出更好的设计,那就太棒了。

感谢。

4 个答案:

答案 0 :(得分:5)

我宁愿说,Computer 有一个 Processor
HP Computer; Dell Computer Celeron Processor; Athlon Processor Computer 有一个 Mouse以及一个Keyboard
有一个:协会 :继承。

答案 1 :(得分:2)

我认为以下内容可能会这样:

public interface IInputDevice {}
public interface IProcessor {}

public abstract class Computer 
{
    IInputDevice[] inputDevices;
    IProcessor processor;
}

public class Mouse implements IInputDevice {}
public class KeyBoard implements IInputDevice {}

public class AthlonProcessor implements IProcessor {}
public class CeleronProcessor implements IProcessor {}

public abstract class HP extends Computer
{

}

public abstract class Dell extends Computer
{

}

答案 2 :(得分:1)

无论编程语言如何,请停止并考虑如何构建信息模型来表示相关内容。您可以使用几种关系:

  • 是-A

    某些事物或概念是对某些其他概念的改进或可互换,例如作为处理器的“赛扬处理器”。继承可以对此关系建模,但并非所有继承都是为了建立这种关系。

  • 具有-A

    某种东西包含或与其他东西相关联,例如连接有键盘的计算机。结构中的成员变量或字段可以建模这种关系,包括按值包含(包括控制所包含事物的生命周期)或按引用聚合(通常不控制相关事物的生命周期。)

  • 使用

    has-a 更通用,有一件事需要引用其他东西来完成它的工作。这可以表示为成员函数或方法的必需参数。

对于您的问题,我们可以看到Celeron 处理器,计算机具有处理器(一个或多个),HP 出售计算机的公司,或者,计算机负责供应商(一个或多个)而HP 供应商。惠普也可以销售鼠标,计算机可以连接零个或多个鼠标。

我不愿意告诉你如何使用Java来构建这样的模型。有许多解决方案,并且探索多个解决方案还可以深入了解为什么the relational model比Java的类和接口工具更能表达信息建模。

答案 3 :(得分:0)

您正在实施鼠标和键盘以及赛扬和Athlon作为方法。它们应该是分开的类。计算机也应该是一个类而不是接口。

我不明白你为什么要“HP”扩展处理器并实现计算机。