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 :

POO - C++ et UML


Sujet :

C++

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Décembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2017
    Messages : 8
    Points : 6
    Points
    6
    Par défaut POO - C++ et UML
    Bonjour à tous,
    je suis une débutante et pour capitaliser ce que j'ai appris jusqu'ici j'ai créé trois classes.
    • class CBoitierLunettes,
    • classe CLunettes qui est un aggrégat de CBoitierLunettes et la classe mère de CTypeVerres
    • classe CTypeVerres


    voici la déclaration des trois classes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    #ifndef LES_ENTETES_H_INCLUDED
    #define LES_ENTETES_H_INCLUDED
     
    #include <string>
    #include <iostream>
     
    //**************************************************
    class CLunettes;
    class CBoitierLunettes
    {
        private:
         std::string m_couleur;
         std::string m_nomEtiquette;
         int m_volume;
         CLunettes *CesLunettes; /* consequence de l'aggregation: permet
         au boitier quelles sont les lunettes qui lui sont dedies*/
     
            public:
        CBoitierLunettes (std::string couleur, std::string nomEtiquette, int volume, CLunettes& a);
        void Afficher ();
    };
     
    // **************************************************
     
    class CLunettes
    {
        private:
         int m_prix;
         int m_dimension;
         std::string m_styleMode;
         CBoitierLunettes *CetteBoite; /* Bien que c'est CLunnettes qui est
         un aggregat de CBoiteLunnettes, j'aimerai qu'un pair de lunettes sache
         a quelle boitier il appartient*/
     
        public:
        CLunettes (int prix, int dimension, std::string styleMode);
        void SetBoitierLunettes(); /* affecte aux lunnetes l'adresse memoire
        du boitier a qui il correspond */
        void Afficher();
    };
     
    class CTypeVerres: public CLunettes
    {
        private:
         std::string m_natureVerres;
         float m_poids;
     
        public:
         CTypeVerres (std::string natureVerres, float poids, int prix, int dimension, std::string styleMode );
         void Afficher();
    };
     
     
    #endif // LES_ENTETES_H_INCLUDED
    voici le fichier source de CtypeVerres;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #include "Les_entetes.h"
    using namespace std;
     
    //***********************************************
     
    CTypeVerres::CTypeVerres (std::string natureVerres, float poids, int prix, int dimension, std::string styleMode ): CLunettes(prix, dimension, styleMode)
    {
        m_natureVerres = natureVerres;
        m_poids = poids;
    }
     //**********************************************
     void CTypeVerres::Afficher()
     {
         // affichage des attributs d'un objet CAutomobile
        cout << "Les caracteristiques de ces lunettes se trouve dans l'adresse memoire: " << this << ". Elles sont les suivantes:" << endl;
        cout << " nature du verre: " << m_natureVerres << " ; son poid: " << m_poids << endl;
     }
    voici celui de CLunettes;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #include "Les_entetes.h"
     
    using namespace std;
     
    //***************************************************
    CLunettes::CLunettes(int prix, int dimension, std::string styleMode)
    {
        m_prix = prix;
        m_dimension = dimension;
        m_styleMode = styleMode;
    }
    // ***********************************************
     void CLunettes::Afficher()
     {
         // affichage des attributs d'un objet CAutomobile
        cout << "Les caracteristiques de ces lunettes se trouve dans l'adresse memoire: " << this << ". Elles sont les suivantes:" << endl;
        cout << " nom du boitier: " << m_prix << " ; sa couleur: " << m_dimension << " ; son volume: " << m_styleMode << endl;
     }
    et enfin voici celui de CBoitierLunettes, celui qui me pose problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #include "Les_entetes.h"
     
    using namespace std;
     
    //***************************************************
    CBoitierLunettes::CBoitierLunettes(std::string couleur, std::string nomEtiquette, int volume, CLunettes& a)
    {
        m_couleur = couleur;
        m_nomEtiquette = nomEtiquette;
        m_volume = volume;
        CesLunettes = CLunettes& a;
     
    }
     // ***********************************************
     void CBoitierLunettes::Afficher()
     {
         // affichage des attributs d'un objet CAutomobile
        cout << "Les caracteristiques de ce boitier se trouve dans l'adresse memoire: " << this << ". Elles sont les suivantes:" << endl;
        cout << " nom du boitier: " << m_nomEtiquette << " ; sa couleur: " << m_couleur << " ; son volume: " << m_volume << endl;
        // j'aimerai aussi afficher les caracteristique des lunettes qui lui sont debies
        CesLunettes = new CLunettes();
        CesLunettes ->Afficher();
        delete CesLunettes;
     
     }
    en effet, quand je compile, j'obtiens un erreur que je n'arrive pas à corriger:
    C:\Users\hp user\Desktop\open_class_room\codage_aggregation\CBoitierLunettes.cpp||In constructor 'CBoitierLunettes::CBoitierLunettes(std::string, std::string, int, CLunettes&)':|
    C:\Users\hp user\Desktop\open_class_room\codage_aggregation\CBoitierLunettes.cpp|12|error: expected primary-expression before '&' token|
    C:\Users\hp user\Desktop\open_class_room\codage_aggregation\CBoitierLunettes.cpp||In member function 'void CBoitierLunettes::Afficher()':|
    C:\Users\hp user\Desktop\open_class_room\codage_aggregation\CBoitierLunettes.cpp|22|error: no matching function for call to 'CLunettes::CLunettes()'|
    C:\Users\hp user\Desktop\open_class_room\codage_aggregation\Les_entetes.h|36|note: candidates are: CLunettes::CLunettes(int, int, std::string)|
    C:\Users\hp user\Desktop\open_class_room\codage_aggregation\Les_entetes.h|26|note:                 CLunettes::CLunettes(const CLunettes&)|
    ||=== Build finished: 2 errors, 0 warnings ===|

    C'est précisément au niveau du codage de l’agrégation. J'ai beau relu mes cours, je ne vois pas mes erreurs. Par la même occasion qui quelque peut me proposer un livre qui parle du passage de UML à C++ je suis partante.

    Merci d'avance pour les personnes qui prendrons la peine de me répondre

  2. #2
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 470
    Points : 6 107
    Points
    6 107
    Par défaut
    Bonjour,

    Dans CBoitierLunettes.cpp :


    Remarques :
    • CLunettes connaît CBoitierLunettes qui connaît CLunettes. CTypeVerres dérive publiquement de CLunettes alors que CLunettes contient des données. Cela fait un paquet de dépendances. Tout le code dépend de tout.
      Cela dit, l'intérêt de réduire les dépendances n'est pas encore évident quand on écrit des programmes :
      • tout petits,
      • sans tests unitaires et
      • dont on n'a pas besoin de partager le code avec d'autres programmes.

      Mais l'intérêt sera visible plus tard. Petit à petit, il faudra s'exercer à découper le code en petites briques réutilisables, en réduisant les dépendances.
    • Dans ton code, CTypeVerres dérive publiquement de CLunettes, mais CLunettes::~CLunettes est public non virtuel. C'est une erreur.
      FAQ C++ : Pourquoi et quand faut-il créer un destructeur virtuel ?
      À part ça, attention : CTypeVerres::Afficher ne redéfinit pas CLunettes::Afficher, car CLunettes::Afficher n'est pas virtuel.
    • Il y a des incohérences de nommage. Pour être cohérent avec m_couleur, m_nomEtiquette et m_volume, CesLunettes devrait s'appeler m_lunettes.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Décembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2017
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup Piramidev.
    Donne-moi le temps d'étudiez des corrections et je te reviendrais si j'ai un souci de comprehension.

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Décembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2017
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    J'ai apporté tout les modifications que tu m'as suggéré. J'ai compilé et tout était ok, sans erreurs (IDE code::blocs).
    Mais pour tester, j'ai écrit ces lignes de code dans le main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include "Les_entetes.h"
    #include <iostream>
     
     
    using namespace std;
     
    int main()
    {
        CLunettes MesLunettes (100, 5, "xxxx");
        CBoitierLunettes MonBoitier("Bleu", "yyyyyy",41, MesLunettes);
        MonBoitier.Afficher;
        return 0;
    }
    Et bonjour les lignes de code d'erreurs :
    C:\Users\hp user\Desktop\open_class_room\codage_aggregation\main.cpp||In function 'int main()':|
    C:\Users\hp user\Desktop\open_class_room\codage_aggregation\main.cpp|11|error: statement cannot resolve address of overloaded function|
    ||=== Build finished: 1 errors, 0 warnings ===|
    Qu'est-ce que j'ai encore fais cette fois?

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Est-ce que MonBoitier.Afficher; est la syntaxe d'appel à une fonction ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Décembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2017
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Est-ce que MonBoitier.Afficher; est la syntaxe d'appel à une fonction ?
    oui, j'ai appelé la méthode "void CBoitierLunettes::Afficher()" de "CBoitierLunettes.cpp" implémenté ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     void CBoitierLunettes::Afficher()
     {
         // affichage des attributs d'un objet CAutomobile
        cout << "Les caracteristiques de ce boitier se trouve dans l'adresse memoire: " << this << ". Elles sont les suivantes:" << endl;
        cout << " nom du boitier: " << m_nomEtiquette << " ; sa couleur: " << m_couleur << " ; son volume: " << m_volume << endl;
    }

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Décembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2017
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    oh Desolée quelle distraction et betise. Je n'ai pas mis () à la fin d'afficher

    j'aurai dû écrire ceci dans le main:

  8. #8
    Futur Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Décembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2017
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Bonjour et merci à tous pour vos remarques pertinentes.
    Merci Bousk pour le lien sur C++ et surtout la programmation réseau. C'est fort interéssant.
    Cependant, Piramidev m'a fait cette observation:
    Mais l'intérêt sera visible plus tard. Petit à petit, il faudra s'exercer à découper le code en petites briques réutilisables, en réduisant les dépendances.
    est-ce quelqu'un pourrais me filer le lien d'un cours sur la notion de briques réutilisables ou a défaut des pistes qui pourront orienter mes recherches sur cette notion?

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 071
    Points : 12 116
    Points
    12 116
    Par défaut
    Un bouquin qui adresse ce problème explicitement : "Code Complete 2", entre d'autres choses :
    http://lmgtfy.com/?q=code+complete+2+free+pdf

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

Discussions similaires

  1. le concept des interface POO dans UML
    Par mapmip dans le forum UML
    Réponses: 3
    Dernier message: 03/06/2013, 07h46
  2. [POO]Difficulltés d'analyse UML
    Par -Kano- dans le forum Langage
    Réponses: 0
    Dernier message: 19/01/2012, 09h47
  3. [POO] UML Association en C++ et les pointeurs
    Par kris1980 dans le forum C++
    Réponses: 24
    Dernier message: 17/10/2008, 12h55
  4. [POO] Livre sur PHP la POO et UML
    Par Sourrisseau dans le forum Livres
    Réponses: 2
    Dernier message: 11/04/2008, 18h46
  5. Réponses: 4
    Dernier message: 24/04/2006, 14h07

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