24.07.2013 Views

Capítulo 8. Funções e Subrotinas - UFMG

Capítulo 8. Funções e Subrotinas - UFMG

Capítulo 8. Funções e Subrotinas - UFMG

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

TEMP= A<br />

A= B<br />

B= TEMP<br />

RETURN<br />

END SUBROUTINE TROCA<br />

<strong>Capítulo</strong> <strong>8.</strong> Sub-Programas e Módulos 109<br />

chamar esta subrotina com um argumento escalar e um matricial está obviamente errado, uma vez que o<br />

mecanismo de distribuir o valor da variável escalar por uma matriz conformável com o outro argumento não<br />

pode ser aplicado aqui.<br />

Se a referência a uma rotina genérica (seção <strong>8.</strong>3.4) é consistente tanto com uma rotina elemental quanto com<br />

uma não-elemental, a segunda versão é invocada, pois espera-se que a versão elemental de uma rotina rode, em<br />

geral, mais lentamente.<br />

Finalmente, uma rotina elemental não pode ser usada como um argumento real de outra rotina.<br />

<strong>8.</strong>3 Módulos<br />

Uma das novidades mais importantes introduzidas pelo Fortran 90 é um novo tipo de unidade de programa<br />

denominada módulo. Um módulo é um recurso muito poderoso para transferir dados entre sub-programas e<br />

para organizar a arquitetura global de um programa grande e complexo.<br />

A funcionalidade de um módulo pode ser explorada por qualquer unidade de programa que deseja fazer uso<br />

(através de uma instrução USE) dos recursos disponibilizados por este. Os recursos que podem ser incluídos em<br />

um módulo são os seguintes:<br />

Declaração de objetos globais. Módulos devem ser empregados no lugar das declarações COMMON e INCLUDE,<br />

comuns no Fortran 77. Se dados globais são necessários, por exemplo para transferir valores entre rotinas,<br />

então estes são são tornados visíveis sempre que o módulo é usado. Objetos em um módulo podem ser<br />

inicializados com valores estáticos, de tal forma que estes mantêm seu valor em diferentes unidades que<br />

usam o mesmo módulo.<br />

Blocos de interfaces. Na maior parte das situações é vantajoso congregar todos os blocos de interfaces em<br />

um ou poucos módulos e então usar o módulo sempre que uma interface explícita é necessária. Isto pode<br />

realizado em conjunto com a cláusula ONLY.<br />

Rotinas de módulos. Rotinas podem ser definidas internamente em um módulo, sendo estas tornadas acessíveis<br />

a qualquer unidade de programa que USE o módulo. Esta estratégia é mais vantajosa que usar uma<br />

rotina externa porque em um módulo a interface das rotinas internas é sempre explícita.<br />

Acesso controlado a objetos. Variáveis, rotinas e declarações de operadores podem ter a sua visibilidade<br />

controlada por declarações ou atributos de acesso dentro de um módulo. Desta forma, é possível especificar<br />

que um determinado objeto seja visível somente no interior do módulo. Este recurso é freqüentemente<br />

utilizado para impedir que um usuário possa alterar o valor de um objeto de âmbito puramente interno<br />

ao módulo.<br />

Interfaces genéricas. Um módulo pode ser usado para definir um nome genérico para um conjunto de rotinas,<br />

com interfaces distintas, mas que executem todas a mesma função. Interfaces genéricas podem ser usadas<br />

também para estender a funcionalidade de rotinas intrínsecas.<br />

Sobrecarga de operadores. Um módulo pode ser usado também para redefinir a operação executada pelos<br />

operadores intrínsecos da linguagem (= + - * / **) ou para definir novos tipos de operadores.<br />

Extensão semântica. Um módulo de extensão semântica é uma coleção de definições de tipos derivados,<br />

rotinas e operadores sobrecarregados tais que, quando agregados a uma unidade de programa, permitem<br />

que o usuário use esta funcionalidade estendida como se fizesse parte da linguagem padrão.<br />

A forma geral de um módulo é:<br />

MODULE <br />

<br />

<br />

[CONTAINS<br />

]<br />

END [MODULE []]<br />

Autor: Rudi Gaelzer – IFM/UFPel Impresso: 23 de abril de 2008

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!