webpage icon indicating copy to clipboard operation
webpage copied to clipboard

Design Patterns

Open ivan-pi opened this issue 1 year ago • 0 comments

I think it would be interesting to have a tutorial on design patterns in Fortran.

Previously, I've written about the following patterns on Fortran Discourse:

  • Bridge: https://fortran-lang.discourse.group/t/hiding-implementation-details-the-bridge-pattern/7833
  • Prototype: https://fortran-lang.discourse.group/t/questions-about-derived-type-intrinsic-assignment/8340/17
  • Type Erasure: https://fortran-lang.discourse.group/t/attempting-type-erasure-in-fortran/4402
  • Strategy: https://fortran-lang.discourse.group/t/is-creating-nested-subroutines-functions-considered-good-practice-in-fortran/6545/21?u=ivanpribec

The book Scientific Software Design by @rouson , Xia and Xu, introduces the following patterns:

  • Object
  • Abstract Calculus (a great example can be found on Discourse too)
  • Strategy and Surrogate
  • Puppeteer
  • Factory

There are other works too (although some are outdated with appearance of F2003 and later constructs):

  • Decyk, V. K., & Gardner, H. J. (2008). Object-oriented design patterns in Fortran 90/95: mazev1, mazev2 and mazev3. Computer Physics Communications, 178(8), 611-620. https://doi.org/10.1016/j.cpc.2007.11.013
  • Markus, A. (2008, November). Design patterns and Fortran 2003. In ACM SIGPLAN Fortran Forum (Vol. 27, No. 3, pp. 2-15). New York, NY, USA: ACM. https://doi.org/10.1145/1462614.1462615 (cc @arjenmarkus)
  • Rouson, D. W., Xia, J., & Xu, X. (2010). Object construction and destruction design patterns in fortran 2003. Procedia Computer Science, 1(1), 1495-1504. https://doi.org/10.1016/j.cpc.2007.11.013
  • Gorelik, A. M. (2004). Object-oriented programming in modern Fortran. Programming and Computer Software, 30, 173-179. https://doi.org/10.1023/B:PACS.0000029582.33766.ba
  • Morris, K. (2015). Emulating Multiple Inheritance in Fortran 2003/2008. Scientific Programming, 2015(1), 126069. https://doi.org/10.1155/2015/126069

ivan-pi avatar Jul 16 '24 16:07 ivan-pi