代码之家  ›  专栏  ›  技术社区  ›  sharptooth

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

  •  11
  • sharptooth  · 技术社区  · 14 年前

    许多年前,当我对面向对象的设计不太了解时,我听到一个人说了这样的话:“你怎么能写一个没有多态性的文本编辑器?”我对OOP不太了解,所以我无法判断这是多么明智,也无法问当时的任何具体问题。

    现在,经过多年的软件开发(主要是C++),我多次使用多态性来解决软件设计中的各种问题。但我从未创建过文本编辑器。所以我还是不能评价那个家伙的想法。

    使用多态性对于用面向对象语言实现文本编辑器是如此重要吗?为什么?

    8 回复  |  直到 14 年前
        1
  •  2
  •   Ash    14 年前

    多态性只是一个工具的另一个观点也很流行。

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

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

    (大多数Web浏览器以浏览器文档对象模型(DOM)的形式实现类似的功能,尽管它们肯定不需要使用多态性。)

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

    然后,当需要显示或更新文档结构时,代码只需遍历调用每个对象的concrete compose()的树。然后,每个对象都可以在文档中的适当位置进行组合和呈现。

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

    不过,有很多种方法可以构建文本操作程序,多态性绝对不是。 必修的 建造一个。

        2
  •  12
  •   Greg Hewgill    14 年前

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

    这一点的证据是,在“oop”流行很久以前就已经开发出了完全可用的文本编辑器。

        3
  •  9
  •   duffymo    14 年前

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

    多态性是解决问题的一种很好的技术,但它绝不是困扰软件开发人员的所有事情的金锤。

        4
  •  5
  •   James Westgate    14 年前

    这是一个术语,在OO编程风靡一时的时候,它被抛到了脑后。这家伙可能是想用大话吓唬你,我怀疑他是否完全理解他所说的话,尽管在解释时这是一个简单的概念。

    这里的任何一个问题都是争论的关键——你需要写、维护或扩展多少次文本编辑器——没有——因此,对于一个相对简单的需要高效运行的代码,OO范式在中几乎没有用处。

        5
  •  3
  •   Chubsdad    14 年前

    许多设计图案,如纪念品、飞锤等 可以 用于设计/实现文本编辑器需要继承性和多态性。

        6
  •  2
  •   Steve314    14 年前

    我曾经用BASIC编写过一个文本编辑器。它不是一个 复杂的 不管怎样,文本编辑器作为一个文本模式窗口,在某些菜单和对话框中使用,这是一个很大的亮点,但它在当时仍然起作用——也就是说,它证明了我可以用BASIC编写文本编辑器。我有时甚至用它。我不会在公共场合展示消息来源——这太尴尬了!

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

    另一方面,在过去的20年中,PC上的文本编辑器需要处理的文本量增加了很多,有时甚至是一台具有千兆字节的现代PC也无法将整个文件保存在RAM中。除此之外,还有字符集和编码问题。一个好的文本编辑器需要记住(可能很大)数量的书签到多个文件中,并维护它们,以便它们引用相同的点,尽管进行了编辑。还有语法高亮显示、记录/回放宏的能力等等。

    简而言之,现代文本编辑器比20年前DOS和其他micros中使用的东西要复杂得多。毫无疑问,使用一个处理抽象的好工具箱,这种复杂性更容易管理。

        7
  •  2
  •   StormianRootSolver    14 年前

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

    我个人不喜欢程序代码——我更喜欢OOP(程序结构、功能分离等)和功能编程(实现)的混合。

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

    试试看。-)

    哦,多形性并不难理解。简单地想象一下,你(作为一个人)可以被当作:

    A)男人或女人 b)欧洲、亚洲、美国、非洲、大洋洲(我希望这是正确的)等…… c)按你的名字 d)根据您的职业

    但你仍然是一个人-一个活着的人,一个宇宙的一部分…和你。

    所以,对于一些出于统计原因问你几个问题的人来说,你可能会被当作一个来自大洋洲的女人(我不知道你从哪里来,但让我们假设一下),她今年42岁,在瑞士的HM住了23年(哈哈哈)。

    对于你的雇主来说,你可能在编程和与同事交谈方面很有能力。

    然而,如何扮演这些角色取决于您的实现。这就是你。

        8
  •  1
  •   SigTerm    14 年前

    使用多态性对于用面向对象语言实现文本编辑器是如此重要吗?为什么?

    取决于你说的是哪种文本编辑器。

    你可以不写笔记本。但您很可能需要OOP来实现MS Word或OpenOffice之类的功能。

    Design Patterns: Elements of Reusable Object-Oriented Software 将文本编辑器用于设计模式应用程序的示例(即“案例研究”)。你可能想看看这本书。