首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将一种语言视为“面向对象”的标准

将一种语言视为“面向对象”的标准
EN

Software Engineering用户
提问于 2012-03-19 17:36:13
回答 6查看 7.3K关注 0票数 3

今天我讨论了OO编程,通过浏览internet,我发现了许多面向对象语言的不同规范。

  • 语言对面向对象的要求是什么?对于我自己来说,面向对象的语言必须有类、继承和封装。
  • C是一种面向对象的语言,仅仅是因为您可以在面向对象的设计中使用结构和程序吗?为什么/为什么不?

有关于这方面的好网站/文章吗?请不要链接维基百科,因为我已经去过那里了。

EN

回答 6

Software Engineering用户

回答已采纳

发布于 2012-03-19 18:09:50

OO通常是根据四项基本要求“定义”的:

  • 抽象意味着您能够将对象外部可见的行为与其实现分离开来。
  • 封装意味着能够隐藏对象实现的细节(与抽象密切相关,以至于一些作者将其视为一个,只留下三个主要需求)。
  • 模块化意味着能够将抽象封装到离散单元中。
  • 层次结构是抽象的等级或顺序--一种定义一个抽象和另一个抽象之间关系的能力。

例如,如果支持这四大需求,我会考虑面向语言的对象。然而,支持有点超出了“允许”或“容忍”。

例如,C提供了足够的灵活性,您可以相当好地模拟其中的每一个。然而,C只为抽象或模块化提供了一点支持,而对封装或层次结构则完全没有提供任何支持--如果您非常想做这些事情,您可以这样做,但是语言并没有真正为它们提供任何直接支持。

显然比较而言,C++为每个需求提供了直接支持。例如,通过使类成员私有和/或保护来直接支持封装,并且通过类继承支持层次结构。

然而,这仍然不是通常所说的“纯”面向对象语言。在纯OO语言(例如Smalltalk)中,您不仅得到了对层次结构的支持,而且还得到了一个预定义的类型层次结构,并且您必须定义任何新类型与该层次结构中的某些现有类型的关系(也就是说,您的所有代码都在类中,每个类必须从某个现有的类派生)。

尽管类和继承在许多面向对象的实现中都是常见的,但它们都不是真正必要的。例如,Self和JavaScript都使用基于范例的层次结构。这些对象不是类的层次结构,每个对象都是类的实例,它们只是使用对象的层次结构,每个对象都基于其他对象,但是修改到了任意的程度。

票数 5
EN

Software Engineering用户

发布于 2012-03-19 18:13:22

根据Rumbaugh等人的“面向对象的建模和设计”,对象具有以下特征:

  • 标识:数据被量化为离散的、可区分的实体,称为对象。
  • 分类:具有相同结构和行为的对象被组合在一起形成类。
  • 多态性:相同的操作(具有相同名称的操作)在不同的类上可能有不同的行为。
  • 继承:基于层次关系的类间属性和操作的共享。

根据这个定义,面向对象语言应该支持这些概念。在C中,您可以定义结构的共享结构,但不能定义行为(没有行为分类的结构分类)。您可以通过数据对象的句柄(指针)来定义标识。多态和继承完全缺失,必须通过即席技术实现。

因此,根据这些标准,C不是一种面向对象的语言.使用一些特殊的技术,您可以在C中实现和面向对象的设计,但是C没有足够的概念直接支持它。

票数 5
EN

Software Engineering用户

发布于 2012-03-19 17:41:51

一种语言成为面向对象语言的唯一现实要求是,它有可能至少花费大量的时间来处理OOP,而不是针对它的缺陷进行黑客攻击。像C这样的东西不是很好,但它是可用的。如果你绝望的话。

哪种编程语言是最纯粹的OOP?哪些教派是最纯正的基督徒?对于这个问题,你不可能得到正确或客观的答案--对“纯”甚至没有任何有用的定义。其次,即使你可以选择没有其他非面向对象特性的语言,并且在科学定义上是“纯的”,也就是说,只有一件事,那么它将是一种糟糕的语言。OOP并不是什么神奇的孩子,它对每件事都不太好,而且只有OOP提供了一种语言,就像一堆可怕的东西一样。

票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/140516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档