Partage
  • Partager sur Facebook
  • Partager sur Twitter

factorisation de code

    9 mai 2008 à 11:41:23

    Bonjour,
    j'ai récesemment entendus parler de factorisation de code.
    Mais je ne vois pas trop comment faire.
    Une personne m'a dis que mon code pouvais l'être mais j'ai du mal à voir comment.
    quelqu'un pourrais me montrer quelque exemple?

    merci.
    • Partager sur Facebook
    • Partager sur Twitter
    :)
      9 mai 2008 à 11:55:47

      Cela veut dire découper ton code en fonctions et en classes et pas tout mettre dans le main.

      Une tache = Une fonction
      Un concept = Une classe
      • Partager sur Facebook
      • Partager sur Twitter
      Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
        9 mai 2008 à 12:54:01

        naanan en fait c'et parce que le monsieur avais repéré un certain copier/coller c'est a dire que j'ai fais une page et après j'ai adapter pour le reste mais c'est très ressembant.

        bon je montre mon code pour mieux comprendre :

        dossier 1 : intensite


        /*
        tab_intensite.h
        -------------------
        */
        
        #ifndef H_TAB_INTENSITE_H
        #define H_TAB_INTENSITE_H
        
        #include <QWidget>
        #include <QVBoxLayout>
        #include <QDialog>
        #include <QTabWidget>
        #include <QLabel>
        
        #include "../index.h" // toutes les definitions, ...
        #include "intensiteU_R.h"
        #include "intensiteP_U.h"
        #include "intensiteP_R.h"
        
        class TabIntensite : public QDialog {
        
        	public :
        	    TabIntensite(QWidget *parent=0);
        	
        	private :
        	    QTabWidget *tab_intensite;
        		QVBoxLayout *tab_VLayout;
        		QLabel *label_titre;
        };
        
        #endif
        

        /*
        tab_intensite.cpp
        ----------------------
        */
        
        #include "tab_intensite.h"
        
        TabIntensite::TabIntensite(QWidget *parent) : QDialog(parent, Qt::Window)
        {
        	setWindowTitle(QString(NOM_VERSION)+ QString("Intensité d'un courant continu"));
        
        	label_titre = new QLabel("<h2 align=\"center\">Intensité d'un courant continu unidirectionnel</h2>");
        	
        	tab_intensite = new QTabWidget;
        	tab_intensite->addTab(new IntensiteU_R(), tr("U:R"));
        	tab_intensite->addTab(new IntensiteP_U(), tr("P:U"));
        	tab_intensite->addTab(new IntensiteP_R(), QChar(0x221a)+QString("P:R"));
        	
        	tab_VLayout = new QVBoxLayout;
        	tab_VLayout->addWidget(label_titre);
            tab_VLayout->addWidget(tab_intensite);
        	
        	setStyleSheet(lireCSS(5)); // dégradé fond
        	setLayout(tab_VLayout);
        
        }
        


        dossier 2 : tension


        /*
        tab_tension.h
        -------------------
        */
        
        #ifndef H_TAB_TENSION_H
        #define H_TAB_TENSION_H
        
        #include <QWidget>
        #include <QVBoxLayout>
        #include <QDialog>
        #include <QTabWidget>
        #include <QLabel>
        
        #include "../index.h" // toutes les definitions, ...
        #include "tensionI_R.h"
        #include "tensionP_I.h"
        
        class TabTension : public QDialog {
        
        	public :
        	    TabTension(QWidget *parent=0);
        	
        	private:
        	    QTabWidget *tab_tension;
        		QVBoxLayout *tab_VLayout;
        		QLabel *label_titre;
        };
        
        #endif
        

        tab_tension.cpp
        ----------------------
        */
        
        #include "tab_tension.h"
        
        TabTension::TabTension(QWidget *parent) : QDialog(parent, Qt::Window)
        {
        	setWindowTitle(QString(NOM_VERSION)+QString("Tension d'un courant continu"));
        	setFixedSize(524, 580);
        
        	label_titre = new QLabel("<h2 align=\"center\">Tension d'un récepteur en courant continu unidirectionnel</h2>");
        	
        	tab_tension = new QTabWidget;
        	tab_tension->addTab(new TensionI_R(), tr("IxR"));
        	tab_tension->addTab(new TensionP_I(), tr("P:I"));
        	
        	tab_VLayout = new QVBoxLayout;
        	tab_VLayout->addWidget(label_titre);
            tab_VLayout->addWidget(tab_tension);
        	
        	setStyleSheet(lireCSS(5)); // dégradé fond
        	setLayout(tab_VLayout);
        }
        


        et ainsi de suite tout ça remis dans un menu central :
        /*
        tab_mainMenu.h
        ---------------
        */
        
        #ifndef H_TAB_MAINMENU_H
        #define H_TAB_MAINMENU_H
        
        #include <QWidget>
        #include <QObject>
        #include <QCloseEvent>
        #include <QApplication>  // macro qApp
        #include <QMainWindow>
        #include <QMenu>
        #include <QMenuBar>
        #include <QMessageBox>
        #include <QTabWidget>
        #include <QPixmap>
        #include <QVBoxLayout>
        #include <QDesktopWidget>
        
        #define INFO
        
        #include "../index.h" // toutes les definitions, ...
        #include "page_continu.h"
        #include "page_alternatif.h"
        
        class Tab_MainMenu : public QMainWindow
        {
        	Q_OBJECT
        	
        	public:
        		Tab_MainMenu(QWidget *parent=0);
        		
        	private slots:
        		void aPropos();
        
        	private:
        	    QTabWidget *tab_mainMenu;
        		QGridLayout *gridLayout;
        		QLabel *label_titre_menu, *label_creativeCommons;
        		QPixmap *pixmap_creativeCommons;
        
        		void setupFichierMenu();
        		void setupAideMenu();
        };
        
        #endif
        

        /*
        tab_mainMenu.cpp
        ------------------
        */
        
        #include "tab_mainMenu.h"
        
        Tab_MainMenu::Tab_MainMenu(QWidget *parent) :  QMainWindow()
        {
        	setWindowTitle(QString(NOM_VERSION)+QString("Menu"));
        	setFixedSize(LARGEUR_FENETRE_MIN, HAUTEUR_FENETRE_MIN);
        	
        	QWidget *principal = new QWidget;
        
        	setupFichierMenu();
        	setupAideMenu();
        	
        	tab_mainMenu = new QTabWidget;	
        	tab_mainMenu->addTab(new PageContinu, tr("Continu"));
        	tab_mainMenu->addTab(new PageAlternatif, tr("Alternatif"));
        	tab_mainMenu->setStyleSheet(lireCSS(6)); 
        	
        	gridLayout = new QGridLayout(principal);
        	gridLayout->addWidget(tab_mainMenu, 0, 0);
        	principal->setLayout(gridLayout);
        	
        	setCentralWidget(principal);
        
        }
        
        void Tab_MainMenu::aPropos()
        {
           QMessageBox::about(this, QString(NOM_VERSION),
            QString("<h2>A propos de  version 1.0</h2>                                                   \
        			<br /><br />                                                                                     \
        			<b>Auteur</b> :<br />                                                                 \
        			<b>Contact</b> : <a href=\"mailto:@e.fr\">                                   \
        			logicielelectro@orange.fr</a><br /><br />                                                        \
        			<b>Le logiciel est soumis au contrat creative commons pour le consulter cliquez sur l'image.</b> \
        			<br /><br /><a href=\"http://creativecommons.org/licenses/by-nc-nd/2.0/fr/\" ><img src=\"")+
        			QString(CREATIVE_COMMONS_PETIT)+QString("\" alt=\"Creative Commons\" title=\"Creative Commons\"/></a>"));
        }
        
        void Tab_MainMenu::setupFichierMenu()
        {
            QMenu *fichierMenu = new QMenu(tr("&Fichier"), this);
            menuBar()->addMenu(fichierMenu);
        
        	fichierMenu->addSeparator();
        
            fichierMenu->addAction(tr("&Quiter"), qApp, SLOT(closeAllWindows()),
                                QKeySequence(tr("Ctrl+Q","Fichier | Quiter")));
        	menuBar()->setStyleSheet(lireCSS(7)); 
        }
         
        void Tab_MainMenu::setupAideMenu()
        {
        	QMenu *aideMenu = new QMenu(tr("&?"), this);
            menuBar()->addMenu(aideMenu);
        
            aideMenu->addAction(tr("&A propos"), this, SLOT(aPropos()));
            aideMenu->addAction(tr("&A propos de Qt"), qApp, SLOT(aboutQt()));
        	
        	menuBar()->setStyleSheet(lireCSS(7)); 
        
        }
        


        c'est la que l'on se rend qu'on qu'il doit y avoir possibilité de factoriser selon une personne mais je ne comprend pas comment.

        par ce problème doit surment être lié à celui dans ma signature qui est lui je supose du à l'utilisation des styles. (en faite mon problèe dans ma signature c'est que lorsque je démarre le petit logiciel il blinde la mémoire vive a environ 2Go (or je n'en est que 1.5 dans mon ordi donc ça rammm et puis de toutes façon c'est anormal).

        Merci de ton aide. :)
        • Partager sur Facebook
        • Partager sur Twitter
        :)
          9 mai 2008 à 13:55:38

          Tu as à 2 endroits différents le même bout de code. Pourquoi ne pas en faire une fonction ?

          Comme ça il n'y aura qu'un endroit à corriger si ce code doit évoluer. Il y a aussi moins de ligne et c'est plus facile à maintenir
          • Partager sur Facebook
          • Partager sur Twitter
          Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
            9 mai 2008 à 13:58:38

            en faite mon soucis c'est que le nombre onglet est variable ainsi que sont contenu sinon je supose que c'est ici que le code est "factorisable".
            Donc en faite il faudrais que je fasse une class onglet??
            mais comment faire pour placer le contenu dedans?? (je suis en train de m'embrouiller.. lol
            • Partager sur Facebook
            • Partager sur Twitter
            :)

            factorisation de code

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown