我理解使用面向对象编程作为概念的优缺点。我正在寻找的是具体使用oo进行中/开放的利弊。我需要考虑哪些挑战?该语言的某些部分是否与oo不能很好地融合?类似的东西。
编辑:使用10.2b
答案 0 :(得分:18)
我会告诉你我的意见,但要预先警告我可能是那里最大的进步仇恨者。 ;)那就是说,我已经在OOABL写了几个中型项目,所以我在该领域有一些经验。这些是我写的一些东西,所以你知道我不是在说我的话:
OOABL专业人士:
OOABL缺点:
CATCH
/ THROW
不允许您抛出自定义
错误并强迫来电者抓住他们。向后兼容性
防止这种情况进一步发展,所以我怀疑它会不会有所改善。PUBLISH
/ SUBSCRIBE
也不起作用,
如果记忆服务。现在,理论上可能尝试使用MEMPTR,固定数组(EXTENT)和WORK-TABLE来构建其中的一些东西。但是,我在10.1C尝试了这个,由于缺少接口继承和抽象类,设计崩溃了,正如我所料,性能非常糟糕。后一部分可能仅仅是由于我的能力差,但我怀疑这是一个几乎不可能克服的实施限制。
如果绝对必须在OpenEdge中进行编码,则底线是使用OOABL - 它比程序性ABL更好,并且在每次迭代发布OpenEdge后粗糙边缘变得稍微平滑。但是,它永远不会是一种美丽的语言(OO或其他)。
如果您想学习正确的面向对象编程并且不受ABL的限制,我强烈建议您查看将对象视为一等公民的语言,例如Ruby或Smalltalk。
答案 1 :(得分:8)
在过去的四年里,我80%的时间都在使用OOABL(从10.1c开始)。 我绝对推荐使用OOABL,但我认为考虑使用OOABL与其他OO语言一样充满问题是非常重要的。 以“相同的方式”,我指的是在oo世界中常见的设计模式和实现实践。此外,某些类型的应用程序,特别是在技术框架领域,很难用OpenEdge(例如ORM)。
原因是OOABL的性能问题以及语言中缺少OO功能。
如果您使用C#或Java进行编程,则在许多情况下,对象的内存占用和实例化时间不是一个大问题。使用ABL这更常成为一个大问题。 这导致了其他设计决策,并阻止了某些模式和框架的实现。
一些OO功能缺失或不好:
因此,如果您熟悉其他语言的oo编程并开始使用OOABL,那么您可能会遇到许多您希望存在的事情,并且在尝试实现此类事情时会感到沮丧ABL。
如果您的应用程序只能在Windows上运行,也可以在C#中实现新的oo代码,并通过clr bridge从现有的进度代码中调用它,这非常顺利。
答案 2 :(得分:3)
K +
只有一件事 - “错误处理糟透了” - 它很糟糕,但不是因为你不能让你自己的错误类在调用程序块中捕获它们 - 这是有效的,我正在使用它。从旧的NO-ERROR / ERROR-HANDLE选项和Progress.Lang.Error / CATCH块和ROUTINE-LEVEL ON ERROR UNDO,THROW混合起来很糟糕。这是一个很大的问题,当团队中没有任何约定,错误处理以及将如何使用时。