En aquest mòdul, explorarem els mòduls i les interfícies en Fortran, que són eines poderoses per organitzar i modularitzar el codi. Els mòduls permeten agrupar dades i subrutines relacionades, mentre que les interfícies proporcionen una manera de definir com es poden cridar les subrutines i funcions.
Continguts
Introducció als Mòduls
Els mòduls en Fortran són blocs de codi que poden contenir dades, subrutines, funcions i altres mòduls. Són útils per organitzar el codi en components reutilitzables i per compartir dades entre diferents parts del programa.
Beneficis dels Mòduls
- Reutilització del Codi: Permeten agrupar funcionalitats relacionades que es poden reutilitzar en diferents parts del programa.
- Encapsulació: Permeten ocultar la implementació interna i exposar només les interfícies necessàries.
- Mantenibilitat: Faciliten la gestió i l'actualització del codi.
Creació i Ús de Mòduls
Definició d'un Mòdul
Un mòdul es defineix amb la paraula clau module
i es tanca amb end module
. Aquí teniu un exemple bàsic:
module math_operations implicit none contains function add(a, b) integer :: add integer, intent(in) :: a, b add = a + b end function add function subtract(a, b) integer :: subtract integer, intent(in) :: a, b subtract = a - b end function subtract end module math_operations
Ús d'un Mòdul
Per utilitzar un mòdul en un programa o en un altre mòdul, es fa servir la paraula clau use
:
program main use math_operations implicit none integer :: result result = add(5, 3) print *, "5 + 3 =", result result = subtract(5, 3) print *, "5 - 3 =", result end program main
Interfícies
Les interfícies en Fortran permeten definir com es poden cridar les subrutines i funcions. Això és especialment útil per a subrutines i funcions externes o per a sobrecarregar operadors.
Definició d'una Interfície
Una interfície es defineix amb la paraula clau interface
i es tanca amb end interface
. Aquí teniu un exemple:
module math_operations implicit none interface function add(a, b) integer :: add integer, intent(in) :: a, b end function add function subtract(a, b) integer :: subtract integer, intent(in) :: a, b end function subtract end interface end module math_operations
Ús d'una Interfície
Les interfícies es poden utilitzar per definir subrutines i funcions externes o per sobrecarregar operadors. Aquí teniu un exemple de sobrecàrrega d'operadors:
module math_operations implicit none interface operator(+) function add(a, b) integer :: add integer, intent(in) :: a, b end function add end interface contains function add(a, b) integer :: add integer, intent(in) :: a, b add = a + b end function add end module math_operations
Exemples Pràctics
Exemple 1: Mòdul amb Funcions Matemàtiques
module math_operations implicit none contains function add(a, b) integer :: add integer, intent(in) :: a, b add = a + b end function add function subtract(a, b) integer :: subtract integer, intent(in) :: a, b subtract = a - b end function subtract end module math_operations program main use math_operations implicit none integer :: result result = add(10, 5) print *, "10 + 5 =", result result = subtract(10, 5) print *, "10 - 5 =", result end program main
Exemple 2: Interfície per a Funcions Externes
module external_functions implicit none interface function external_add(a, b) integer :: external_add integer, intent(in) :: a, b end function external_add end interface end module external_functions program main use external_functions implicit none integer :: result result = external_add(7, 3) print *, "7 + 3 =", result end program main
Exercicis
Exercici 1: Crear un Mòdul
Descripció: Crea un mòdul anomenat geometry
que contingui funcions per calcular l'àrea d'un cercle i d'un rectangle.
Solució:
module geometry implicit none contains function circle_area(radius) real :: circle_area real, intent(in) :: radius circle_area = 3.14159 * radius * radius end function circle_area function rectangle_area(length, width) real :: rectangle_area real, intent(in) :: length, width rectangle_area = length * width end function rectangle_area end module geometry program main use geometry implicit none real :: area area = circle_area(5.0) print *, "Area of circle with radius 5.0 =", area area = rectangle_area(4.0, 6.0) print *, "Area of rectangle with length 4.0 and width 6.0 =", area end program main
Exercici 2: Crear una Interfície
Descripció: Crea una interfície per a una funció externa que calculi el producte de dos nombres enters.
Solució:
module external_functions implicit none interface function external_multiply(a, b) integer :: external_multiply integer, intent(in) :: a, b end function external_multiply end interface end module external_functions program main use external_functions implicit none integer :: result result = external_multiply(4, 5) print *, "4 * 5 =", result end program main
Conclusió
En aquest mòdul, hem après sobre els mòduls i les interfícies en Fortran. Els mòduls ens permeten organitzar el codi en components reutilitzables, mentre que les interfícies ens ajuden a definir com es poden cridar les subrutines i funcions. Hem vist exemples pràctics i hem realitzat exercicis per reforçar els conceptes apresos. En el proper mòdul, explorarem la sobrecàrrega d'operadors i altres temes avançats.
Curs de Programació en Fortran
Mòdul 1: Introducció a Fortran
- Introducció a Fortran
- Configuració de l'Entorn de Desenvolupament
- Sintaxi i Estructura Bàsiques
- Escrivint el teu Primer Programa en Fortran
Mòdul 2: Conceptes Bàsics
- Variables i Tipus de Dades
- Operadors i Expressions
- Entrada i Sortida
- Estructures de Control: Sentències If
- Estructures de Control: Bucles
Mòdul 3: Arrays i Cadenes
Mòdul 4: Procediments i Funcions
Mòdul 5: Estructures de Dades Avançades
Mòdul 6: Gestió de Fitxers
Mòdul 7: Temes Avançats
Mòdul 8: Millors Pràctiques i Optimització
- Tècniques d'Optimització de Codi
- Depuració i Perfilat
- Escrivint Codi Mantenible
- Estàndards i Portabilitat de Fortran