什么是面向过程 一个函数的自白:从函数的角度看编程的方式(4)

电脑杂谈  发布时间:2018-02-16 19:49:21  来源:网络整理

审视自身,进而改变我自己

见贤思齐焉 见不贤而内自省也

什么是面向过程_什么是面向对象_面向过程与面向对象

在程序设计的过程中可以将程序自身也一起考虑。有一种抽象的方式是可以获取自身以及其他的抽象信息,但不能改变这些信息。程序获取自身信息的能力叫做自省,支持自省的语言有java,python,java,以及PHP等,而C/C++不支持自省。其中,python 有强大的自省能力,如callable,inspect等。 然而,使用自省使得程序变得不直观,甚至难以理解,有利有弊吧。

反射使用了自省,程序在运行时可以通过增加抽象、变量等方式进行自我修改。反射的目的是要求程序能自我修改,ruby支持完备反射,python 和java在限制条件下支持反射,而java只支持小部分的反射。在设计过程中,当无法预期代码被修改方式的时候,会使用反射。

如果将问题的切面增加到主程序中,但不改变这种抽象方式的源码和使用该抽象的代码段,再通过一个外部绑定机制将这种抽象形式和切面绑定在一起,这就是AOP。AOP是一种受限制的反射,目的是在已有程序的指定代码前后插入任意代码。 切面主要关注可能被分散到应用程序中的代码,这些代码通常会影响许多组件,典型的切面如 profiling 和 tracing。

把我们有组织的固定下来充分复用——插件

但要前尘减 无妨外相同

如果把我们有组织的固定下来,所有或部分被预编译后通常会自成一体,主程序和每个包单独编译,主程序在开始时动态地加载这些包,使用动态加载包中的函数和对象,无需知道具体事项,这就是插件。

插件又叫plugin或者addon,不需重新编译,就可以将一系列功能加入到正在执行的应用程序中。通过一个外部定义来说明哪些包需要被加载,通常是配置文件,路径约定,用户输入或其他运行时加载外部代码的机制。现代操作系统的动态链接库dll/so 就是插件风格,需要注意的是存在配置深渊。

对于分布式体系结构和支持第三方扩展的独立应用程序,带有反射能力的编程语言使得在运行时链接组件变得可行并且非常简单。Java Spring框架就支持由反射机制带来的插件化开发,称为“依赖注入”和“插件”,插件一般使用描述性配置语言如INI和XML。

据说,插件是软件进化和定制的核心。

我错了?!——异常处理

此情可待成追忆 只是当时已惘然

异常是在程序运行中超出正常预期的情况。我和每一个伙伴都会检查自身参数的合理性,当参数不合理时,返回合理的结果或者给参数指定合理的值。所有的代码块都会检测可能存在的错误,当错误发生时,跳过代码块,设置合理的状态并继续执行函数的其他部分。

通常防御式编程能为用户带来较好的体验,每个过程和函数都检测自身参数的合理性,若参数不合理,程序停止运行。另外,当错误发生时,最好将上下文相关的信息写入日志,同时将错误传递回函数调用链。如果对异常采取消极态度,至少也应该通知各方正确的使用方式,以及停止运行的原因。

全局捕获是我们另一种处理异常的方法,在调用其他函数时,程序仅检测能够提供有意义反馈的错误。这种异常处理在函数调用链中位于较上层,仅在程序最外层进行异常处理,无视异常时间发生的位置。

无论在哪里捕获异常,调用栈都是异常信息的一部分,除非局部存在有意义的处理方式,更好的做法是将异常返回到函数调用链的上游。

我眼中的类型错误

堪嗟岁月蹉跎久 却悔尘寰错误多

对于输入参数而言,一般地,我会声明所期待的参数类型。如果调用方没有传送预期类型的参数,则会产生类型错误,这时将不再执行。类型不匹配是指我得到的值类型与所期待的值类型不符;或者一个伙伴返回了一个特定类型的值,但该值稍后被调用者当作其他类型的值使用。不同类型的值通常被分配不同大小的内存空间,这意味着当发生类型不匹配时,内存可能被重写而变得不一致,这就是这类异常的问题所在。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-80890-4.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 吴徳
      吴徳

      求求你们不要抛售了要投资看长远啊

    • 张倅
      张倅

      保证国家安全

    热点图片
    拼命载入中...