为什么类隐式只派生自Object Class?

时间:2012-08-07 06:08:19

标签: object language-agnostic programming-languages

我没有任何争论反对为什么我们只需要一个通用类。但是为什么我们没有两个通用类,比如一个Object和一个AntiObject类。 在自然界和科学中,我们发现了二元性的概念 - 如能量和能量。暗能量;男性和女性女; Plus&减去;乘以&划分;电子与电子质子;整合&推导;在集合论中。有很多二元论的例子,它本身就是一种哲学。在编程本身,我们看到反模式可以帮助我们执行工作,与我们使用设计模式的方式形成对比。 我们称之为面向对象的编程。这是一个限制因素还是我在理解编程语言的形成时缺少一些基本的东西?

编辑: 我不确定,但这种二元性概念的用处可能在于创建垃圾收集器,这些垃圾收集器创建与自由或松散对象相结合的AntiObjects来破坏自身,从而释放内存。或者可能是AntiObjects与Objects一起工作以创建一个自我修改的编程语言 - 这允许我们创建一个安全的自修改代码,使用遗传编程进行进化计算,隐藏代码以防止逆向工程。 我已将此问题移至Stack Exchange的计算机科学网站,因为这被认为是偏离主题的。如果您想评论/回答这个问题,请使用它。

2 个答案:

答案 0 :(得分:4)

继承树通常(就像它在C#中一样)是一棵树,只有一个根,出于多种原因,所有这些似乎都会导致一个大的:

  • 如果有多个根,就没有办法指定“任何类型的对象”(除了像C ++的void *这样的东西,因为它抛弃了任何“类型”的概念,这将是可怕的)。
  • 即使是“任何类型的对象”的想法也会失去一些用处,因为您无法保证任何关于您将接受的对象。 How do you say“所有对象都有属性 a,b, c ”这样的方式让程序实际使用它们?你需要一个所有人都实现的接口......然后,该接口成为根类型
  • 如果GC'able语言无法收集他们管理的每种类型的对象,那么这些语言将毫无用处。 糟糕,再次出现“任何类型的对象”!

全能,将一种类型作为层次结构的根目录更为简单。它允许您创建适用于系统中每个对象的契约/保证/等,并且对希望能够以通用方式处理对象的代码提出更少的要求。

C ++因多个根类型而失败,因为(1)C ++允许多重继承,因此对象可以弥合继承树之间的差距; (2)它有模板(远远超过比泛型更能使用任何类型的对象); (3)它可以通过诸如void *之类的方式完全抛弃和回避任何“类型”的概念; (4)它不提供为您管理和收集您的物品。

C#不希望多重继承和模板的所有复杂性,并且它想要垃圾收集。

答案 1 :(得分:2)

在自然界中,如果在一个家庭中有两个孩子完全不同并且彼此相反,他们仍然有共同的父母。

您提供的所有这些示例都属于同一类别。对于例如男性和女性属于Homosapiens类别。 Plus和Minus属于运营商类别。

在OOPS中也有两种类型。引用类型和值类型,但它们都属于对象。

你的建议也很好。但是让我们在宇宙中暂时接受你的建议。仍然会有一个包含Object和AntiObject类的Super_Class。所以它必须停在某个地方,并且在OOPS中object是停止的那个类。