编写文本编辑器的多态性有多重要?

sha*_*oth 11 c++ oop polymorphism

很多年前,当我对面向对象设计了解不多时,我听到一个人说过"你怎么能写一个没有多态的文本编辑器?" 我对OOP知之甚少,所以我无法判断当时是多么明智或者提出任何具体问题.

现在,经过多年的软件开发(主要是C++),我在设计软件时多次使用多态来解决各种问题.但我从未创建过文本编辑器.所以我仍然无法评估那个人的想法.

使用多态如此对于在面向对象语言中实现文本编辑器至关重要,为什么?

Gre*_*ill 12

编写文本编辑器的多态性绝不是必需的.事实上,解决任何编程问题的多态性并不重要.这只是一种方法.有时它会使解决某些类型的问题变得更容易,有时它只会妨碍它.

这方面的证据是,在"OOP"开始流行之前很久就开发了完全可用的文本编辑器.

  • 像机械打字机:) (3认同)
  • emacs是用Lisp方言实现的事实可能被认为是你不应该使用支持多态的语言创建文本编辑器的证据:) (2认同)

duf*_*ymo 9

我会说"不",因为完全可以用非面向对象的语言编写完美的文本编辑器,所以它不是那么重要.

多态性对于它所解决的问题来说是一种很好的技术,但对于软件开发人员遇到的一切问题来说,它绝不是金钥匙.

  • C具有函数指针形式的多态性 (2认同)

Jam*_*ate 5

当OO编程风靡时,这个术语被抛出了很多.这个家伙可能试图用大词来吓唬你,我怀疑他是否完全理解他所说的话虽然这是一个简单的概念,但在解释时.

任何这里都存在争论的关键 - 您需要编写,维护或扩展文本编辑器的次数 - 没有 - 因此,对于需要的相对简单的代码片段而言,OO范例几乎没有用处.高效率.


Ash*_*Ash 2

关于多态性只是一种工具的其他观点是正确的。

然而,如果“那个人”确实有一些编写文本编辑器的经验,他很可能正在谈论在文档组合层次结构的实现中使用多态性。

基本上,这只是一个代表文档结构的对象树,包括格式(粗体、斜体等)、颜色等详细信息。

(大多数网络浏览器以浏览器文档对象模型(DOM)的形式实现类似的东西,尽管当然不要求它们使用多态性。)

这些对象中的每一个都继承自一个公共基类(通常是抽象的),该基类定义了诸如 Compose() 之类的方法。

然后,当需要显示或更新文档结构时,代码只需遍历树,调用每个对象上的具体 Compose() 即可。然后,每个对象负责在文档中的适当位置组合和呈现自身。

这是多态性的经典用法,因为它允许添加(或更改)新文档“组件”,而无需对主应用程序代码进行任何(或最小)更改。

再说一遍,构建文本操作程序的方法有很多种,但构建文本操作程序绝对不需要多态性。