Oop 面向对象语言中的HAS-A,IS-A术语

Oop 面向对象语言中的HAS-A,IS-A术语,oop,Oop,我刚刚读完这本书,书中有“HAS-A”和“IS-A”两个词。有人知道他们的具体意思吗?尝试在书中搜索,但书有600页长。表示所讨论的类“有”类型的字段 表示该类从超类扩展或实现接口。在这种情况下,如果针对一个类别进行测试,的实例将返回true。aCarhas-aWheel 麻雀是一种鸟 学术上,这些术语用于决定组合和继承。这不是java特有的,而是面向对象的 IS-A意味着你可以拥有一个“是”的类。就像一个学生是一个人。这用于描述一个对象是另一个对象的子类 有时两个类之间没有IS-a关系,但“H

我刚刚读完这本书,书中有“HAS-A”和“IS-A”两个词。有人知道他们的具体意思吗?尝试在书中搜索,但书有600页长。

表示所讨论的类“有”类型的字段


表示该类从超类扩展或实现接口。在这种情况下,如果针对一个类别进行测试,
实例将返回
true

a
Car
has-a
Wheel

麻雀是一种鸟


学术上,这些术语用于决定组合和继承。

这不是java特有的,而是面向对象的

IS-A意味着你可以拥有一个“是”的类。就像一个学生是一个人。这用于描述一个对象是另一个对象的子类

有时两个类之间没有IS-a关系,但“HAS-a”更合适。例如,一把椅子有一条腿。或者几个。这称为聚合,与继承相反


<>我不想讨论何时使用每一个的细节,因为这取决于如何使用类,即使已知的还有很多要考虑的,一个新的问题对于一个特定的情况更合适。p> 是一种=特殊类型的车辆,例如汽车是一种特殊类型的车辆


Has a=它在物理上有一些东西,例如汽车有一个引擎。

这是面向对象编程和UML术语,而不是特定于Java的。实际上,有三种情况需要注意:

  • 房子是一座建筑物(遗产)
  • 房子有一个房间(构成)
  • 房子有一个居住者(聚集)

  • (2)和(3)之间的区别是微妙的,但需要区分。它们共同构成了各种形式的联系。有什么区别?合成意味着子对象不能脱离父对象的上下文生存(摧毁房屋和房间消失),而聚合意味着子对象可以独立存在(摧毁房屋和居住者去别处)。

    正如克莱特斯指出的,is-a是不同的。但是要小心has-a。这可能意味着组合(终身责任)、聚合(某事物的一部分)或简单地使用-a(有一个引用,知道如何构建一个或找到一个)。后者只是一种关联。

    is-A、HAS-A等都不是很好的对象。相反,它是OO

    鲍勃叔叔对IS-A at的历史有了一些了解

    Robert C.Martin:“ISA”这个词悄悄地进入了我们的词汇表,顺便说一句,这是一个单词ISA,它通过一个迂回的途径悄悄地进入了我们的词汇表,在面向对象的领域变得非常重要,但它并不是这样开始的。它在80年代通过人工智能人群爬行,他们创造了这些奇妙的知识网络,你可能还记得,80年代末90年代初所有关于人工智能的炒作,然后创造了这些结构,这些结构将行走知识网络这些推理机,实体和知识网络之间的关系,就像,就像,尝起来像,闻起来像ISA,所有这些-关系是,像,有,当人工智能人群失去了资金,所有这些资金驱动,他们看了看,说,“哦,还有其他东西,有点酷。听着,这些关系就像过去和现在一样,非常相似,我们应该搬进去。他们确实这样做了,词汇也随之转变。这很有趣,也有点不幸,因为继承不是ISA。继承,如果你用一种非常疲惫的眼光看待它,继承是子范围中方法和变量的声明,它与ISA无关,ISA的概念可能非常混乱。举个简单的例子,整数是实数,实数是复数。你可以在你的UML中画出它,它非常简单,所有的继承都在那里,等等,但是考虑尝试编译它。我们希望一个整数是16位或64位,但如果它是从实数派生出来的,一个实数中有两个整数,一个尾数和一个特征,指数和它们使用的,它们在它们里面暗示了二进制点来生成这些浮点数。浮点数,实数,源于复数,但复数中有两个实数,虚部和实部。如果你想用C++或java写的话,你会编写一个结构,因为它有无限的思想,所以不能编译。在英语中完全有意义在软件中毫无意义

    是一个”:在相关对象之间建立关系。您可以使用继承来建立关系

    “具有”:定义可能不相关对象的功能。您可以使用接口定义功能

    例如:

    狗是一种动物。它有学习的能力


    人不是动物。他有学习、思考、攀登和应用的能力。

    如果你开发一个名为“学校”的收集课程。学校里会有“老师”和“学生”。您开发了一个“person”类,“student”和“teacher”都将继承“person”类,因为它们都是--“is”person。学生和老师都有生日。您将创建一个“日期类”,因为教师和学生在“Person类”中都“有”或“有”生日。这是“集装箱船” 总之,“是一个人”使用继承
    “has a”使用集装箱船,其名称几乎暗示了所有

    可以将IS-A类视为对继承其所有属性的另一个类的实例的专门引用

    如果存在名为车辆的类。然后,任何类型的车辆都可以继承这个超级类的属性。法罗群岛