一个主观的问题,因此,如果有投诉我会维基,但我想知道人们所采取的是几乎可互换的用于继承的不同术语。
我们有“是-a”,“扩展”,“派生”,“子类”,只是“继承”
我们选择的词语有很多含义。您对“继承”的首选术语是什么?为什么?
引人注目!
答案 0 :(得分:4)
我经常使用“A子类B”(非常直接)或“A继承自B”(适度地更加圆周)。 “extends”在Java这样的关键字的语言中很好,但是出于某种原因,将它用于(例如)C ++或Python似乎有点延伸。 “IS-A”是继承必须遵守的关系约束(Liskov的原则)并且在实例(左侧)和类(右侧)之间保持 - 所以你可以说“x IS-A Foo”(当x是一个实例时) Foo或Foo的任何子类),但是“Bar IS-A Foo”(它们都是类)似乎是错误的,它会导致混淆语言,其中类也是(meta)类的实例,如Python。
答案 1 :(得分:3)
我喜欢说派生,因为它强烈暗示了类/子类关系,但在更具异国情调的情况下,如多重继承,接口实现和mixin,将会相当准确。
我有各种次要论点。一方面,“父母”和“孩子”强烈暗示可能与实际关系发生冲突的特定结构类比。另一方面,整个问题是重用代码和抽象本身。如果内存是免费的,我们每分钟输入一百万字,那么复制和粘贴代码仍然不是一个好主意,因为这会隐藏各种抽象之间的关系。 派生清楚地表明您正在做的是至少分享您开始时的抽象的一部分。
答案 2 :(得分:1)
我被教导要考虑如果你可以在“A是B”(鲸是哺乳动物)关系之间连接到A和B类,那么它们就会受到继承的束缚。
所以我更喜欢IS A
答案 3 :(得分:1)
不同语言中有不同的终端。
“是一个”适合动态语言,并提升perl / php / python和javascript对象的嵌合特性。 Lassie是一只狗,是一种哺乳动物,是一种宠物,是一部电影明星,也是米高梅的资产。
“extends”适合Java的本质的声明性,严格类型(以及它缺乏多重继承!)。 “Lassie延伸狗”,Lassie可以走路和吠叫但是当她在Java中实施时不能出演或演出!
答案 4 :(得分:1)
有两种方法可以考虑继承:
is-a:多态性是指接口是由基类定义的,但实现可以由继承的类提供。
public class Polygon
{
public abstract int Points();
};
public class Triangle : Polygon
{
public override int Points() { return 3; }
}
void Foo( Polygon p )
{
int points = p.Points();
}
main()
{
Foo( new Triangle() );
}
extends - 一种捕获共享实现的方法。
public class iTouch
{
// cool pda features
}
public class iPhone : private iTouch
{
// phone features
// cool pda features comes from the base class
}
答案 5 :(得分:1)
以下是我更喜欢的术语:
这是我不喜欢的术语:
答案 6 :(得分:1)
首选术语通常在很大程度上取决于语言,但我发现大多数OO开发人员无论条款如何都相互理解。 (话虽如此,我绝对同意,选择词对于最大限度地提高沟通效率非常重要。)
我首选的术语是类的“子类”或“扩展”,以及接口的“实现”。 (在Objective-C中,一个“采用”或“符合”协议,这是Java接口的灵感。)通常,我使用“父”和“子”来描述关系本身。
我发现“is a”在与“has a”(组合)形成对比时效果最好,但它对所有形式的继承都没有意义 - 有时,缩小特异性是有道理的,但并非总是如此。同样,有些时候“派生”似乎并不正确 - 很多人会把它理解为专业化,但不是每个人都会理解。 (例如,人们可以得出一个证明,通过反应得出化学物质等。检查单词上的词典条目,看看各种可能的含义,其中许多与一组步骤有关,听起来更像一个算法而不是继承。)另一方面,我发现许多学者都喜欢“基类”和“派生类”,但在工业界可能并不常见。
答案 7 :(得分:1)
我在这里说简单是件好事。当引用子类(A)时,我全都是为了“A Is a B”,它显然是父类(B)的实例(A Dog是哺乳动物等)。如果关系不那么简单,我宁愿简单地说“A是B的子类”。
班级构成显然使“A Is a B”的概念变得困难,因此很明显“A有B”或“A拥有B”的时间更容易理解。
为了简单起见,我更喜欢说一个类符合协议,或者实现一个接口(虽然我不用java编程)。
就我而言,关键是简单易用。如果您自己正在开展项目,并且永远不必与其他人讨论您的设计或代码,请随意调用它。如果你正在一个团队工作,建立最简单的沟通标准可以省去很多令人头痛的问题,试图解读每个人对OOP模式的不同俚语。
答案 8 :(得分:1)
我喜欢踢老派并说“A暗示B”或“A小于B”。这些并不像其他术语那样含糊不清,即它们具有精确的含义。
脚注:我有时会说“比”更好,“更糟”,分别表示超类型和子类型关系。当不清楚所讨论的对象是类型时,我这样做是为了消除这种关系的歧义。我从Edward Kmett那里继承了这个习惯。