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

C++ Discussion :

problème de conception en c++


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Par défaut problème de conception en c++
    J'essai de concevoir une structure qui me permettrait de gérer les informations contenues sur des formulaires.
    Je peux avoir plusieurs formulaires ex.: F01, f02, etc. et chacun d'eux contiennent des infos (float) qui sont
    consignées sur des lignes numérotées (Ligne1, ligne2, etc).

    Je peux créer une classe 'formulaire' qui contient une std::Map<int,float> qui peut contenir pour chaque
    ligne (int) le montant (float) qui lui est relié. Je peux intégrer à cette classe des fonctions 'get' et
    'set' qui me permettraient d'enregistrer et de récuperer les infos.
    Je peux par exemple écrire :

    formulaire F1;
    float valeur;
    .
    . //calcul de la variable valeur

    F1.SetLigne(1, valeur); //set la ligne 1 en lui attribuant 'valeur'
    .
    .
    float x = F1.getLigne(1); //récupere la valeur de la ligne 1 ailleurs dans le code.

    Jusque là pas de problème. Mon problème de conception commence ici: à chaque année les formulaires sont modifiés
    et des lignes sont ajoutées ou supprimées. Ainsi, si pour le formulaire F1 une ligne est ajoutée avant la
    ligne 1, la ligne 1 devient la ligne 2 et ainsi de suite pour les lignes suivantes.
    Je dois donc changer la ligne de code :

    F1.SetLigne(1, valeur); devient F1.SetLigne(2, valeur);

    Avec cette approche, je suis obligé de changer toutes les références (et il y en a beaucoup!) à la ligne 1 du formulaires F1.

    float x = F1.getLigne(1); devient float x = F1.getLigne(2);

    Je cherche donc à trouver une implémentation qui me permettrait de ne changer que la ligne 'set' et que la fonction 'get'
    soit conçue pour aller chercher l'info de la bonne ligne automatiquement...

    Toutes les idées sont bienvenues! J'ai beau y réfléchir et je ne vois pas...
    NB: je programme en c++ avec visual studio 2005 framework 2.0

  2. #2
    Membre chevronné
    Avatar de NewbiZ
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2002
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2002
    Messages : 184
    Par défaut
    Lorsque tu as des données, l'important est de trouver un moyen pratique, et unique, de les identifier.
    Clairement dans ton cas, le numéro de ligne ne convient pas:
    Ce ne sont pas les données de la ligne 1 que tu cherches réellement, ce sont des données qui se trouvent actuellement en 1.

    Il faut que tu détermines un identifiant pour tes données:
    - Soit directement injecté: Tu ajoutes un ID en début de chaque ligne par exemple;
    - Soit calculé à partir des données, si tu peux extraire un identifiant unique à partir des données d'une ligne.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Par défaut
    merci pour la réponse NewbiZ,

    Tu as tout à fait raison quand tu suggères d'utiliser des identifiants pour décrire chacune des lignes. Par contre je dois spécifier qu'il s'agit d'un logiciel de plusieurs millers de lignes de code où il y a des calculs financiers souvent très complexe. De plus il y a une multitude de transferts d'info. entre les formulaires. Si je choisis des identifiants peu descriptifs je me retrouverais avec du code de ce genre :

    if (F1.getID(id0001) > F34.getID(id1034) {
    F23.setID(id0233) = x * min(F81.getID(id6541), F81.getID(id6542));
    }

    En ajoutant des centaines de lignes de code de ce genre pour chacun des formulaires (une centaine environ) on voit vite que le code sera très difficile à comprendre et à maintenir (les formulaires change à chaque année).

    D'un autre côté pour que les identifiants soient plus descriptifs je me retrouverais avec du code de ce genre :

    if (F1.getID("Valeur actuelle nette des achats en immobilisations admissibles-année précédente) > F34.getID(Valeur actuelle nette des achats en immobilisations admissibles-année courante) {
    F23.setID(montant admissible à la déduction) = x * min(F81.getID(taux d'intérêts normalisé), F81.getID(taux d'intérêts marginal annualisé));
    }

    Ce genre de code deviendrait également très lourd (en tous cas ce serait long à écrire... Je te rappele qu'il y a des millers de ligne de codes de ce genre dans ce logiciel)

    Ces pour cette raison que je tente de trouver un identifiant qui est court mais qui peut être descriptif à la fois. Les numéros de lignes seraient parfais pour cette situation car lorsque je programme un formulaire j'ai une copie de celui ci près de moi et je peux facilement savoir à quoi fait référence chacun des numéro de lignes..

    Je me demande s'il n'y aurait pas une façon de faire en utilisant une sorte de tableau de mappage du genre:

    //mappage du formulaire F1
    Ligne1 = "Valeur actuelle nette des achats en immobilisations admissibles-année précédente"
    ..
    //mappage du formulaire F34
    Ligne1010 = "Valeur actuelle nette des achats en immobilisations admissibles-année courante"
    etc.


    De cette façon je n'aurais qu'à changer le tableau de mappage lorsque les lignes d'un formulaire changes ex:

    //mappage du formulaire F1
    Ligne1 = "nouvelle ligne ajoutée cette année"
    Ligne2 = "Valeur actuelle nette des achats en immobilisations admissibles-année précédente"

    Par contre je ne vois pas comment utiliser cette approche pour avoir un code qui serait à la fois succinct, descriptifs et pour lequel je n'aurais qu'à changer la table de mappage lorsqu'un ligne est ajoutée.

    je continue à réfléchir au problème et merci encore pour ton aide

  4. #4
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Citation Envoyé par fleg666 Voir le message

    Mon problème de conception commence ici: à chaque année les formulaires sont modifiés
    et des lignes sont ajoutées ou supprimées. Ainsi, si pour le formulaire F1 une ligne est ajoutée avant la
    ligne 1, la ligne 1 devient la ligne 2 et ainsi de suite pour les lignes suivantes.
    Bonjour.

    Quel serait le problème à réinitialiser ta map lorsque les données sont changées. Tu dis "à chaque année", si je comprends bien c'est une fois par an ?

    Tu as trouvé une méthode simple d'accés aux données et pour une modification annuelle, tu risques de modifier l'architecture par quelques choses dont toi-même tu n'es pas satisfait.

    Ma question est : quel est le problème à réinitialiser ta map avec les nouvelles valeurs de ligne ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Par défaut
    bonjour moldavi,

    Tout d'abord merci pour ta réponse.
    Alors concernant ta question, le problème est que j'ai en fait environ une centaine de formulaires à gérer et que sur chaque formulaire il peu y avoir jusqu'à 200 lignes d'informations financières. De plus il ya a une multitude de transfert d'info entre les formulaires. Alors lorsqu'un formulaire change (des lignes sont ajoutées ou effacées) alors je dois passer en revue l'ensemble des formulaires qui font référence à une ou des lignes du formulaires que je met à jour actuellement. De plus il y a un effet domino puisque le fait d'ajouter une ligne modifie toute les lignes suivantes du formulaire (si j'ajoute une ligne entre la ligne 100 et la ligne 101 du formulaire F10, toutes les lignes suivantes sont incrémentées également). Je dois donc passer en revu toutes les autres formulaires qui accèdent à la ligne 101 et les suivantes du formulaire F10. Sa devient très lourd à gérer et peu facilement engendrer des erreurs de calculs. Donc le fait de modifier un formulaire m'oblige à modifier les autres formulaires également puisque si ailleurs dans le code je tente par exemple de récupérer l'info. sur la ligne 125 du formulaire F10, (F10.getline(125) et bien l'info. recherché est maintenant sur la ligne 126.
    C'est pourquoi je cherche une méthode qui me permettrait de ne changer qu'une fois l'info. et que le reste des calculs suivent automatiquement.

    En fait je sais que newBiz a raison en suggérant de créer un identifiant pour chaque ligne au lieu d'utiliser les numéro de lignes. Par contre comme il y un grand nombre de lignes et un grand nombre de formulaires, je me retrouverais avec un code difficile à lire puisqu'il y aurait un grand nombre d'identifiants. De plus, dans bien des cas il serait dificile de trouver un identifiant avec un nom significatif puisque souvent les lignes ont des descriptions très longues du genre :
    Ligne 100 : Valeur actuelle nette des achats en immobilisations admissibles-année courante sans tenir compte des immeuble locatif acheté avant 31 déc. 1988
    Ligne 101 : Valeur actuelle nette des achats en immobilisations admissibles-année courante incluant les immeuble locatif acheté avant 31 déc. 1988

    Avec des centaines de lignes avec des descriptifs tout aussi charmant les uns que les autres (et souvent plus long encore) , il serait difficile de trouver des identifiants court et pertinent. D'où mon 'obession' pour l'utilisation des numéro de lignes.

    Alors je continue de réfléchir au problème et merci encore.

  6. #6
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Re.

    Ok c'est lourdingue, sûrement, mais ça sert à ça les processeurs. Encore qu'incrémenter les lignes d'un tableau et mettre à jour les autres formulaires, ça ne ressort pas d'une algorithmie très élaborée.

    Sinon pour les identifiants uniques de lignes, tu as les GUID (sous windows), la date de création (avec les millisecondes ou le temps processeur), après je ne vois pas trop.

    Mais bon, après, tu risques d'être pénalisé, parce que pour récupérer la valeur d'une ligne, tu vas devoir parcourir tout le formulaire à la recherche de ton identifiant. Avec les numéros de ligne, j'imagine que tu accèdes directement à la donnée, ou alors va falloir jouer de la ruse et stocker le numéro de ligne la première fois que tu accèdes à l'identifiant pour ensuite ne vérifier que si l'ID est bon, et mettre à jour la ligne si celle-ci change.

    Bref, ce que tu gagnes d'un côté tu vas le perdre de l'autre. Il faudrait savoir si ton application passe plus de temps à supprimer des lignes ou à accéder à des lignes. Personnellement, selon la réponse, mon choix serait vite fait.

Discussions similaires

  1. Méthode Finalize et problème de conception
    Par phryos dans le forum Langage
    Réponses: 4
    Dernier message: 19/04/2006, 11h04
  2. [VB6][UserControl et OCX]Problème de conception
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 19/01/2006, 22h37
  3. Petit problème de conception sur access
    Par coooookinette dans le forum Modélisation
    Réponses: 3
    Dernier message: 18/12/2005, 18h24
  4. Gestion des départements problème de conception
    Par snoopy69 dans le forum Modélisation
    Réponses: 7
    Dernier message: 11/10/2005, 13h08
  5. Problème de conceptions de tables
    Par dtavan dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/05/2004, 23h13

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