设计与对象:理解“有一个(Has-a)”与“是一个(Is-a)”关系我将讨论对象之间的不同关系类型,包括程序员在构建面向对象程序时常常陷入的陷阱。在思考过程式编程或面向对象编程时,最重要的一点是要记住它们只…
所以IsA关系是关于行为的。 HasA关系,也称为对象组合。实际上,HasA关系有两种。 第一种,静态HasA关系。这在UML中叫做组合(composition),比如“汽车has-a引擎”。 此种关系很像聚集,除了‘部分’的生命周期由‘整体’控制。 这种控制可能是直接的或者传递的。即‘整体’可能对创建或者销毁‘部分’具有直接的职责,或...
is a是典型的“一般到特殊”的关系,也就是典型的继承关系。例如Apple is a Fruit。那么Apple是一种特殊的Fruit,也就是说Apple继承了Fruit。 has a是典型的“组合”关系。比如Wolf has a Leg,也就是Leg组合成了Wolf。 需要指出的是:由于继承会造成了对父类的破坏,因此有时候可以通过组合来代替的继承。使用继承...
“is a”关系是指面向对象中的继承, “has a”关系是指面向对象中的包含。 这两种关系都允许你在你的新的类里面放置一个子对象。代码重用的两个重要技术是类继承和对象组装。 继承是一个单向的关系,例如 房子是建筑,但是建筑不是房子。 包含:例如房子有浴室但是浴室没有房子。 【请描述一下”is a”...
has a是如果A中有B,那么,B就是A的组成部分 如果你确定两件对象之间是is-a的关系,那么此时你应该使用继承;比如菱形、圆形和方形都是形状的一种,那么他们都应该从形状类继承而不是聚合。 如果你确定两件对象之间是has-a的关系,那么此时你应该使用聚合;比如电脑是由显示器、CPU、硬盘等组成的,那么你应该把显示器...
Java中is-a和has-a的区别 1.“is-a”是继承的关系,比如人是动物,人和动物是继承的关系;2.“has-a”是聚合的关系,比如人有眼睛,人和眼睛是聚合的关系;3.如果一个类继承自另一个类,那么它们是“is-a”的关系,如果一个类的成员中引用了另一个类,那么它们是“has-a”的关系。is_a ...
is_a原则和has_a原则,一、is-A继承关系:“表示类与类之间的继承关系、接口与接口之间的继承的关系以及类对接口实现的关系”。has-A合成关系:“是关联关系的一种,是整体和部分(通常为一个私有的变量)之间的关系,并且代表的整体对象负责构建和销毁代表部分对象,代表部
is-a( 是 "a" ⼩明是⼈类)表⽰的是属于得关系。⽐如兔⼦属于⼀种动物(继承关系)。has-a( 有 "a" 汽车有轮胎) 表⽰组合,包含关系。⽐如兔⼦包含有腿,头等组件;就不能说兔⼦腿是属于⼀种兔⼦(不能说是继承关系)7.1.2 "is a"关系和"has a"关系 假设有两个类:...
is a”代表的是类之间的继承关系,“has a”代表的是对象和它的成员的从属关系。c++还有另一种实现has-a关系的途径---私有继承。使用私有继承,基类的公有成员和保护成员都将成为派生类的私有成员。这意味着基类方法将不会成为派生对象公有接口的一部分,但可以在派生类的成员函数中使用它们。使用公有继承,基类的...
在这里强调继承的语义很重要。除了重用Person类的实现之外,我们在基类型Person和子类型Waitress和Actress之间创建了一个明确定义的“is-a”关系。女服务员和女演员实际上是人。 这可能会让我们问:在哪些用例中继承正确的方法? 如果子类型满足“is-a”条件并且主要在类层次结构中提供附加功能, 则继承是可行的方法。