Rôle des types structurés (Classe) QTLMap

def:
type structuré : contient seulement des données membres
classe : contient des données et fonctions membres.

Par abus de languages, j'utilise le terme "type structuré" partout.

Les types structurés permettent d'organiser les structures de bases (tableaux d'entier,...) entre elles et apporte de la sémantique.
exemple : le tableau nmp appartient au type GENEALOGY_BASE. Sans savoir le rôle de ce tableau, on sait qu'il intervient dans l'organisation familiale qu'utilise QTLMap.

L'utilisation de types structurés permet également de diminuer l'appel des paramètres des fonctions et de diminuer l'utilisation de variables globales.
Exemple:

Pour parcourir une génealogie dans une ancienne version de QTLMap, un fonction devait prendre en paramètre d'appel :
  • ngp,nrgm,np,nmp,ndm,...
    subroutine maroutine(ngp,nrgm,np,nmp,ndm,...)
      integer ,intent(in)  :: ngp
      ...
    

il était donc plus simple de mettre en variable globale ces tableaux mais on perdait en sémantique (que contient ndm ?) plus les autres raisons pour ne pas utiliser de variables globales dans un programme.

Dans la version QTLMap-Types, le prototype de la fonction serait :

subroutine maroutine(genealogy)
  type(GENEALOGY_BASE) ,intent(in)  :: genealogy

  do ip=1,genealogy%np
   ...
  end do

La version actuelle de QTLMap permet donc de fabriquer un "super type" QTLMAP_DATASET contenant l'ensemble des informations utilisateurs (fichiers, paramètres, ligne de commande) et de passer en paramètre
l'objet de ce type nommé par convention dans les sources dataset

Pour éviter d'écrire des nom de variables trop longs, nous pouvons utiliser des pointeurs.
Exemple

 subroutine myroutine(dataset)
        type(QTLMAP_DATASET) ,target      ,intent(in)           :: dataset

        type(GENEALOGY_BASE) , pointer :: dg
        type(GENEALOGY_RACE) , pointer :: dgr

        dg => dataset%genea
        dgr => dataset%geneaRace

        do ip=1,dg%np
         ...
        end do

Exemple

voici un schéma qui montre :
  • la création de l'objet dataset à partir du package INPUT et des fichiers utilisateurs
  • la création d'un objet spt à partir du package HAPLOTYPE
  • l'utilisation des objets dataset et spt par le package ANALYSE pour créer les objets lrtsol et incsol
  • l'utilisation d'un objet shp à chaque position pour les analyses LD et LDLA

Role_des_objets_types.png (59,458 ko) Olivier Filangi, 23/01/2013 18:01

Role_des_objets_types.odg (17,782 ko) Olivier Filangi, 23/01/2013 18:01