Bil*_*ill 12 oop progress-4gl openedge
我理解使用面向对象编程作为概念的优缺点.我正在寻找的是具体使用oo进行中/开放的利弊.我需要考虑哪些挑战?是否有部分语言与oo不能很好地融合?类似的东西.
编辑:使用10.2b
Abe*_*ker 19
我会告诉你我的意见,但要预先警告我可能是那里最大的进步仇恨者.;)那就是说,我已经在OOABL写了几个中型项目,所以我在该领域有一些经验.这些是我写的一些东西,所以你知道我不是在说我的话:
OOABL优点:
OOABL缺点:
CATCH/ THROW不会让你抛出自定义错误并强制调用者捕获它们.向后兼容性阻止了这种进一步发展,所以我怀疑它会不会改进.PUBLISH/ SUBSCRIBE如果记忆服务,也不起作用.OO是关于构建可重复使用的小块,可以组合起来构成更大的整体.OOABL的一个大问题是"ABL"部分会因为粗糙的数据结构和缺少枚举器而拖累你,这使你无法真正用它来构建真正美丽的东西.不幸的是,由于它是一种封闭的语言,你不能只是回避你所处理的手,并在外部为它创建自己的新数据或控制结构.
现在,理论上可以使用MEMPTR,固定数组(EXTENT)和WORK-TABLE来尝试构建其中的一些东西.但是,我在10.1C尝试了这个,由于缺少接口继承和抽象类,设计崩溃了,正如我所料,性能非常糟糕.后一部分可能仅仅是因为我的能力差,但我怀疑这是一个几乎不可能克服的实施限制.
如果绝对必须在OpenEdge中进行编码,那么底线是使用OOABL - 它比程序性ABL更好,并且在每次迭代发布OpenEdge后粗糙边缘变得稍微平滑.但是,它永远不会是一种美丽的语言(OO或其他).
如果你想学习正确的面向对象编程并且不受ABL限制,我强烈建议你看一种将对象视为一等公民的语言,比如Ruby或Smalltalk.
小智 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从现有的进度代码中调用它,这非常顺利.