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

时间:2010-08-24 09:14:09

标签: c++ oop polymorphism

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

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

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

8 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:9)

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

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

答案 2 :(得分:5)

这是一个在OO编程风靡时被抛出的术语。这个家伙可能试图用大词来恐吓你,我怀疑他是否完全明白他在说什么,虽然这在解释时是一个简单的概念。

这里的任何内容都是论证的关键 - 你需要多少次编写,维护或扩展文本编辑器 - 没有 - 因此,对于一个相对简单的代码片段而言,OO范例几乎没有用处这需要高效率。

答案 3 :(得分:3)

许多设计模式,如Memento,Flyweight等 可能 用于设计/实现文本编辑器需要继承和多态。

答案 4 :(得分:2)

我曾在Basic编写过一个文本编辑器。它无论如何都不是一个复杂的文本编辑器,它的一大亮点是用于某些菜单和对话框的文本模式窗口事物,但它仍然在当时完成它的工作 - 即它证明了我可以在Basic中编写文本编辑器。我有时甚至用它。我不会在公开场合展示消息来源 - 这太尴尬了!

当你的文本编辑器主要只是插入/删除大字符串中的字符并显示它们时,除了通常提供的标准数组和字符串抽象之外,几乎不需要抽象。

另一方面,预计PC上的文本编辑器应对的文本量在过去20年中增加了很多,有时甚至达到具有多个千兆字节的现代PC可能无法实现的程度将整个文件保存在RAM中。最重要的是有字符集和编码问题。一个好的文本编辑器应该能够记住多个文件中的(可能很大的)书签数量,并保留它们,以便尽管进行了编辑,它们仍然可以引用相同的点。然后是语法高亮,记录/回放宏的能力等等。

简而言之,现代文本编辑器比二十年前在DOS和其他微处理器上使用的东西要复杂得多。毫无疑问,通过一个处理抽象的好工具包来管理这种复杂性。

答案 5 :(得分:2)

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

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

基本上,这只是一个表示文档结构的对象树,包括格式(粗体,斜体等)着色等细节。

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

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

然后,当需要显示或更新文档的结构时,代码只是遍历树,在每个对象上调用具体的Compose()。然后,每个对象都可以在文档中的适当位置进行合成和渲染。

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

再一次,有很多方法可以构建一个文本操作程序,多态性肯定不是 required 来构建一个。

答案 6 :(得分:2)

虽然简单的文本编辑器(在MS-DOS下的edit.com下面)可以在静态类中更容易实现(因为功能非常有限),一旦你进入菜单和对话框,你会发现自己迫切需要面向对象的语言特性。

就个人而言,无论如何我都不赞成程序代码 - 我更喜欢混合使用OOP(程序结构,功能分离等)和函数式编程(实现)。

这可能听起来像某种宗教论点,但我发现我的个人风格非常值得推荐。通常我需要比我工作的大多数开发人员更少的代码行(更容易理解),我的代码感觉更“敏捷”和“灵活”。

试试吧。 : - )

哦 - 多态并不难理解。简单地想象你(作为一个人)可以被处理为:

a)男人或女人 b)欧洲,亚洲,美国,非洲,大洋洲(我希望这是对的)等等...... c)以你的名字命名 d)按你的职业划分

但你仍然是一个人 - 一个活着的人,也是宇宙的一部分......和你在一起。

因此,对于因统计原因向您询问几个问题的人,您可能会被处理为来自大洋洲的女性(我不知道您来自哪里,但我们只是假设),是谁,嗯,42岁,在瑞士生活了23年(哈哈哈)。

对于您的雇主,您可能有能力编程并与您的同事交谈。

但是,如何填写这些角色取决于您的实施。这就是你。

答案 7 :(得分:1)

  

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

取决于您所谈论的文本编辑器类型。

你可以在没有OOP的情况下写记事本。但是你很可能需要OOP来代替MS Word或OpenOffice。

Design Patterns: Elements of Reusable Object-Oriented Software使用文本编辑器作为Design Pattern应用程序的示例(即“案例研究”)。你可能想看看这本书。