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 :

Pointeurs / Références / Héritages -> besoin de précisions


Sujet :

C++

  1. #21
    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 LittleWhite Voir le message
    Je suis peut être un peu lourd, mais comme je suis assez nouveau sur les sémantiques de classes, je voudrais savoir quelle était votre méthode pour savoir si votre classe à une sémantique d'entité ou de valeur. (Genre une question magique que l'on peut se poser pour résoudre le doute).
    J'aurais tendance à dire :
    La classe que je m'apprête à créer a-t-elle vocation à se trouver dans une hiérarchie d'héritage ou non
    ou
    La classe que je m'apprête à créer se caractérise-t-elle par les valeurs qui la représente ou par les comportement que l'on en attend
    En effet, si une classe a vocation à se retrouver dans une hiérarchie de classe ou si elle est caractérisée plus par ses comportements que par les valeurs qui la composent, elle aura sémantique d'entité, étant donné que ce qui importe, ce n'est pas la valeur qu'elle représente mais bel et bien les comportements que l'on en attend

    Car, récemment, j'ai utilisé une classe Map (une carte 2D pour un jeu de tuiles) qui contient deux std::vector, un pour les tuiles, un pour les unités.
    Mon problème, c'est que l'on pourrait chercher à redéfinir l'opérateur == que cela fonctionnerai. (Mais pas les autres opérateurs, comme désigné dans la FAQ).
    Donc j'imagine que cela prendra une sémantique d'entité, mais je ne suis pas sur à 100%
    Effectivement, ta classe Map prendra sémantique d'entité.

    La meilleure preuve en est que l'on peut parfaitement envisager un cas où, selon les besoins que tu as définis par ailleurs, ta classe serait dérivée en Map2D d'un coté et Map3D de l'autre.

    Cependant, il est fort vraissemblable que la classe (de base) Map ne fasse qu'exposer une interface publique, basée sur des fonctions virtuelles --dont une bonne partie seraient d'ailleurs virtuelles pures -- ne serait-ce que parce qu'il n'est pas exclu que certains comportements méritent alors d'être adapté au type réel de la map ou que les données soient de types différents
    Et puis, je voulais savoir, si j'ai une classe à sémantique d'entité, que je veux la créer juste pour une fonction (durée de vie d'une fonction) dois-je obligatoirement utilisé un pointeur ou une référence, ou puis-je utiliser un type statique afin que le programme détruise la classe tout seul, sans que je ne m'en préoccupe.
    Tu n'es absolument pas obligé de recourrir à l'allocation dynamique, pour autant:
    1. que tu aie la certitude que la durée de vie de l'objet ne dépasse pas la portée dans laquelle il est créé
    2. que tu saches à l'avance, et sans ambiguité, exactement le type d'objet dont tu auras besoin
    3. Que tu veilles à passer l'objet créé sous la forme d'une référence ou d'un pointeur (que tu obtiens avec l'opérateur "address of" ( & ) ) si la fonction attend un objet du type de bas

    Finalement, il serait bien d'avoir une sorte de méthode que l'on lirai pour savoir comment construire une classe proprement (genre, une liste de questions qu'ils faut toujours se poser). Car il me semble que ce ne soit pas si simple. Est-ce possible ?
    Mon métier est de te dire que rien n'est impossible , mais bon, cela nou lancerait sanss doute dans une répétition de cours de POO

    Ceci dit, il y a, effectivement quelques questions qui devraient te permettre de savoir si tu as affaire à une classe ayant sémantique d'entité :
    1. Dois je prévoir de faire cohabiter des instances de plusieurs types différents dans une seule et même collections d'objets de sorte à les parcourir tous en invoquant un certain nombre de comportements clairement définis
    2. Puis-je réellement dire en toute honnêteté que l'objet B EST UN objet de type A, dans toute la sémantique du terme, lorsque j'envisage l'héritage
    3. (comme déjà indiqué précédemment) La classe est elle caractérisée plus par les comportements que l'on en attend que par les valeurs qui la composent
    Si tu réponds oui à l'une de ces questions, tu est très clairement face à une classe ayant sémantique d'entité, et il est plus que vraissemblable qu'elle puisse avantageusement être non copiable et non assignable (avoi unconstructeur par copie et un opérateur d'affectation privé)
    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

  2. #22
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 579
    Points
    218 579
    Billets dans le blog
    120
    Par défaut
    Merci à tous pour vos réponses
    Je pense que je vais appliquer dès que possible tout ce nouveau savoir.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Pointeur et héritage...
    Par Zenol dans le forum C++
    Réponses: 2
    Dernier message: 08/03/2006, 12h31
  2. Passge par référence & héritage
    Par jsatla dans le forum C++
    Réponses: 11
    Dernier message: 04/01/2006, 17h44
  3. [VB.NET]Besoin de précision pour architecture 3-tiers
    Par Dnx dans le forum Windows Forms
    Réponses: 8
    Dernier message: 14/09/2005, 09h09
  4. Besoin de précision sur TThread
    Par psau dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/02/2005, 23h35
  5. Réponses: 8
    Dernier message: 26/08/2004, 18h59

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