In che modo la programmazione orientata ai moduli in Fortran differisce dalla programmazione orientata agli oggetti?

Un oggetto in un linguaggio orientato agli oggetti rende molto facile trovare le operazioni che hanno senso agire sui suoi dati. Un modulo definisce operazioni e strutture di dati, ma non le lega automaticamente.

Conseguenza: per poter utilizzare una struttura dati da un modulo, è necessario conoscere il modulo specifico a cui appartiene. Nella programmazione orientata agli oggetti non è necessario sapere da dove proviene un oggetto per poter chiamare operazioni su di esso, purché si sappia (ad esempio dal contesto) che l’operazione è definita: L’operazione orientata agli oggetti “a.printYourself” sull’oggetto “a” funzionerà correttamente sia che si tratti di un indirizzo o di una fattura. Basato sul modulo, chiamare la subroutine printIt dal modulo “bill” su un indirizzo ha effetti disastrosi.

Un effetto importante è che esiste una migliore indipendenza tra le implementazioni di classi diverse nella programmazione orientata agli oggetti rispetto a moduli diversi. Questo aiuta a riusabilità.

Come risposta di Rob Hooft a In cosa differisce la programmazione orientata al modulo in Fortran dalla programmazione orientata agli oggetti? sottolinea, i dati e le funzioni in un modulo non necessariamente appartengono insieme.

Fortran ha una programmazione orientata agli oggetti, ma ciò avviene attraverso l’uso di TYPE. Dal momento che un TYPE è abbastanza vicino a una “struttura” C che in realtà ha senso. Scrivi un TIPO CHE CONTIENE una funzione. Se quella funzione ha un primo argomento definito come Classe, non Tipo, passerà il Tipo come argomento.

  Digitare foo
   intero :: j
 contiene
 barra della subroutine (f, i)
 classe (foo) :: f
 intero :: i
 stampa *, i + j
 End Type foo

 Tipo (foo) :: myfoo

 chiama myfoo.bar (5)

Vedi come viene definita la funzione con due argomenti ma chiamata con uno? È un po ‘come l’argomento “auto” di Python.