IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Typage dynamique des attributs


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par défaut Typage dynamique des attributs
    Bonjour,

    je souhaite créer un noyau d'algèbre linéaire permettant de traiter différents types de matrices (pleines, creuses, structurées).

    J'ai d'abord créé 3 classes (génériques) pour la gestion de tableaux :
    1. Array (classe abstraite)
    2. Array1D (hérite de Array)
    3. Array2D (hérite de Array)
    Un objet Array1D est un tableau unidimensionnel et un objet Array2D est un tableau bidimensionnel.

    J'ai ensuite créé une classe abstraite Matrix ayant pour attribut un pointeur sur Array (Array* _nzval). Le champ _nzval est destiné à contenir les valeurs non nulles de la matrice.

    De cette classe vont dériver toutes les autres classes de matrices :
    1. FullMatrix (matrice pleine)
    2. DiagonalMatrix (matrice diagonale)
    3. etc

    Dans le cas classique d'une matrice pleine, je vais construire _nzval en appelant un constructeur de Array2D :
    _nzval = new Array2D(...);
    Mais il peut arriver que _nzval soit un tableau unidimensionnel. Par exemple, pour une matrice diagonale, je ferais l'allocation
    _nzval = new Array1D(...);

    Ma question est la suivante. Comment faire pour appeler les méthodes de Array1D ou Array2D (selon les cas) alors que le compilateur voit _nzval comme un simple Array*? Faut-il absolument faire un transtypage explicite? Si oui, cela a-t-il des conséquences sur les performances?

    Si vous pensez que mon problème vient d'une mauvaise structuration de mes données n'hésitez pas à me le dire.

    Merci d'avance pour votre aide.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    Il me semble que le problème à l'origine est d'avoir choisi l'héritage pour une variation d'implémentation qui ressemblerait plus à une stratégie (voir DP Stratégie). Ce devrait plutôt passer par une politique générique ou au moins une composition sur la stratégie d'allocation (cf Blitz++)

  3. #3
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par défaut
    Merci pour ta réponse 3DArchi.

    Je vais regarder ce qui est fait dans la classe Array de Blitz parce que je ne vois pas comment les classes de trait ou de politique solutionnent mon problème même en relisant le lien vers la faq plusieurs fois.

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    L'idée c'est d'avoir une stratégie de stockage des éléments paramétrable. Soit tu fais ça dynamiquement (il me semble avoir compris que c'est ce que fait Blitz mais j'ai pu mal comprendre). Soit tu le fais statiquement (comprendre décider à la compilation) et là tu peux alors le faire par une politique (générique). Mais l'approche dynamique est peut être plus pertinente puisque les opérations sur les matrices peuvent changer la propriété (symétrie, diagonale, etc.) qui te permet d'optimiser le stockage.

  5. #5
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par défaut
    Mais l'approche dynamique est peut être plus pertinente puisque les opérations sur les matrices peuvent changer la propriété (symétrie, diagonale, etc.) qui te permet d'optimiser le stockage.
    Non non, je ne vais pas faire d'opérations pouvant changer la propriété de mes objets. Je vais tenter de passer par une politique. Je mettrai un nouveau message pour validation.

    Merci!

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/06/2010, 11h08
  2. Réponses: 2
    Dernier message: 19/03/2009, 15h53
  3. Typage des attributs : contextuel ou non contextuel ?
    Par Hibou57 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 20/09/2007, 14h53
  4. Inserer dynamiquement des champs input avec attribut
    Par titou250 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/01/2007, 09h44
  5. [Débat] Que pensez-vous des langages à typage dynamique?
    Par Eusebius dans le forum Langages de programmation
    Réponses: 14
    Dernier message: 16/06/2004, 12h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo