06-Fortran基础--Fortran模块化编程

2024-05-12 17:20

本文主要是介绍06-Fortran基础--Fortran模块化编程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

06-Fortran基础--Fortran模块化编程

    • 1 模块的定义和使用
    • 2 接口和模块间通信
    • 3 模块化编程的优势:
    • 4 模块使用示例
    • 5 结语


  Fortran的模块化编程是一种组织和管理代码的方法,它包括模块的定义和使用、接口和模块间通信以及模块化编程的优势。

1 模块的定义和使用

  1.1模块定义: 使用MODULE关键字创建模块,并在其中定义变量、子程序和其他对象。

MODULE my_moduleIMPLICIT NONEINTEGER :: var1REAL :: var2CONTAINSSUBROUTINE my_subroutine()! ...END SUBROUTINE my_subroutine
END MODULE my_module

  1.2 模块使用: 在主程序或其他模块中使用USE语句引用模块,并访问其中定义的变量和子程序。

PROGRAM main_programUSE my_moduleIMPLICIT NONEvar1 = 10var2 = 3.14CALL my_subroutine()
END PROGRAM main_program

2 接口和模块间通信

  2.1 接口: 可以在模块中定义接口来规定子程序的输入、输出参数和返回值,以提高代码的可读性和安全性。

MODULE my_moduleINTERFACESUBROUTINE my_subroutine(input_var, output_var)REAL, INTENT(IN) :: input_varREAL, INTENT(OUT) :: output_varEND SUBROUTINE my_subroutineEND INTERFACE
END MODULE my_module

  2.2 模块间通信: 模块间通信可以通过在模块中定义共享的变量、使用USE语句引用其他模块来实现。

3 模块化编程的优势:

  • 可读性: 模块化编程使得代码结构更清晰,易于理解和阅读。
  • 可维护性: 将代码分成模块,使得修改和更新变得更加简单和安全。
  • 封装性: 模块可以包含私有成员,限制了对模块内部的访问,提高了代码的封装性和安全性。
  • 重用性: 模块化编程使得代码中的模块可以在不同的项目中被重复使用,提高了代码的可重用性。
  • 避免命名冲突: 模块化编程可以避免全局命名空间的污染和命名冲突,增强了代码的健壮性。

4 模块使用示例

  假设有一个模块文件 my_module.f90:

module my_moduleimplicit noneprivate ! module下所有定义啊变量、函数都默认私有属性(也就是仅能在本模块使用)public :: cal_pi ! 声明下面的方法公有(表明可以被外部调用)public :: my! 模块类(将module下同属一个类下的方法进行合并)type :: my_typecontainsprocedure,nopass :: cal_piprocedure,nopass :: cal_areaend type my_typetype(my_type) :: mycontains! 计算pifunction cal_pi()result(res) ! 模块方法1implicit nonereal(8) :: resres = 4.d0 * atan(1.d0)end function cal_pi! 计算面积function cal_area(v,h)result(res) ! 模块方法2implicit nonereal(8),intent(in) :: v,hreal(8) :: resres = v*hend function cal_areaend module my_module

  然后,在主程序文件 main_program.f90 中使用这个模块:

program test_moduleimplicit noneuse my_moduleprint *,"计算pi",cal_pi() ! cal_pi是public属性,可以被直接调用print *,"计算矩形面积",my%cal_area(5.d0,4.d0) ! cal_area定义在my下面,没有Public属性,只能通过“my%”这种方式调用end program 

运行结果:

5 结语

  上面简单介绍了Fortran Module的使用,掌握Module的基础知识对后续的面向对象编程有益处,后续如果想到有其他的有关知识或内容会在此基础上进行补充。

这篇关于06-Fortran基础--Fortran模块化编程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/983258

相关文章

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门