Java 这些实体的层次结构
我需要为以下实体定义面向对象的类层次结构:计算机、处理器、赛扬处理器、Athlon处理器、HP、Dell、鼠标、键盘 我想到了以下几点:Java 这些实体的层次结构,java,oop,Java,Oop,我需要为以下实体定义面向对象的类层次结构:计算机、处理器、赛扬处理器、Athlon处理器、HP、Dell、鼠标、键盘 我想到了以下几点: public interface Computer { public void mouse(); public void keyboard(); } public class Processor { public void Celeron(){ } public void Athlon(){ } } public class 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
{
}
有人能指出这个设计有什么问题吗?还有,如果有人能提出更好的设计,那就太好了
谢谢。您正在实现鼠标和键盘,以及celeron和athlon作为方法。他们应该分开上课。计算机也应该是一个类,而不是一个接口
我不明白你为什么希望“HP”扩展处理器并实现计算机。我更愿意说,
计算机有一个处理器
HP
是一台计算机
<代码>戴尔
是一台计算机
Celeron
是一款处理器
Athlon
是一种处理器
而计算机
有一个鼠标
和一个键盘
有:关联。
是一种:继承 我认为下面这样做可能会有帮助:
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
{
}
不管编程语言如何,请停止并考虑如何建立一个信息模型来表示所讨论的问题。你有几种关系可供支配:
- is-a
某些事物或概念是对某些其他概念的细化或可互换,例如“赛扬处理器”是处理器。继承可以对这种关系建模,但并非所有继承都要对这种关系建模
- 有一个
某些事物包含或与其他事物相关,例如连接有键盘的计算机。结构中的成员变量或字段可以通过值包含(包括控制所包含对象的生命周期)或引用聚合(通常不控制关联对象的生命周期)对这种关系进行建模
- 使用
比has-a更一般的是,一件事需要引用其他的东西来完成它的工作。这可以表示为成员函数或方法的必需参数
对于您的问题,我们可以看到Celeron是一个处理器,计算机有一个处理器(一个或多个),HP是一家销售计算机的公司,或者,计算机有一个负责任的供应商(一个或多个),HP是一个供应商。惠普也可以出售鼠标,一台计算机可以连接零个或多个鼠标
我不愿意告诉您如何使用Java构建这样的模型。有很多解决方案,探索不止一个解决方案还可以深入了解为什么信息建模比Java的类和接口功能更具表现力。听起来像是家庭作业。在我们为您做家庭作业之前,您能否先写一个简短的总结,说明您为什么会提出这样的设计?目前看来,您只是在编译时添加了一些内容:-P使用和键盘对于所有计算机都是通用的,因此每个品牌都可以自由定义其实现。一个品牌还可以覆盖它想要的处理器,并可以定义它自己的实现。那么HP或Dell将是计算机类的对象,还是将是另一个扩展计算机、赛扬、Athlon、鼠标、,键盘?我不知道所有的东西都是如何联系起来的。谢谢,在弗林希的回答上展开一点是非常有洞察力的,你们基本上只有两个关系:is-a和has-a。is-a应该给你一个像Keyboard
本身的接口,而has-a应该给你一个像haskiboard{public Keyboard getKeyboard();}
的接口。层次结构中较高的接口将扩展较低的接口。例如,计算机键盘
。虽然这似乎是一个练习,但您不必对接口如此冗长,您应该创建尽可能多的接口以供练习。