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 :

Bonne conception: liste, dictionnaire, Objet, ou un peu de tout ?


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Juste pour le plaisir....
    Inscrit en
    Octobre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Juste pour le plaisir....

    Informations forums :
    Inscription : Octobre 2017
    Messages : 7
    Par défaut Bonne conception: liste, dictionnaire, Objet, ou un peu de tout ?
    Bonjour,

    Ayant un peu de nostalgie de mon début de carrière dans l'IT comme programmeur (PL1 et IMS DB/DC, et DB2.... pour les anciens à qui ça parle encore...), à l'approche de la retraite, j'ai envie de m'amuser un peu, et ai donc choisi Debian/Pyton pour m'y remettre "pour le fun". Bien sûr, tout n'est pas une évidence, mais ça fait partie du jeu.... Progressivement, j'avance (j'ai mon PC dual Boot Windows/Debian/python3.8 ) mais là, je bute sur un sujet "philosophique" où je n'arrive pas à trouver une "bonne" réponse (y compris sur le "net", je ne sais même pas bien où chercher d'ailleurs...)

    Je m'explique: comme premier exercice de taille un peu plus importante, je voudrais me faire un outil de gestion de ma cave à vin (une cave avec un volume en toute modération: c'est juste pour le fun de la programmation ) et je bute sur la question du type de données à utiliser...

    un exemple (simplifié): j'aurais besoin de la notion "bouteille" qui aurait comme attributs:
    - région (ce qui renvoie vers un référentiel (= table) de régions: Bordeaux, Bourgogne, ...)
    - le producteur (ce qui renvoie vers un référentiel (= table) de producteurs avec les coordonnées,..),
    - la marque (le nom de la bouteille chez le producteur: Cairanne, Château bidule, etc..)
    - l'année de la production
    - le nombre de bouteilles qui me restent en cave
    etc

    Je voudrais donc afficher sur l'écran les bouteilles en stock de toutes les régions, d'une certaine région, d'une certaine année, d'un producteur,... et des combinaisons de tout ça (donc des accès et filtres un peu sur tous les attributs). Or je m'interroge comment "gérer" cette information au niveau du programme:

    "à l'époque" j'aurais créé une table SGBDR (donc attributs pour la "bouteille" "à plat" dans une seule table), j'aurais créé une "structure" pour les résultats, et j'aurais filtré via des requêtes et jointures les informations qui m'intéressaient suivant la requête

    1) En Python, je me dis il faudrait utiliser listes et/ou dictionnaires... du coup, j'ai plein de possibilités:
    a) liste de listes de "bouteilles" contenant les infos sur chaque "bouteille":
    [ [région, producteur, marque, année, nombre], [région, producteur, marque, année, nombre], [région, producteur, marque, année, nombre], ...]
    b) un dictionnaire avec à chaque fois une liste des infos par "bouteille":
    { bouteille1 : [région, producteur, marque, année, nombre], bouteille2: [région, producteur, marque, année, nombre], bouteille3:....}
    c) un dictionnaire avec à chaque fois un dictionnaire pour chaque "bouteille":
    { bouteille1: {région: ..., producteur: ...,....}, bouteille2: {..], ....}
    mais du coup,
    - je ne vois pas trop comment faire mes filtres et sélections, hormis de construire des boucles qui vont lire bouteille par bouteille et sélectionner ce qu'il me faut (bref, cela ne me parait pas un réel progrès avec ce que j'ai connu il y 30 ans.. mais je n'ai peut-être pas tout vu/compris)
    - se pose ensuite la question du stockage (SQL, CSV, Jason,...)

    2) et je me dis que le mieux serait quand même d'utiliser la techno "objet" (le but est d'apprendre, il parait que l'objet est un sacré progrès... ), du coup, j'ai encore d'autres possibilités:
    a) liste d'objets
    [objet_bouteille1, objet_bouteille2,...]
    b) dictionnaire d'objets
    {key1: objet, key2: objet, ....}
    mais avec les mêmes questions qu'en 1...

    Donc, chère communauté Python, j'espère que c'est clair, et je suis impatient de lire vos avis éclairés...

    Merci d'avance!

  2. #2
    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 Papy84 Voir le message
    Donc, chère communauté Python, j'espère que c'est clair, et je suis impatient de lire vos avis éclairés...
    De toutes façons vous allez avoir besoin d'utiliser une base de données pour y stocker vos informations. Et la structure des informations échangés seront des tuples.
    Après, si vous voulez une représentation un peu plus orientée objet de ces tuples, vous tombez dans un domaine qui s'appelle Object to Relational Mapping ou ORM.
    Vous fatiguez pas, c'est hyper compliqué à réaliser, mieux vaut utiliser des outils/bibliothèques qui font déjà cela pour vous comme sqlalchemy.
    (mais c'est du temps à passer pour vous l'approprier).
    Entre les deux, vous pouvez toujours utiliser directement le SGDB, coder les requêtes les plus intéressantes, ...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre du Club
    Homme Profil pro
    Juste pour le plaisir....
    Inscrit en
    Octobre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Juste pour le plaisir....

    Informations forums :
    Inscription : Octobre 2017
    Messages : 7
    Par défaut
    Merci wiztricks

    Réponse claire et sauf contre-avis de quelqu'un, la sagesse me dirait donc plutôt de faire à "l'ancienne" (requêtes SQL) et éventuellement y revenir plus tard pour partiellement migrer du code vers l'objet. Dans ce cas, il n'y a plus qu'à


    Papy84

  4. #4
    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 Papy84 Voir le message
    Réponse claire et sauf contre-avis de quelqu'un, la sagesse me dirait donc plutôt de faire à "l'ancienne" (requêtes SQL)
    Si vous savez faire "à l'ancienne", prenez quand même le temps de jeter un œil à SQLAlchemy. C'est une bibliothèque qui existe (et évolue) depuis plus de 10 ans.
    Il y a plein de tutos et d'exemples (à emporter). Sûr que c'est un monstre mais vous n'êtes pas obligé d'en connaître toutes les fonctionnalités pour l'utiliser.
    Ouvrez un tuto. regardez si vous accrochez, si vous pouvez faire quelque chose avec.

    Dans le cas contraire, "à l'ancienne" restera une solution de repli

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 196
    Billets dans le blog
    47
    Par défaut
    Bonsoir,

    Citation Envoyé par Papy84 Voir le message
    1) En Python, je me dis il faudrait utiliser listes et/ou dictionnaires... du coup, j'ai plein de possibilités: ...
    Vous avez manqué une possibilité, une liste de dictionnaires :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mesvins = [ {"region" : "Bourgogne", "marque" : "château-bidule", "annee" : 2016, "nb" : 12  },
                {"region" : "Alsace"   , "marque" : "château-truc"  , "annee" : 2018, "nb" : 18  },
                {"region" : "Bordeaux" , "marque" : "château-machin", "annee" : 2014, "nb" : 12  }
              ]
    La librairie csv par exemple propose une méthode DictReader pour créer ce genre de structure de données à partir d'un fichier csv où les clés sont les descripteurs dans la première ligne du fichier csv. Il doit bien exister une méthode similaire pour json.

  6. #6
    Membre du Club
    Homme Profil pro
    Juste pour le plaisir....
    Inscrit en
    Octobre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Juste pour le plaisir....

    Informations forums :
    Inscription : Octobre 2017
    Messages : 7
    Par défaut
    Citation Envoyé par f-leb Voir le message
    Vous avez manqué une possibilité, une liste de dictionnaires :
    Exact! j'aurais dû me rappeler que la combinaison de 2 variables donne 4 résutats

    comme quoi les possibilités de Python sont infinies et, effectivement, cela peut donner quelque chose d'intéressant à regarder également
    Merci!

  7. #7
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Bonjour,

    Votre projet n'est en effet pas le meilleur cas d'étude car le gros du boulot est supporté par le SGBD qui va vous renvoyer des 'Cursor' et des 'tuple', le plus souvent. Donc vous avez de-facto vos objets; il suffit juste d'afficher leur contenu.

    Il est possible de transvaser ces contenus dans des objets "métiers" (classes Vin, Producteur, ...) de votre création, mais cela ne se justifie que si il existe des sous-programmes qui nécessitent de tels objets pour fonctionner. Bref, pas très utile dans le cas d'une appli de gestion de cave à vin.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

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

Discussions similaires

  1. Problème Conception liste objets
    Par phil512 dans le forum Général Java
    Réponses: 9
    Dernier message: 27/04/2010, 00h24
  2. Conception objet + Liste d'objets
    Par remsrock dans le forum C#
    Réponses: 13
    Dernier message: 03/07/2008, 11h06
  3. [MFC] Retourner une liste d'objets
    Par 1cado dans le forum MFC
    Réponses: 10
    Dernier message: 28/07/2003, 12h11
  4. [Kylix] Composant - Liste d'objet
    Par Metal3d dans le forum EDI
    Réponses: 1
    Dernier message: 13/12/2002, 22h17
  5. liste d'objets
    Par Pierrot dans le forum Langage
    Réponses: 2
    Dernier message: 27/09/2002, 09h56

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