章节摘要:科学软件长到一定规模,代码组织的复杂度会吞掉算法带来的收益。本章把 Fortran 的两件现代武器讲透:面向对象——类型扩展、多态、类型绑定过程如何把物理实体映射成可扩展的代码结构,设计模式如何在求解器这类框架里落地;泛型——参数化派生类型与 Fortran 2023 的泛型展望如何消灭"同算法多类型复制"。读完本章,你能搭出"改配置不改主逻辑"的数值框架。特别要强调的是,本章所有抽象手段都配了性能边界——Fortran 的抽象从来不以牺牲热路径效率为代价。
阅读完本章,你应当能够:
金句:Fortran 的 OOP 是"受限的面向对象"——它给你抽象的能力,但不让你为抽象付出性能的代价。
类型扩展的内存机制、class 与 type 的区别、select type 类型守卫、无限多态 class(*)。这一节是 OOP 的语法与语义核心。
策略模式与工厂模式在求解器框架里的落地,多态与性能的平衡,以及面向对象代码的内存管理纪律。
PDT 的 kind/len 参数机制、通用线性代数库的实践,以及 Fortran 2023 模板化过程的展望与当前替代方案。
三节按"机制 → 组织 → 泛化"推进:5.1 教你单类型怎么扩展、怎么多态;5.2 教你多个类型怎么组织成框架;5.3 教你让算法脱离具体类型。5.1 是地基,5.2 是 5.1 的组合应用,5.3 是超越继承的另一种泛化路径——三者并行不悖,共同回答"怎么让代码少改、多活"。
5.1 继承与多态(单类型的扩展机制) │ ├──► 5.2 设计模式(多类型的组织方式) │ └──► 5.3 参数化类型(算法脱离具体类型)
三节读下来,你会看到一条共同的演进线:从"一个类型怎么变"到"一堆类型怎么配"再到"类型本身怎么参数化"。这条线也正是 Fortran 从过程式走向现代抽象的历史缩影——每加一层抽象,都要回答一次"性能代价在哪、能不能接受"。
学习本章要克制两个极端。一边是把 Fortran 当 C++ 用,堆出七八层继承树,最后发现改父类牵连所有子类;另一边是彻底拒绝抽象,所有逻辑塞进过程,换来的是每次加功能都要动主逻辑。Fortran 的面向对象是"为数值问题定制的有限抽象":需要可替换行为就上多态,需要精度无关就上参数化类型,不需要就老老实实写过程。本章每个模式都附了适用边界,遇到具体问题时对照边界再决定要不要用,比抱着一个模式到处套靠谱。