第5章 面向对象与泛型编程


第5章 · 面向对象与泛型编程

章节摘要:科学软件长到一定规模,代码组织的复杂度会吞掉算法带来的收益。本章把 Fortran 的两件现代武器讲透:面向对象——类型扩展、多态、类型绑定过程如何把物理实体映射成可扩展的代码结构,设计模式如何在求解器这类框架里落地;泛型——参数化派生类型与 Fortran 2023 的泛型展望如何消灭"同算法多类型复制"。读完本章,你能搭出"改配置不改主逻辑"的数值框架。特别要强调的是,本章所有抽象手段都配了性能边界——Fortran 的抽象从来不以牺牲热路径效率为代价。

学习目标

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

  1. 用类型扩展建立"是一个"的类型层次,并解释其内存前缀兼容
  2. 用 class 声明多态变量,用 select type 做类型守卫
  3. 用抽象类型与延迟绑定定义接口契约,并用工厂模式创建具体对象
  4. 用参数化派生类型定义带 kind/len 参数的数据结构
  5. 说出 Fortran 2023 泛型(模板化过程)的设计方向与当前替代方案

核心概念速览

金句:Fortran 的 OOP 是"受限的面向对象"——它给你抽象的能力,但不让你为抽象付出性能的代价。

子章节导航

5.1 继承与多态:类型扩展与动态绑定

类型扩展的内存机制、class 与 type 的区别、select type 类型守卫、无限多态 class(*)。这一节是 OOP 的语法与语义核心。

5.2 设计模式在数值框架中的应用

策略模式与工厂模式在求解器框架里的落地,多态与性能的平衡,以及面向对象代码的内存管理纪律。

5.3 参数化派生类型与现代泛型

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 从过程式走向现代抽象的历史缩影——每加一层抽象,都要回答一次"性能代价在哪、能不能接受"。

前置知识与后续延伸

  • 前置知识:第 2 章派生类型(类型扩展的直接前身)、第 4 章过程与接口(绑定过程与泛型接口的基础)。
  • 后续延伸:第 6 章并行里多态对象与协同数组的结合、第 8 章工程化里"多态分发、静态执行"的性能策略,都建立在本章概念上。第 7 章互操作中对象对外暴露为 C 句柄,也依赖本章的封装理解。

学习本章要克制两个极端。一边是把 Fortran 当 C++ 用,堆出七八层继承树,最后发现改父类牵连所有子类;另一边是彻底拒绝抽象,所有逻辑塞进过程,换来的是每次加功能都要动主逻辑。Fortran 的面向对象是"为数值问题定制的有限抽象":需要可替换行为就上多态,需要精度无关就上参数化类型,不需要就老老实实写过程。本章每个模式都附了适用边界,遇到具体问题时对照边界再决定要不要用,比抱着一个模式到处套靠谱。

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