2015-03-18 88 views
-1

我在Java编程新手,我正在修订有关OOP设计的问题,我发现了一个问题,谈论IS-AHAS-A关系。面向对象的编程设计?

我知道IS-A继承关系,拥有-A组成,但我无法弄清楚这个问题的目的。

我不需要一个答案,但我希望有人解释如何添加实例变量以显示Has-A关系,我知道我可以通过扩展词组表达IS-A关系。

的问题是:

添加扩展的短语和实例变量显示IS-A,其-A这些类之间的关系。

Class Address 
    { 

    } 

    Class Business 
    { 

    } 
    Class City 
    { 

    } 
    Class Restaurant 
    { 

    } 

    Class Theater 
    { 

    } 

[注:通过商业,我们的意思是任何会出现在黄页]。

+7

“问题”在哪里?你认为应该是一个可能的答案?让我们看看你最好的诚意尝试来解决这个问题(在你向我们展示之后)。 – 2015-03-18 22:38:27

+0

问题是添加扩展短语和实例变量以显示这些句柄之间的IS-a和Has-A关系 – nux 2015-03-18 22:39:50

+1

编辑您的问题,在上面的问题中显示实际问题,并再次显示您最好的诚意尝试回答它。否则,你在欺骗自己。 – 2015-03-18 22:40:55

回答

4

也许这将帮助你一点:

Class Address { 
    City city; // HAS-A 
} 

Class Business {} 

Class City { 
    List<Business> business; // HAS-A 
} 

Class Restaurant extends Business{ // IS-A 
    Address address; // HAS-A 
} 

Class Theater extends Business { // IS-A 
    Address address; // HAS-A 
} 
0

由于汽车有多个车轮,您将在汽车级别中创建车轮类的对象。

1

要做到这一点,最好的办法是为类“拥有”的东西设置一个实例字段。

例如,如果我要说汽车有一个引擎,它可能看起来像这样。

Class Car{ 
    private Engine e; 

    public Car(Engine anEngine){ 
    e = anEngine; 
    } 
} 
3

A “有” 的关系是使用实例变量的Java类典型代表。

  • 根据不同的关系(一到一比一到多,等等),你可以使用一个简单的类型,数组类型,一个标准的集合类型...或更多的东西的性质复杂。

  • 根据要求,可能存在一个反向关系的变量;即“组成部分”。

  • 根据需求的其他方面(远远超出对象模型),您可以提供getters & setter或使用不同风格的API。这些方法也可能负责保持最新的反向关系。


在你的背景下,“有,一个”企业与地址之间的关系是1对1的和(通常)不需要反向映射。如果城市对企业的关系是真正的“一对一”关系,那么它是一对多的关系。

这些事情取决于你如何塑造世界,以及你在做什么最终。但是对于考试题目,只要你在答案中注明他们,你就可以做出似是而非的简化假设(IMO)。

@ Radek的代码看起来不错,作为一个考试问题的答案,模他没有显示获取者和设置者。 (但正如我所说,这些方法都超出了模型的范围... 本身

+0

比你清除线索,好吧,现在我明白,它的困惑,因为我试图从许多资源来理解OO和Java – nux 2015-03-18 22:59:36

1

我将遵循@Radec答案:

class Business{} 
class Restaurant extends Business{ // IS-A 
    Address address; // HAS-A 
} 

Business res = new Restaurant(); 
if (res instanceof Restaurant){ 
    // Yes, res IS-A Restarant, but the reference is only a Business 
} 

IS-A是多态性的一部分。