Oop 是否存在以类为对象的静态语言?

Oop 是否存在以类为对象的静态语言?,oop,programming-languages,type-systems,Oop,Programming Languages,Type Systems,有很多动态类型的面向对象语言,其中类本身就是对象。例如Smalltalk和Python。有没有静态类型的语言,其中类是一个对象 编辑: 术语“对象”是指一级实体。例如,Python中的类可以传递给其他方法,也可以从方法等返回。在早期绑定语言中,这样做的好处会减少。然而,类的Java反射对象基本上就是您想要的 顺便问一下,你为什么想要这个?这不仅仅是无聊的好奇吗?好吧,在早期的绑定语言中,这样做的好处会减少。然而,类的Java反射对象基本上就是您想要的 顺便问一下,你为什么想要这个?这不仅仅是无聊

有很多动态类型的面向对象语言,其中类本身就是对象。例如Smalltalk和Python。有没有静态类型的语言,其中类是一个对象

编辑:

术语“对象”是指一级实体。例如,Python中的类可以传递给其他方法,也可以从方法等返回。

在早期绑定语言中,这样做的好处会减少。然而,类的Java反射对象基本上就是您想要的


顺便问一下,你为什么想要这个?这不仅仅是无聊的好奇吗?

好吧,在早期的绑定语言中,这样做的好处会减少。然而,类的Java反射对象基本上就是您想要的


顺便问一下,你为什么想要这个?这不仅仅是无聊的好奇吗?

在许多静态类型语言中,比如JAVA类是一个对象,有自己的方法。 例如,在Java中,表示“String”类的对象可以作为“String.class”访问,然后您可以作为“String.class.getFields()”、“getMethods()”、getConstructor()、“cast(obj)”等调用该类上的方法。您可以在中看到“class”类的所有方法

然而,由于该语言是静态类型的,因此不能动态修改类

换句话说,您不会在类中找到名为“class.addField()”的方法。您可以做的更多是通过继承“扩展”类(如果它不是final)

换句话说,a“Class”对象是只读的

术语“对象”是指第一类实体。例如,Python中的类可以传递给其他方法,也可以从方法返回

与任何其他对象一样,您可以将它们传递给方法并从方法返回它们(它们只是常规对象,但只公开“读取”方法)


在许多静态类型语言中,比如JAVA类是一个对象,它有自己的方法。 例如,在Java中,表示“String”类的对象可以作为“String.class”访问,然后您可以作为“String.class.getFields()”、“getMethods()”、getConstructor()、“cast(obj)”等调用该类上的方法。您可以在中看到“class”类的所有方法

然而,由于该语言是静态类型的,因此不能动态修改类

换句话说,您不会在类中找到名为“class.addField()”的方法。您可以做的更多的事情是通过继承“扩展”类(如果它不是最终的)

换句话说,a“Class”对象是只读的

术语“对象”是指一级实体。例如,Python中的类可以传递给其他方法,也可以从方法返回

与任何其他对象一样,您可以将它们传递给方法并从方法返回它们(它们只是常规对象,但只公开“读取”方法)。示例(为了清晰起见,我省略了泛型):


让我们来看看这个概念,它指的是一种语言能够指代其自身结构的现存概念。另请看Eric Lippert的帖子。

请看一看其中的概念,它指的是一种语言可以引用其自身结构的现存概念。另请看Eric Lippert的帖子。

我不完全同意@edutesoy的回答

意味着隐式构造被具体化为可以像任何对象一样传递的显式构造。Java中的类不是“第一类”,它们是镜像,您可以在其中检查某些属性,但不是对象本身

您不能在运行时更改类的结构是可以的,例如添加字段、更改方法体或签名,并且在这个透视图下它部分是“只读”的也可以

但是让我们考虑静态字段。我想大家都同意,除非

final
静态字段是可变的,就像实例字段一样。在Smalltalk中,这些字段只是在类本身上定义的字段,而不是在类的实例上定义的字段。此外,在Smalltalk中,类端方法与任何其他方法一样是多态的,并且:

aClass field: aValue. 
可能会根据传递的类进行不同的解析。这在Java中是不可能的;静态字段或方法必须通过其类型引用。这也意味着,如果他们真的是头等舱的话,情况就不一样了(阅读链接了解更多细节)

在Java中可以进行反射的事实并不能使类成为“第一类”——您只能传递类的表示。回到最初的问题:我不知道有哪种静态类型的语言具有一流的类(但我的知识有限,可能存在一种)

编辑


事实上,现在我记得它存在StrongTalk(),这是一种带有静态类型的Smalltalk。本文讨论了打字问题:

我不完全同意@edutesoy的回答

意味着隐式构造被具体化为可以像任何对象一样传递的显式构造。Java中的类不是“第一类”,它们是镜像,您可以在其中检查某些属性,但不是对象本身

您不能在运行时更改类的结构是可以的,例如添加字段、更改方法体或签名,并且在这个透视图下它部分是“只读”的也可以

但是让我们考虑静态字段。我想大家都同意,除非

final
静态字段是可变的,就像实例字段一样。在Smalltalk中,这些只是在类本身上定义的字段,r
aClass field: aValue.