全文共2103字,预计学习时长7分钟
来源:Pexels
这次,小芯会介绍比往期所提到的一类程序类型更通用的模块类型系统。
大家准备好了吗?
注意:一些函数式编程语言也试图定义一级模块。本文中定义的一级模块是从反向函数创建的。
一类程序
一类程序的类型定义如下。注意,我们排除依赖项类型,因为依赖项是自动连接的。
FirstClassProcedureType {Class<?>parameterType;ContinuationType[] continuations;}
ContinuationType {String name;Class<?>argumentType;}
一类程序的定义,就是有一个输入参数和多个连续输出,能够进一步组合逻辑和处理异常。
模块
对于一类程序中的方法、函数等,一个输入和多个输出是很好的。然而,系统升级时,不应是输入/输出随之更复杂,而是希望输入/输出提供接口进行封装降低复杂度。请注意,没有封装,就无法将应用程序的复杂性模块化。
若激活模块接口,请创建以下输入/输出类型:
InputType {String name;Class<?>parameterType;}
OutputType {String name;Class<?>argumentType;}
为了说明为什么要创建这些类型,笔者将使用反向耦合控制的可视化配置来帮助大家理解。
以下模块配置由一类程序控制,表示单个输入,后输出结果:
在上述配置中,一类程序封装在模块中。模块所展示的只是输入和输出。上述模块的结果类型如下:
· 名为“Input”的输入,参数传递给一类程序
· 名为“Output”的输出,参数由一类程序执行的结果提供
然而,这对一类程序接口没有什么改进。
有用的是封装多个一类程序以实现模块的功能:
虽然模块中包含了新的程序,但其接口没有变动。使用该模块的其他配置不会意识到另一个第一类过程的内部添加。
不必局限于单一的输入和输出。可以有一个任意复杂的模块,它有多个输入和输出:
生成的模块将细节封装为具有以下接口:
· 输入“Input”
· 输入“输入-2”
· 输出“输出”
· 输出“输出-2”
· 输出“输出-3”
模块类型
形成的模块类型如下:
SectionType {InputType[] inputs;OutputType[] outputs}
模块(段)有多个输入和多个输出。这些输入/输出可以跟其他模块的相应输出/输入链接起来。
此外,模块本身可能包含其他模块。由于输入/输出连接用于组合,模块具有与第一类过程相同的输入/输出连接。下图配置演示如何将本文开头的模块嵌入到另一个模块中:
无论是包含一个或两个一类程序的模块,第一类过程都是封装的,在上述配置中不受关注。模块的使用仅限于模块公开的输入/输出。模块的其余部分被封装。这允许对应用程序的复杂性进行模块化。
来源:Pexels
一级模块
标题是“一级模块”,但我们只讨论了将模块可视化地连接在一起。
要想是“一级”,需要将模块分配给一个变量,当然还有其他条件。不过对我来说,这是最简单的思考一级类的方式。
上述图形配置是在以编程方式配置在一起的部分(模块)上构建的。图形配置实际上是一级模块(节)之上的一层,以便更清楚地展示应用程序是如何模块化的。
本文使用的上述图形配置的OfficeFloor实现中可以看到这一点。上面的图形配置是通过一个“活动”实现的。活动是节的特定专门化(ActivityLoaderImplsource)。该活动将XML从图形配置转换为节的创建、一类程序、输入和输出。操作的过程中每一个都被分配给变量、存储在数据结构中、传递给函数、从函数返回等,真正让节(模块)属于“一级”
这种基于连续性的输入/输出接口是非常灵活的,因此一类程序本身也只是一个节的特定化操作(参见ProcedureEmployer)。
总结
来源:Pexels
已经见证了如何在一级模块中封装一类程序,以及自身封装一级模块。
文章也展示了图形配置到底是怎么利用“第一类”特性的。图形配置实际上是一个更高级别的组合,它提供了:
· 易于理解应用程序的模块化
· 更快地配置应用程序(有效地只是为合成画线)
注意,以编程方式配置应用程序是完全可能的。然而,这需要更深入地理解一级过程/模块——比初级开发人员最初可能希望的要多得多。
因此,一级模块的图形化配置为构建模块化应用程序很简单,不必应对底层结构的复杂性。而其他组合策略仍有问题。
之后有机会,我们接下来将研究一级模块如何提供不同的现有组合策略的组合。
至此,你可能会发现,现有的组合策略只考虑了小范围的编程,范围扩大,一级模块在模块化和简化应用程序方面变得更加有效。
留言 点赞 关注
我们一起分享AI学习与发展的干货
欢迎关注全平台AI垂类自媒体 “读芯术”
(添加小编微信:dxsxbb,加入读者圈,一起讨论最新鲜的人工智能科技哦~)
转载:https://blog.csdn.net/duxinshuxiaobian/article/details/104666600