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

Python Discussion :

Organiser ses classes


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 114
    Par défaut Organiser ses classes
    Bonjour

    Voici mon problème :

    Avec le temps, mes classes sont de plus en plus grosses, on trouve toujours de nouvelles méthodes à ajouter.
    J'essaye toujours d'avoir des fichiers plutôt petits. L'une des principales raisons est qu'avec SVN, cela permet de mieux voir si une modification est locale (on a juste retoucher une méthode) ou globale (on a complètement revu toutes les méthodes). En C, j'en arrivais parfois à un fichier par fonction.


    Actuellement, j'ai un fichier par classe. Découper jusqu'à ce niveau est facile. Malgré cela, dans certain cas, je commence à trouver ces fichiers trop gros, donc je cherche comment séparer le contenu de cette classe sur plusieurs fichiers.

    Mon premier essai, qui a échoué, consistait en gros à faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    fichier class_a_core.py
    class A:
        def __init__(self):
            print("A.__init__")
     
        def m1(self):
            print("A.methode 1")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fichier class_a_tools.py
    class A:
        def m2(self):
            print("A.methode 2")
    et un exemple d'utilisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    from multi_fic.class_a_tools import *
    from multi_fic.class_a_core import *
     
    a = A()
     
    a.m2()
    Bien sur cela ne marche pas.


    Est-ce que quelqu'un a une piste pour que j'arrive à découper mon application en petit fichier.

    Cordialement
    Emmanuel

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut, je ne saisis pas trop bien, quand tu importe avec "import*", tu importe deux classes du même nom, à savoir "A".

    A la ligne a = A() comment Python s'y retrouve-t-il ?

    J'utilise assez bien la séparation en fichier, ça n'a rien de compliqué.

    Ex:

    J' ai un fichier Otool.py, qui contient une série d'utilitaires classiques, conversion, algorythmes récurrents etc
    Celui-ci commence comme ceci:

    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
     
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    import os
    import etc
     
    class Tools():
        """Some tools wich are used by the application.
     
        """ 
        def __init__(self):
             ...do something
     
     
        def valid_image(self, fp):
             1ere méthode
     
        def etc...
    Ensuite dans le corps du programme principal;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    from Otool import Tools
     
    tool = Tools()
    ...
    et lorsque j'ai besoin d'une méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        x = tool.valid_image(image)
    simple, non ?

    vincent

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 114
    Par défaut
    Citation Envoyé par VinsS Voir le message
    J' ai un fichier Otool.py, qui contient une série d'utilitaires classiques, conversion, algorythmes récurrents etc
    OK, tu as un fichier Otool.py avec ta classe Tools().
    Maintenant, tu fais grossir ta classe Tools, tu rajoutes des méthodes.
    Si, pour des raisons que j'ai cité précédemment, tu finis par trouver le fichier Otool.py trop long et que tu souhaites diviser ce fichier en plusieurs fichiers, par exemple Otool_1.py et Otool_2.py, tu procèdes comment ? Voilà ma question.

    Cordialement
    Emmanuel

  4. #4
    Membre chevronné
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Par défaut
    Bonjour,
    Pour moi c'est une erreur que de vouloir fractionner une même classe et d'ailleur je sais pas si c'est possible en python.
    Une classe est sensée regrouper une ensemble de fonction ayant attrait à un objet. Si ta classe est trop grande, regarde plutôt du côté de la conception. Peut être mets-tu trop de chose dans une même classe (trop procédural), et tu augmentes ainsi ton couplage.
    Si ta classe est longue, mais que toutes les méthodes sont liées à l'objet, pour moi il n'y a pas de problème. D'ailleurs il est parfois bon de regrouper plusieurs classes dans un même fichier afin de regrouper les classes similaires, et permettre des imports plus cohérents
    Bref, je répond pas à ta question d'un point de vue technique...

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 114
    Par défaut
    Bonjour,

    Citation Envoyé par dahtah Voir le message
    Si ta classe est trop grande, regarde plutôt du côté de la conception. Peut être mets-tu trop de chose dans une même classe
    Citation Envoyé par dahtah Voir le message
    Bref, je répond pas à ta question d'un point de vue technique...
    Si, tu réponds très bien.
    Si je ne me trompes pas, ton point de vu est que :
    - une classe est dans un seul fichier. règle python inviolable.
    - si la classe est trop grande, c'est une erreur de conception. Point de vu que j'accepte.

    merci de ta réponse.

    Est-ce que d'autre personne partage ce point de vu ?

    Cordialement
    Emmanuel

  6. #6
    Membre chevronné
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Par défaut
    Citation Envoyé par emmanuel_dumas Voir le message
    - une classe est dans un seul fichier. règle python inviolable.
    Techniquement, je sais pas si tu peux scinder une classe en plusieurs fichiers en python. Je sais que c'est possible en C#. Notament dans les éditeurs d'IHM, où le code généré automatiquement est séparé du code programmeur. Pourtant les deux fichiers forment une même classe (mais bon, c'est un besoin spécifique).
    Citation Envoyé par emmanuel_dumas Voir le message
    - si la classe est trop grande, c'est une erreur de conception. Point de vu que j'accepte.
    Je trouve que sur un gros projet, un des points difficiles de la POO est la granularité des objets. De très gros objets qui font tout sont difficilement maintenables. Maintenant, de très petits objets, obligent à faire beaucoup de code "ciment" entre les objets, et le code est difficile à lire, car les appels aux autres objets obligent le programmeur à aller voir d'autres fichiers, puis d'autres, puis d'autres... Tu obtiens une structure "horizontale" dans un schéma UML.

    Pour être pratique, je dirais que 200-300 lignes par objet sont acceptables. Après, c'est surtout une histoire de fonctionnalités communes. Cet avis bien sur n'engage que moi.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 71
    Par défaut
    Bonjour,
    Citation Envoyé par emmanuel_dumas Voir le message
    Si je ne me trompes pas, ton point de vu est que :
    - une classe est dans un seul fichier. règle python inviolable.
    - si la classe est trop grande, c'est une erreur de conception. Point de vu que j'accepte.

    merci de ta réponse.

    Est-ce que d'autre personne partage ce point de vu ?
    Oui, scinder une classe en plusieurs fichiers ma paraît être une erreur, a priori. Ça peut vite devenir le bordel. De plus, est-ce possible en Python? Ça m’étonnerait.

    Par contre, une classe trop grande, je ne sais pas trop ce que ça veut dire. Combien de lignes font tes classes trop grandes?

    Quelques centaines de lignes, c’est correct. Mes classes ne dépassent guère 500 lignes et font souvent beaucoup moins.

Discussions similaires

  1. [POO] Organiser ses classes (en sous classes)
    Par alexfrere dans le forum Langage
    Réponses: 5
    Dernier message: 20/03/2007, 13h07
  2. [IMPORTANT!] Comment organiser ses recherches
    Par Emmanuel Lecoester dans le forum Firebird
    Réponses: 0
    Dernier message: 29/07/2005, 13h47
  3. [GUI]Organisation des classes
    Par c-top dans le forum Interfaces Graphiques en Java
    Réponses: 9
    Dernier message: 04/03/2005, 17h46
  4. Organisation des classes
    Par R3iTt0R dans le forum Langage
    Réponses: 2
    Dernier message: 02/06/2004, 17h27
  5. [Debutant(e)][eclipse] Comment organiser ses projets ?
    Par Javanaute dans le forum Eclipse Java
    Réponses: 9
    Dernier message: 09/04/2004, 10h07

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