我想不出SO兄弟姐妹之间有更好的位置提出这样的问题。最初,我想问“ python是纯OO语言吗?” 但是在尝试定义术语时,考虑到麻烦和人们的不适感,我决定从为术语本身获得明确的定义开始。
从创造该术语的Alan Kay博士的来信开始,这是相当公平的(请注意在生物学上类似于细胞或其他生物的灵感)。
有以下几种方法可以完成任务:
- 通过列出可以表现出(或不能表现出)某些独特且足以定义该术语的属性的编程语言来进行比较分析(尽管Smalltalk,Scala,
Java等)是可能的示例,但IMO这种方式似乎并没有真正完成也不富有成果) - 给出一个正式的定义(或接近它,例如以学术或数学的风格)。
- 给出一个完全依赖于具体语言的语义上下文或先验编程经验的哲学定义(社区一定有一定的成功解释的机会)。
我当前的版本:“如果某种编程(形式化)语言可以(在语法上)区分操作数和操作数,并推断每个操作数的类型是否是对象(就OOP而言),那么我们称之为只要该语言中至少有一种类型是对象,那么这种语言就是一种面向对象的语言。最后,如果所有类型的语言都是对象,我们将这种语言定义为纯(强)面向对象的语言。”
将不胜感激。如您所见,我只是根据术语“对象”(通常完全称为对象类)来进行定义。
[编辑]
另外,我使用(很容易理解的)类型概念,就像在类型化语言中一样。数据类型编程或面向类型的编程不仅是对程序文本的语法解释(即,如何处理文字和数据变量的某些值-演变为类型安全性的某种东西),而且可以归因于语言语法并以正式方式进行研究(使用数学逻辑)称为类型系统。注意,要求特定类型系统具有所谓的通用类型是定义OO语言纯净性的方法之一(有一些方法可以在语义上进行扩展)。
NB
如何回答:
- 如果您指定支持或解释您对术语和概念的理解的书或参考文献(通常是一个好的定义涵盖或参考了除基础知识以外的所有相关概念),它会有所帮助。
- 如果不清楚,请在可能的情况下注明答案/定义的缩进类别(请参见上文:1-以语言为例,2-数学逻辑,3-技术描述和编程原理)
- 分类很重要(也是因为术语OO包含在术语OO中),同时回答尝试将OO范式的元素与其他众所周知的方法进行混合(并且绝不会造成混淆/重叠),例如,通常可以覆盖模块化编程的元素/包含OO编程):尝试将OOP与功能编程,逻辑编程(尤其是高度专业化的),Abstarct数据类型(ADT),模块化,元编程(泛型和LISP的宏扩展时间)(包括或作为其一部分)进行区分,合同(例如Eiffel),面向方面(AO)(声明性和功能性分类之间的差异以及Dijkstra结构化的历史定义很明显)
关于难以给出正式定义的困难:令人惊讶的是,以某种逻辑(正式)系统(最有可能基于类型)的形式给出OOP的数学描述,并一个接一个地定义一个概念非常容易。甚至可以尝试通过将形式主义应用于类型安全检查或新的语言设计方面来做一些更实际的事情,而不仅仅是抽象的娱乐或练习(还包括在直觉类型理论中对OOP的查找公式,从属类型,在FOL形式主义中独立地作为lambda计算)并仅使用类别理论)。这里的重点是毫不奇怪IMO最初对OOP的最不完全了解(在计算机工程中),使IMO的这种表达有很大的偏颇(有缺陷),并最终在之后几乎无法访问(因此几乎不对编程世界有所贡献-也许除了某些百分比会通过从应用程序世界中找回应用程序)集成到流行语言中)。
因此,是的,很难给出一个准确的“好”定义,而不仅仅是给出定义。但是我很高兴在这里提出这个问题,因为你们的经验和直接参与,伙计们。