我理解使用面向对象编程作为概念的利弊。我正在寻找的是专门使用 oo in progress/openedge 的优缺点。我需要考虑哪些挑战?语言中是否存在与 oo 不匹配的部分?类似的东西。
编辑:使用 10.2b
我理解使用面向对象编程作为概念的利弊。我正在寻找的是专门使用 oo in progress/openedge 的优缺点。我需要考虑哪些挑战?语言中是否存在与 oo 不匹配的部分?类似的东西。
编辑:使用 10.2b
我会给你我的意见,但请注意,我可能是最讨厌进步的人。;) 也就是说,我已经在 OOABL 中编写了几个中型项目,因此我在该领域有一些经验。这些是我写的一些东西,只是为了让你知道我不是在说我的帽子:
OOABL 优点:
OOABL 缺点:
CATCH
/THROW
不允许您抛出自定义错误并强制调用者捕获它们。向后兼容性阻止了这种进一步发展,所以我怀疑它会不会得到改善。PUBLISH
/SUBSCRIBE
也不起作用,如果有记忆的话。OO 就是构建小的、可重复使用的部分,这些部分可以组合成一个更大的整体。OOABL 的一个大问题是“ABL”部分因其粗糙的数据结构和缺乏枚举器而拖累你,这使你无法真正用它构建真正漂亮的东西。不幸的是,由于它是一种封闭的语言,你不能只是回避你的手,并在外部为它创建自己的新数据或控制结构。
现在,理论上可以尝试使用 MEMPTR、固定数组 (EXTENT) 和 WORK-TABLE 构建其中的一些东西。然而,我曾在 10.1C 中尝试过,但由于缺少接口继承和抽象类,设计失败了,正如我所料,性能相当糟糕。后一部分可能只是由于我的能力差,但我怀疑这是一个几乎无法克服的实现限制。
如果您绝对必须在 OpenEdge 中编码,最重要的是使用 OOABL - 它比程序 ABL 更好,并且在 OpenEdge 的每次迭代发布后,粗糙的边缘会变得稍微平滑一些。但是,它永远不会是一门漂亮的语言(OO 或其他)。
如果您想学习正确的面向对象编程并且不局限于 ABL,我强烈建议您研究一种将对象视为一等公民的语言,例如 Ruby 或 Smalltalk。
在过去的四年中,我 80% 的时间都在使用 OOABL(从 10.1c 开始)。我绝对推荐使用OOABL,但我认为考虑使用OOABL 与其他OO 语言相同的方式充满问题是非常重要的。“相同方式”是指在 oo 世界中常见的设计模式和实现实践。此外,某些类型的应用程序,尤其是在技术框架领域,很难使用 OpenEdge(例如 ORM)。
原因是OOABL 的性能问题和语言中缺少OO 特性。
例如,如果您使用 C# 或 Java 进行编程,那么在许多情况下,对象的内存占用和实例化时间并不是一个大问题。使用 ABL 这经常成为一个大问题。这会导致其他设计决策并阻止某些模式和框架的实现。
一些缺失或不好的 OO 特性:
因此,如果您熟悉其他语言的 oo 编程并开始使用 OOABL,您可能会错过很多您期望在那里的东西,并在尝试在 ABL 中实现这些东西时感到沮丧。
如果您的应用程序必须仅在 Windows 上运行,也可以在 C# 中实现新的 oo 代码,并通过 clr 桥从您现有的进度代码中调用它,这非常顺利。
钾+
只有一件事——“错误处理很糟糕”——这很糟糕,但不是因为你不能让你自己的错误类在调用者块中捕获它们——这行得通,我正在使用它。糟糕的是旧的 NO-ERROR / ERROR-HANDLE 选项和 Progress.Lang.Error / CATCH 块和 ROUTINE-LEVEL ON ERROR UNDO, THROW 的混合。这是一个大问题,当团队中没有约定时,将使用哪种错误处理以及如何使用。