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 :

Gestion des objets


Sujet :

Python

  1. #1
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 662
    Par défaut Gestion des objets
    Bonjour tout le monde.

    Le contexte:

    Je travail actuellement sur un module Python permettant de modéliser automatiquement une structure dans un soft.

    Pour faire simple, j'ai à ma disposition un logiciel d'architecture navale. Ce logiciel permet de modéliser des éléments de type ligne, bateau, bouée, etc et présente l'énorme avantage de propoposer une API Python. Cette API permet de créer/modifier/lancer/post-traiter, etc, un model numérique complexe.

    J'ai besoin pour mon travail de modéliser une structure (poutres) avec ce soft. Or il n'a pas du tout été conçu pour cela. C'est, au bas mot, très fastidieux de modéliser chaque élément de ma structure à la mano directement dans le GUI. Et je suis fainéant

    Mais,... J'ai un fichier text contenant le maillage de ma structure:
    • Les noeuds (nom, X(m), Y(m), Z(m))
    • Les éléments (nom, nom_du_noeud_1, nom_du_noeud_2, type)

    Le type défini les caractéristiques de l'élement (profil de la poutre)


    Ce que j'ai:

    J'ai pas mal avancé dans mon code. J'ai créé les fonctions nécessaire à la récupération des données provenant du fichier de maillage et à la modélisation d'une poutre dans mon soft (la partie la plus hardue).

    J'ai défini les classes suivantes:
    • Node (name, X, Y, Z)
    • Beam (name, Node1, Node2)
    • Structure (model, name)


    Une poutre (Beam) est définie par deux noeuds et un nom. Je peux lui affecter d'autres attributs comme son type. Ma structure a comme principaux attributs l'ajout et la suppression d'une poutre.

    Et ça marche très bien pour une poutre.

    Problème:

    Je veux désormais généraliser cela à l'ensemble de mes éléments. Mon problème vient du nom de mes objets. J'aimerais que chacun de mes éléments porte son vrai nom (pour pouvoir ensuite aisément créer mes poutres en appelant les bons noeuds)... Soit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    name = Node(name, X, Y, Z)
    Ici, le premier "name" est l'objet noeud tandis que le second est nom de cet objet (attribut)... Pour chaque noeud, j'ai une liste définie comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # ième noeud:
    nodeList[i] = [name, X, Y, Z]
    Lors de la création d'un nouveau noeud, je connais donc son nom. Mais comment créer l'objet Node associé avec le même nom? Ou de façon général comment gère t'on habituellement un grand nombre d'objets?

    En fait je pense que mon problème est similaire à la création d'arbres où l'on retrouve on objet lié à d'autres objets (Node(name, Father, Son_Left, Son_Right)).

    Merci d'avance pour toute aide!

    Ju


    PS: Je ne poste pas de code, car prohibé par ma boite.

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Ce que tu écris me semble correct et réfléchi, la logique semble bonne, donc tout va bien!!!

    Pour gérer une grande liste d'objets, encore une fois ta solution est bonne, on utilise une liste, mais il y a d'autres solutions, bref tu as choisis la liste.

    Ta façon de gérer tes listes de liste pourrait être celle ci-dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    nodeList = [[name, X, Y, Z], [..., ..., ..., ...], ...]
     
    for liste in nodeList:
        nom, x, y, z = liste
        name = Node(nom, x, y, z)
        # on continue le traitement sur l'objet name

  3. #3
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 662
    Par défaut
    Merci Fred pour cette réponse aussi rapide!

    Je vais essayé ça cet aprem (il est midi pour moi, et je travail pas le ventre vide ).

    En attendant, j'ai envisagé la solution suivante:

    1. Je créé un liste contenant mes objets de type noeud (la liste nodeList contient les attributs des futurs noeuds).
    2. Lors de la création d'un élément de type Beam, j'appelle une fonction cherchant les bons noeuds dans ma nouvelle liste.


    La fonction associée serait de ce type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def __SearchNode__(newNodeList, name):
        for node in newNodeList:
             if node.Name == name:
                   return node
    Il me faudrait ensuite réfléchir aux exceptions.

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Ok ton code sera fonctionnel...

    Seulement évite les underscores autour de ta fonction

    Par contre pour les exceptions je ne comprend pas, mais tu dois avoir déjà ton idée, car c'est une histoire de conception.

  5. #5
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 662
    Par défaut
    Mon problème est résolu.

    La liste d'objet marche très bien, ainsi que ma fonction permettant de sélectionner les bons noeuds lors de la construction d'un poutre.

    Merci à toi Fred.

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Merci à toi Fred
    De rien

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par Julien N Voir le message
    Lors de la création d'un nouveau noeud, je connais donc son nom. Mais comment créer l'objet Node associé avec le même nom? Ou de façon général comment gère t'on habituellement un grand nombre d'objets?
    Il y a beaucoup de méthodes pour gérer un grand nombre d'objets.
    La plupart passent par la construction d'une "registry".

    Techniquement, c'est ce que fait le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def __SearchNode__(newNodeList, name):
        for node in newNodeList:
             if node.Name == name:
                   return node
    Après côté "réalisation", si "name" est l'identifiant d'un node, on pourra utiliser un "dict" en variable de classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class Node:
        _nodes = {}
        def get(self, name):
            return self._nodes.get(name)
    Mais difficile de donner une réalisation la "plus" adaptée: stocker les noeuds créées et les retrouver se fait de pleins de façons et son plus ou moins adaptée en fonction du nombre d'objets, des traitements, des utilisations,...

    Une autre façon est de sous traiter le problème aux bibliothèques existantes.
    NetworkX (il y en a d'autres) est une bibliothèques qui permet de réaliser lecture, stockage, visualisation de différents types de graphes.

    Elle propose déjà des solutions prêtes à l'emploi, passer à côté c'est autant de temps perdu dans le codage de ce qui sera spécifique à votre application.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. Gestion des objets Excel.Application dans Access
    Par spaiku dans le forum VBA Access
    Réponses: 7
    Dernier message: 01/10/2008, 16h15
  2. Gestion des objets ACCESS
    Par tiyolx dans le forum Modélisation
    Réponses: 5
    Dernier message: 24/05/2008, 23h57
  3. gestion des objets d'une scene
    Par crischprolch dans le forum OpenGL
    Réponses: 6
    Dernier message: 14/05/2008, 18h02
  4. [RMI]Gestion des objets sur le serveur?
    Par fabszn dans le forum Langage
    Réponses: 9
    Dernier message: 06/06/2007, 11h59
  5. Pb de gestion des objets Excel
    Par tedparker dans le forum Access
    Réponses: 2
    Dernier message: 11/09/2006, 17h13

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