繁体   English   中英

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

[英]How essential is polymorphism for writing a text editor?

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

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

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

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

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

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

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

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

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

许多设计模式,比如纪念品,飞锤等可以用来设计/实施的文本编辑器需要继承和多态。

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

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

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

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

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

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

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

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

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

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

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

不过,有很多方法可以构建文本操作程序,多态性绝对不需要构建一个。

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

就个人而言,我还是对程序代码不屑一顾 - 我更喜欢混合使用OOP(程序结构,功能分离等)和函数式编程(实现)。

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

试试吧。 :-)

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

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

但你仍然是一个人 - 一个生物,宇宙的一部分......而你。

所以对于那些因为统计原因问你几个问题的人,你可能会被处理为一个来自大洋洲的女人(我不知道你来自哪里,但我只想假设),他是,42岁,在瑞士生活了23年(哈哈哈)。

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

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

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

取决于你在谈论什么样的文本编辑器。

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

设计模式:可重用面向对象软件的元素使用文本编辑器作为设计模式应用程序的示例(即“案例研究”)。 你可能想看看这本书。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM