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 :

C++, VTK et ondes électromagnétiques


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut C++, VTK et ondes électromagnétiques
    Bonjour,

    Après quelques années sans coder en C/C++, je m'y remets pour programmer une animation de champs de vecteurs électromagnétiques (et comme c'est pour l'armée, je ne peux pas vous en dire plus...)

    Quelques conseils ?
    En surfant, j'ai vu qu'avec std:: on peut éviter de désallouer à la main ?
    Comme moteur 3D, j'ai prévu VTK, qui a l'air adapté aux animations scientifiques.
    Et boost a l'air intéressant aussi. Apparemment, les fonctions sont en cours d'étude : à éviter ?

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,
    Citation Envoyé par thomb Voir le message
    Bonjour,

    Après quelques années sans coder en C/C++, je m'y remets pour programmer une animation de champs de vecteurs électromagnétiques (et comme c'est pour l'armée, je ne peux pas vous en dire plus...)

    Quelques conseils ?
    Oui:
    • teste tout plutôt deux fois qu'une
    • Mets, dés le départ, une politique de tests unitaire en place
    • sépare bien les différents aspects (métiers et vue)
    • utilises les pointeurs intelligents (std::unique_ptr ou le couple std::shared_ptr + std::weak_ptr) quand tu dois effectivement avoir recours à l'allocation dynamique de la mémoire
    • Si tu dois absolument avoir recours aux pointeurs (intelligents, bien sur), choisi en priorité les std::unique_ptr, avec un propriétaire unique et transmet l'élément pointé en interne sous forme de référence (de préférence constante, si possible)
    • Veilles à respecter la const-correctness
    • Tant d'autres auxquels je ne penses forcément dans l'immédiat

    En surfant, j'ai vu qu'avec std:: on peut éviter de désallouer à la main ?
    C'est surtout que l'on fait tout pour éviter d'avoir recours à l'allocation dynamique de la mémoire. Les différentes fonctionnalités (std::string, collections et autres) s'occupent parfaitement de gérer cet aspect quand il est nécessaire en interne.

    Le seul cas dans lequel on aura recours à l'allocation dynamique (agrémentée de pointeurs intelligents, bien sur) sera sans doute une situation dans laquelle il faudra avoir recours à la substituabilité et au polymorphisme, en étant en mesure de maintenir une collection d'objets "passant pour être du type de base".

    Comme moteur 3D, j'ai prévu VTK, qui a l'air adapté aux animations scientifiques.
    Je ne l'ai jamais utilisé personnellement... N'y a-t-il pas des recommandations de la part de l'armée à ce sujet
    Et boost a l'air intéressant aussi. Apparemment, les fonctions sont en cours d'étude : à éviter ?
    Heu, oui, mais non...

    Boost sert, très largement, de "boîte à idées" concernant des fonctionnalités manquantes à la bibliothèque standard (std:, et certaines de ses implémentations (pointeurs intelligents, thread, filesystem, any et bien d'autres que j'oublie sans doute) ont été reprises par la bibliothèque standard, justement, parce qu'elle manquaient et que l'implémentation de boost présentait toutes les caractéristiques nécessaires.

    En cela, il est vrai que la plupart des fonctions proposées sont "en cours d'étude" ... pour un éventuel ajout à la bibliothèque standard

    Bien sur, comme de nombreuses bibliothèques, boost est en développement constant, avec des corrections de bugs (parce qu'il y en a) et des ajouts de fonctionnalités diverses et variées.

    Mais, comme toutes les bibliothèques en développements, la dernière version stable en cours (1.69.0 au moment d'écrire ces lignes) correspond systématiquement à une version de production sur laquelle on peut se fier sans problème.

    C'est d'avantage, comme de nombreuses bibliothèque, du code "en développement" tel qu'on peut le récupérer sur git en récupérant les derniers commits qu'il faut se méfier (et encore) pour une utilisation en production, pour une raison bien simple : c'est le code qui a été le moins testé à ce jour, et certaines modifications apportées peuvent / risquent (malgré tout, bien que le risque reste a priori faible) poser quelques problèmes.
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par koala01 Voir le message
    • Veilles à respecter la const-correctness
    C'est de passer une adresse constante pointant sur un objet constant ?

    Le seul cas dans lequel on aura recours à l'allocation dynamique (agrémentée de pointeurs intelligents, bien sur) sera sans doute une situation dans laquelle il faudra avoir recours à la substituabilité et au polymorphisme, en étant en mesure de maintenir une collection d'objets "passant pour être du type de base".
    A priori, je ne devrais pas avoir besoin de polymorphisme donc les pointeurs intelligents devraient suffire.

    N'y a-t-il pas des recommandations de la part de l'armée à ce sujet
    La rapidité...

    Mais, comme toutes les bibliothèques en développements, la dernière version stable en cours (1.69.0 au moment d'écrire ces lignes) correspond systématiquement à une version de production sur laquelle on peut se fier sans problème.
    Tant mieux, ça a l'air efficace.

    Le livre dans ta signature a l'air de traiter des conseils dont je pourrais avoir besoin.

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Citation Envoyé par thomb Voir le message
    C'est de passer une adresse constante pointant sur un objet constant ?
    C'est, de manière générale, de déclarer constant tout ce qui n'a pas lieu d'être modifié et toutes les fonctions membres qui n'ont pas lieu de modifier l'objet à partir duquel elles sont appelées.

    En outre, l'idéal est de ne travailler avec pointeurs (adresses) que lorsque l'on n'a vraiment pas le choix (par exemple, pour représenter un élément qui peut ne pas exister), et d'utiliser les références (constantes, à chaque fois que possibles) dés que la taille d'un objet excède celle d'un type primitif.


    A priori, je ne devrais pas avoir besoin de polymorphisme donc les pointeurs intelligents devraient suffire.
    tu devrais surtout ne pas avoir besoin des pointeurs, du coup


    La rapidité...
    Rien d'autres

    A priori, j'aurais aussi pensé à tout un cahier de charges, dont la plupart des aspects auraient été tournés vers la qualité
    Tant mieux, ça a l'air efficace.
    Ca l'est, si tu prend la peine de t'assurer de l'utiliser correctement

    Le livre dans ta signature a l'air de traiter des conseils dont je pourrais avoir besoin.
    Loll, oui, en effet

    Mais ces conseils sont d'ordre vraiment général, même si je ne peux que te conseiller la lecture de ce fantastique livre
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par koala01 Voir le message
    C'est, de manière générale, de déclarer constant tout ce qui n'a pas lieu d'être modifié et toutes les fonctions membres qui n'ont pas lieu de modifier l'objet à partir duquel elles sont appelées.

    En outre, l'idéal est de ne travailler avec pointeurs (adresses) que lorsque l'on n'a vraiment pas le choix (par exemple, pour représenter un élément qui peut ne pas exister), et d'utiliser les références (constantes, à chaque fois que possibles) dés que la taille d'un objet excède celle d'un type primitif.


    tu devrais surtout ne pas avoir besoin des pointeurs, du coup
    C'est l'intérêt de l'orienté objet, finalement...

    Citation Envoyé par koala01 Voir le message
    Rien d'autres

    A priori, j'aurais aussi pensé à tout un cahier de charges, dont la plupart des aspects auraient été tournés vers la qualité
    Le projet est en phase d'étude, pas de terrain pour le moment.

    Citation Envoyé par koala01 Voir le message
    Loll, oui, en effet

    Mais ces conseils sont d'ordre vraiment général, même si je ne peux que te conseiller la lecture de ce fantastique livre
    Comme nous disaient les professeurs à l'école : "il faut aller du général au particulier" ! Le livre est commandé à la bibliothèque.

  6. #6
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Citation Envoyé par thomb Voir le message
    C'est l'intérêt de l'orienté objet, finalement...
    Non, l'utilisation de pointeurs n'est en définitive que le résultat d'une certaine approche de l'orienté objets au travers de laquelle on essaye désespérément de créer des objets de manière dynamique (comprend : dont le type réel est déterminer à l'exécution) et de les faire cohabiter avec d'autres objets qui peuvent passer pour être semblables (une maison et un entrepôt, ce sont deux bâtiments, on essayera donc de les faire cohabiter dans une collection de bâtiment).

    Si tu supprimes ce souhait de faire cohabiter les maisons et les entrepôts dans une collection "unique", tu supprimes tout l'intérêt d'utiliser des pointeurs par la même occasion (*) et l'utilisation de références lors du passage d'arguments à tes fonctions est amplement suffisant pour assurer la substituabilité, qui est le principe de base fondamental de l'orienté objets

    (*) j'exagère un peu sur ce coup, car l'une des autres utilisation possible des pointeurs est de permettre la représentation "facile" d'éléments qui peuvent ne pas exister

    Ce n'est pas parce que tu décides de placer les données nécessaires au fonctionnement d'un agrégat dans l'accessibilité privée et de fournir des fonctions qui manipulent ces données dans l'accessibilité publique ou protégée que tu fais de l'orienté objets.

    Tout ce que tu fais en prenant cette décision, c'est d'utiliser les mécanismes offerts par le langage pour permettre une encapsulation efficace.

    Pour réellement profiter de l'avantage de l'orienté objets, tu dois mettre en place les mécanismes permettant la substituabilité

    Mais il faut aussi se rendre compte que la programmation orientée objets est -- certes -- particulièrement intéressante du fait des mécanismes qu'elle met en place, mais que ce n'est pas -- et de très loin -- la panacée.

    Dans bien des cas, lorsque l'on se limite à la seule approche orientée objets, on se retrouve à vouloir "généraliser" beaucoup trop les choses pour -- justement -- pouvoir les réutiliser au maximum. Et cela mène très certainement à de l'over-ingenieering et donc, très souvent, à des problèmes de performances et de maintenabilité du code.

    C'est d'autant plus vrai que C++ l'a bien compris et t'offre, en plus, la possibilité de travailler avec les paradigmes impératif (tu peux créer des fonctions libres) et générique (tu peux créer des fonctions et des structures pour lesquelles tu ignore, lorsque tu en écrit le code, le type de donnée qui sera réellement utilisé, en sachant uniquement "comment les données devront être manipulées").

    Si tu as décidé d'utiliser C++ pour ce projet, applique cette décision jusqu'au bout de ses possibilités, et prend l'habitude de ne pas te restreindre à un seul paradigme. Car aucun paradigme n'est à lui seul la panacée

    Le projet est en phase d'étude, pas de terrain pour le moment.
    Mais à quel point de l'étude est il rendu

    Au point de "j'ai besoin d'une application qui affiche les champs magnétiques" ou au point d'envisager la fourniture d'un POC

    Si le projet n'en est encore qu'au point du "j'ai besoin d'une application qui affiche les champs magnétiques, tu te poses beaucoup trop de questions beaucoup trop tôt, car il faut commencer pas détailler ce besoin et par mettre en place le cahier des charges qui garantira à l'armée d'avoir une application qui propose un haut niveau de qualité et de vitesse

    Comme nous disaient les professeurs à l'école : "il faut aller du général au particulier" ! Le livre est commandé à la bibliothèque.
    Voilà une excellente chose

    Ceci dit, il est peut être juste dommage de le louer dans une bibliothèque, car c'est un livre dans lequel tu pourrais tout aussi bien aller "re-pêcher" quelques rapels de manière régulière tout au long de ta vie professionnelle (comme c'est le cas pour tous les ouvrages techniques, finalement )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Non, l'utilisation de pointeurs n'est en définitive que le résultat d'une certaine approche de l'orienté objets au travers de laquelle on essaye désespérément de créer des objets de manière dynamique (comprend : dont le type réel est déterminer à l'exécution) et de les faire cohabiter avec d'autres objets qui peuvent passer pour être semblables (une maison et un entrepôt, ce sont deux bâtiments, on essayera donc de les faire cohabiter dans une collection de bâtiment).
    Effectivement, je n'en suis pas là...

    Citation Envoyé par koala01 Voir le message
    Mais à quel point de l'étude est il rendu

    Au point de "j'ai besoin d'une application qui affiche les champs magnétiques"
    C'est uniquement pour afficher des cartes de champ.

    Citation Envoyé par koala01 Voir le message
    tu pourrais tout aussi bien aller "re-pêcher" quelques rapels de manière régulière tout au long de ta vie professionnelle
    Tu as raison, le livre me sera plus utile si je l'ai à portée de main

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/08/2007, 11h22
  2. Etude de la propagation d'une onde longitudinale.
    Par wremii dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 20/03/2007, 18h51
  3. Onde triangle - Créneau
    Par .:dev:. dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 19/12/2005, 12h21
  4. forme d'onde d'un fichier sons
    Par glebourg dans le forum DirectX
    Réponses: 1
    Dernier message: 29/06/2005, 18h07
  5. dessiner la forme d'onde d'un fichier audio
    Par cgodefrw dans le forum DirectX
    Réponses: 7
    Dernier message: 26/06/2005, 08h40

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