我需要为以下实体定义面向对象的类层次结构:计算机,处理器,赛扬处理器,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
{
}
有人可以指出这个设计有什么问题吗?另外,如果有人能提出更好的设计,那就太棒了。
感谢。
答案 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”扩展处理器并实现计算机。