第4章 模块化与过程设计


第4章 · 模块化与过程设计

章节摘要:数组是引擎,模块与过程是让引擎能被工程化地组装、检修、替换的骨架。本章解决两件事:模块如何用命名空间、public/private、子模块把"全局共享"变成"受控接口";过程如何用 intent、value、pure、elemental 这些属性把参数契约写清楚,让编译器替你检查、替你优化。读完本章,你能把一个几十万行的科学软件组织成边界清晰的模块树,而不是一坨靠 COMMON 块粘合的代码。注意一个信号:当你的主程序不再靠参数列表"接力传递"数据,而是从模块里按需取用接口时,就说明你已经跨过了脚本与工程的分界线。

学习目标

阅读完本章,你应当能够:

  1. 用模块封装类型、常量与过程,并用 use、only、重命名管理命名空间
  2. 用 public/private 默认私有策略保护模块内部状态
  3. 解释子模块如何实现接口与实现的物理分离,以及它带来的增量编译收益
  4. 为过程正确选择函数/子程序,并为参数标注 intent 与 value
  5. 用 pure 与 elemental 写出可并行、可向量化的过程
  6. 用泛型接口实现"同名多实现"的编译期分派

核心概念速览

金句:模块把"谁都能碰的全局变量"变成"只有接口能碰的受控状态"——这是 Fortran 工程化转型的分水岭。

子章节导航

4.1 模块体系与接口隔离

模块是 Fortran 的命名空间与封装单元:use 的三种形态、默认私有策略、子模块的接口实现分离。这一节解决代码组织的骨架问题。

4.2 过程设计与参数契约

函数与子程序的分工、intent 与 value 的参数语义、pure 与 elemental 的并行属性、递归的栈成本,以及泛型接口的编译期分派。这一节把过程写成"有契约的原子服务"。

子章节之间的逻辑关系

两节的关系是"容器"与"内容":4.1 定义过程住在哪、边界在哪、谁看得见;4.2 定义过程本身怎么设计才可靠。容器不清,内容再精也散;内容不实,容器再漂亮也是空壳。模块里的过程自带显式接口(4.1 的副产品),而 4.2 的泛型接口又依赖模块这个载体,两者互为前提。

4.1 模块体系(过程住在哪、边界在哪) │ └──► 4.2 过程设计(过程怎么设计才可靠)──► 第5章 面向对象 ​

前置知识与后续延伸

  • 前置知识:第 2 章的派生类型(过程常作为类型绑定方法出现),第 3 章的数组语法(过程的参数多为数组)。
  • 后续延伸:第 5 章面向对象是"过程挂到类型上"的延伸;第 7 章互操作中,过程要能被 C 调用,依赖本章对接口与外部过程的处理;第 8 章工程化会把模块组织直接用于构建大系统。

这一章对"从脚本到工程"的转型至关重要。科研代码最初往往是单文件脚本,几十个子程序摊在同一个文件里,靠 COMMON 块和参数列表互相传递数据。代码长到一定规模后,改一处影响一片。模块与过程契约把这种"摊大饼"变成"搭积木":每个模块自成一个有边界的单元,过程之间靠签名与 intent 交流。判断自己是否掌握了本章,可以看一个信号——写新功能时,你是先想"放在哪个模块、接口长什么样",还是直接动手往主程序里塞代码。前者是工程思维,后者是脚本惯性。

作者与出处
原作者:灏天文库
来源:平台策划编纂
整理人: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U