许多年前,当我对面向对象设计知之甚少时,我听到一个人说“你怎么能写出一个没有多态性的文本编辑器?”我对 OOP 了解不多,所以我无法判断当时它有多明智,也无法提出任何具体问题。
现在,经过多年的软件开发(主要是C++),我已经多次使用多态来解决设计软件时的各种问题。但我从未创建过文本编辑器。所以我仍然无法评估那个人的想法。
使用多态对于在面向对象语言中实现文本编辑器是否如此重要?为什么?
最佳答案
关于多态性只是一种工具的其他观点是正确的。
然而,如果“这个人”确实有一些编写文本编辑器的经验,他很可能一直在谈论在文档组合层次结构的实现中使用多态性。
基本上,这只是一个代表文档结构的对象树,包括格式(粗体、斜体等)着色等细节。
(大多数 Web 浏览器都以浏览器文档对象模型 (DOM) 的形式实现类似的东西,尽管肯定没有要求它们使用多态性。)
这些对象中的每一个都继承自一个公共(public)基类(通常是抽象的),该基类定义了诸如 Compose() 之类的方法。
然后当需要显示或更新文档的结构时,代码简单地遍历树,在每个对象上调用具体的 Compose()。然后每个对象负责在文档中的适当位置组合和呈现自身。
这是多态的经典用法,因为它允许添加(或更改)新文档“组件”,而无需对主应用程序代码进行任何(或最少)更改。
再次重申,构建文本操作程序的方法有很多种,构建一种绝对不需要多态性。
关于c++ - 多态性对于编写文本编辑器有多重要?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3555007/