加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

为Perl开发人员编写最佳实践教程

发布时间:2020-12-16 06:11:49 所属栏目:大数据 来源:网络整理
导读:我一直在为从事 Java工作的参与者提供有关编程实践和编写质量代码的培训.面向对象的分析和设计是我的基础,我涵盖了S.O.L.I.D.清洁代码,代码完成2等书籍的原则和摘录. 我计划在两天内向Perl程序员(在Perl中使用不到1年的exp)提供培训,他们不使用Moose(Perl 5
我一直在为从事 Java工作的参与者提供有关编程实践和编写质量代码的培训.面向对象的分析和设计是我的基础,我涵盖了S.O.L.I.D.清洁代码,代码完成2等书籍的原则和摘录.

我计划在两天内向Perl程序员(在Perl中使用不到1年的exp)提供培训,他们不使用Moose(Perl 5对象系统的扩展,它带来了现代的面向对象语言功能).

我现在很困惑如何构建我的训练,因为他们不遵循OOP.

有什么建议?

问候,
Shardul.

解决方法

这里的很多答案都是关于向没有使用它的Perl程序员教授OOP的答案,但是你的问题听起来像是因为你的Perl程序员做的事情,你在如何教授关于代码质量的课程上受到了阻碍不要使用OOP,特别是你不想向非OO程序员教授OOP并强迫他们进入这种范式.

这让我们得到了Perl支持的另外两种编程范例:

>好的’造型Structured Programming也是Modular Programming
> Functional programming support in Perl(也是Higher-Order Perl)

我同时使用这两种方法 – 结合健康剂量的物体.因此,我使用对象的原因与我使用良好的结构,模块和功能管道的原因相同.使用为编程过程带来顺序和理智的工具.例如,面向对象编程是多态的主要形式 – 但OOP本身不是多态.因此,如果你正在编写有助于多态性的习语,它们有助于多态性,它们不必被困在某个特殊的库“类”中,并且像UtilClass-> meta_operator($object)一样调用,它本身几乎没有多态性.

Moose是一种很棒的对象语言,但是你没有调用Moose-> has(attribute => is =>’rw’,isa =>’object’).你给操作符打电话了. Moose的强大之处在于一个对象库,这些对象将类操作封装在类上 – 而且在简单的表达式操作符中,Perl的相当开放的语法允许.我想称解决OOP解决问题的对象.

此外,我想我的问题有问题,因为“不是OOP”是一个很大的领域.它可以包括从主线编码到非严格OOP(编程过程不仅仅是OOP分析).因此,我认为您必须了解您的受众,并了解他们使用什么来保持代码的结构和理智.我无法想象现代的Perl观众至少不是对象用户.

从那里,Perl Best Practices(通常缩写为PBP)可以帮助您.但是那样学习

>仅仅因为OOP是多态性的最佳支持之一,它本身不是多态性
>仅仅因为OOP是封装的最佳支持之一,它本身并不是封装.
> OOP已经得到了结构化和模块化编程的帮助 – 而且本身并不是那些东西.它的一些力量只是那些学科.

另外,与我的对象作者和消费者一样大,OOP不是我想的那样.可重用性是我的想法:在我不想再写之前我做了什么?我写的是什么类似的?如何使我当前的任务只是以前编写的适配器. (而且经常:我如何偷偷摸摸我的行为在一条线上分支一个已建立的模块?)

结果,我的一些构造将失败OOP的行人目标.为了给你一个更好的观点:我将代码划分为两个“域”:高度抽象和多态的库代码,以及我需要做的脚本来获得当前项目中我需要的特定函数. (这基本上就是“应用程序”的意思,但我认为它不会那么清楚).因此,多态性主要有助于提供适应性,但适应本身就是采用最少代码行的任何东西.我的最佳系统是一个库,它允许在库行为和解决特定问题的一组配置或脚本之间的任何关键时刻编写/调整脚本.同样,如果我有我的druthers,配置将从脚本域注入,并且没有库代码会自己说“我需要一个属性文件”,除非它是一个库模块封装了属性文件中的实例配置算法.它只是知道它需要“策略”(或来自应用程序域的决策)才能实现其功能.

因此,我的理想应用程序包含特殊用途的“对象”,它符合“角色”但是类无用的开销 – 除了类执行允许可注入数据和行为的行为.因此,我的一些Perl“对象”违反了OOP分析,因为它们只是一次性解决方案的封装,有点像push-pin(expando)JavaScript对象.

我经常(稍后)修改一个特殊用途的对象并将其进一步推回到库域中,因为我发现我需要再次写这样的东西.库域中的所有对象仅处于指定行为的某个级别.此外,我安排了“数据网络”,其中有一个Sourced类型的类,它简单地封装了在对象本身或另一个源对象中访问数据的行为.这有助于极大地加速我的解决方案,但我从未在任何鸭 – 猫 – 狗 – 卡车OOP底漆中看到它.同样模板化 – 特别是与“数据网络”结合使用时 – 在半打或半天工作的编码解决方案中非常有用.

所以我想我说的是,在某种程度上你只知道OOP用于构造编程,你将无法理解一些旧的,合理的实践或其他范例为你做的事情 – 或者那些有资格作为OOP的事情可以促进平庸的适应性. (除了组件远比“对象”更新.)封装解决了许多问题,但它也促进了您需要的数据缺乏.我们的想法是在您需要的地方获取数据,以便您的固定行为能够实现问题的具体细节并对其进行操作.

>重读结构化编程的一些内容
>阅读有关函数式编程的一些内容(假设您还不熟悉它.)

即便是一个既定的,“富有成效”的Perl团队也可能正在编写……废话.如果他们不是OOP程序员,因为他们只是编写垃圾代码,那么无论如何教他们OOP,如果他们甚至缺乏结构化编程*将他们两个都推到他们的喉咙*(我很难考虑标签“专业”,这里).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读