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

WinDev Discussion :

membre qui masque un autre membre [WD23]


Sujet :

WinDev

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 67
    Points : 62
    Points
    62
    Par défaut membre qui masque un autre membre
    Hello toutes et tous,
    j'aimerai mettre dans un caddie des produits, je tente de coder ça en objet.

    Pour cela des le clique sur bouton caddie d'un produit (et après renseigné la qté), je souhaite mettre les infos dans un tableau, qui serai restitué dans une table (d'une autre page, "caddie").

    J'utilise des membres de 4 classes : produit (idproduit, titreproduit,..), photoproduit (cheminphoto), lignefacture (qté), caddie qui hérite des 3 autres.

    J'ai créé un tableau de type classe Caddie dans ma classe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Caddie est une Classe
        hérite de MLigneFacture
        hérite de MPhotoProduit
        hérite de MProduit
     
        tabCaddie est un tableau de Caddie
    FIN
    Le code qui met les membres dans le tableau caddie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    clCaddie est un Caddie              
     
    clCaddie.m_nIDProduit = ATT_IDProduit
    clCaddie.m_nQuantite = ATT_Quantité
    clCaddie.m_sTitreProduit = ATT_TitreProduit
    clCaddie.m_sCheminPhoto = ATT_PhotoProduit
     
    clCaddie.tabCaddie.Ajoute(clCaddie)
    Et ca me fait un Warning au niveau du Constructeur MProduit: Le membre 'm_nIDProduit' de la classe 'MProduit' masque le membre 'm_nIDProduit' de la classe de base 'MPhotoProduit'
    En effet , j'ai bien un IDProduit dans MPhotoProduit.. mais je pige pas l'erreur

    Merci pour votre aide

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Ma première remarque, c'est que je ne vois pas trop pourquoi MphotoProduit n'est pas intégré dans Mproduit.
    Peut-être que tu prévois plusieurs photos pour chaque produit, et ça pourrait expliquer cela ... mais dans ce cas, ça génère d'autres incohérences dans ton raisonnement.

    Mais ceci est un détail. En toute logique, tu as un idProduit dans Mproduit, dans mPhotoProduit, et dans MLigne facture.
    Donc même ensupprimant le fichier photo, le problème subsiste.

    Pour moi (pas un pro de la POO), il ne devrait pas y avoir d'héritage dans ta classe Caddie.

    Pour moi, un Caddie, c'est un tableau de plusieurs LigneFacture.
    Plus éventuellement des informations 'annexes' (la date, le lieu,... )

    L'autre problème que je vois, c'est que tu déclares Caddie comme une classe, et dans cette classe, tu as un tableau de Caddie !!!
    Par acquis de conscience, je viens de regarder la doc en diagonale, et je confirme : ça me paraît très louche.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 67
    Points : 62
    Points
    62
    Par défaut
    Merci TBC,
    oui le tableau je vais le changer, c'était juste un essai. Il faut en effet, un tableau de MProduit ou autre mais pas de Caddie.

    J'aurai voulu savoir comment tu t'y aurais pris, avec l'objectif d'avoir un tableau d'une classe pour faire afficher les résultats dans une table.

    Merci.

  4. #4
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 807
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 807
    Points : 5 263
    Points
    5 263
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    1-Avec un diagramme UML tu t'en sortirais mieux.
    2-A priori, la classe photo est incluse dans la classe produit, elle même incluse dans LigneFacture, qui est incluse dans Caddie. Je ne vois pas la notion d'héritage. L'héritage, c'est lorsque tu as (par exemple) un client et en vendeur qui ont des membres en commun (e.g. Nom et prénom) Il y a alors une classe individu (avec pour membres nom, prénom) et client et vendeur héritent de Individu.
    3-Il est préférable de passer les paramètre d'une instance par le constructeur
    4-On n'accède jamais directement aux membres d'une classe, ils sont privés. Il faut passer par des getter (récupération) et des setter (affectation). En WLangage, la propriété fait 2 en 1

    En ce qui concerne ta question, pour afficher le contenu d'un tableau d'instances dans un champ table, il suffit de choisir Alimenté par une variable dans la description.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  5. #5
    Membre habitué Avatar de mous97
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2018
    Messages : 119
    Points : 175
    Points
    175
    Par défaut
    Ta logique n'est juste pas bonne, revoit ta modélisation des données avant tout, ici tu n'a pas à faire d'héritage mais plutôt une déclaration de ces classes en tant qu'objet comme membre de la classe Caddie

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 67
    Points : 62
    Points
    62
    Par défaut
    Merci à tous,
    mention spéciale à Mous qui m'a donné la solution : pour ma problématique, un simple affectation des membres dans caddie et le tour est joué : j'avais zappé ça !

    Désolé j'ai pas pensé à vous afficher mon modèle qui est très simple car c'est un projet test pour manipuler la POO. Voir ci-dessous.

    Voroltinquo, merci pour les notions d'héritage, je suis pas encore au clair là-dessus, et oui on n’accède jamais aux membres des classes car normalement ils sont en privés.
    Par contre quand tu dis que "3-Il est préférable de passer les paramètre d'une instance par le constructeur" ça se fait par défaut via les propriétés ?

    Auriez vous des exemples de prog en objets ? Car windev est un peu à la ramasse avec leurs exemples la plupart sont en procédurale.

    Encore merci pour votre temps et patience

    Nom : MLD.png
Affichages : 94
Taille : 22,6 Ko

  7. #7
    Membre habitué Avatar de mous97
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2018
    Messages : 119
    Points : 175
    Points
    175
    Par défaut
    Je t'en prie, dans d'autres langages de programmation (mention spécial au C# Entity Framework et ado) la modélisation de ton analyse est gérée automatiquement, mais bon sache que lorsque dans ton analyse tu tombes sur des relations avec foreign key, la modélisation en POO c'est de déclaré un objet de cette classe dans la classe correspondante, et dans le cas d'une relation 1-n (Ligne produit par exemple) c'est un tableau de LigneProduit que tu as dans commandes, et dans LigneProduit tu peux déclaré un objet Commande avec une relation faible (<faible>) sinon tu tombes dans une relation cyclique, c'est un peu ambiguë je te l'accorde mais ça vient seul avec l'expérience
    Hésite jamais si tu as des questions.

  8. #8
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 807
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 807
    Points : 5 263
    Points
    5 263
    Billets dans le blog
    1
    Par défaut
    Dans un premier temps, tu ne nous fournit pas un diagramme de classe mais un MLD.
    En ce qui concerne le propriété, il faut les programmer.

    Un petit exemple, la classe CVecteur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CVecteur est une Classe
    	PRIVÉ
    		m_xX est un numérique = 0 //Abscisse
    		m_xY est un numérique = 0 //Ordonnée
    		m_xRho est un numérique = 0 //Module
    		m_xThéta est un numérique = 0 //Phase
    	FIN
    //Utilisé pour différencier les 2 types de coordonnées
    ETypeCoord est une Enumération
    	Rectangulaire
    	Polaire
    FIN
    Comme on ne doit pas accéder directement aux membres ils sont déclarés privés, il faut créer des propriété.
    Le fonction trigonométrique utilisées sont des surchargées afin de travailler normalement (i.e. en Rad). PI a été définit dans cette collection de procédure (ou le composant qui en découle)
    Propriétés:
    Getter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    PROCÉDURE PUBLIQUE p_xX() : numérique
     
    RENVOYER m_xX
    Setter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    PROCÉDURE PUBLIQUE p_xX(xValeur est un numérique)
     
    :m_xX=xValeur
    //Le fait de changer l'abscisse modifie le modue et la phase
    :m_xRho=:CalculerModule(xValeur,:m_xY)
    :m_xThéta=:CalculerPhase(xValeur,:m_xY)
    etc...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FONCTION PRIVÉE CalculerModule(xAbs est numérique,xOrd est numérique):numérique
     
    RENVOYER Racine((Puissance(xAbs,2)+Puissance(xOrd,2)),2)
    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
     
    FONCTION PRIVÉE CalculerPhase(xAbs est un numérique,xOrd est un numérique):numérique
     
    SELON xAbs
    	CAS 0
    		SELON xOrd
    			CAS >0
    				RENVOYER PI/2
    			CAS 0
    				RENVOYER 0
    			CAS <0
    				RENVOYER 3*PI/2
    		FIN
    	CAS >0
    		SELON xOrd
    			CAS >=0
    				RENVOYER ArcTang(xOrd/xAbs)
    			CAS <0
    				RENVOYER ArcTang(xOrd/xAbs)+2*PI
    		FIN
    	CAS <0
    		RENVOYER ArcTang(xOrd/xAbs)+PI
    FIN
    Il nous manque le constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    PROCÉDURE Constructeur(xParam1 est un numérique=0,xParam2 est numérique=0,eType est ETypeCoord=Rectangulaire)
    SELON eType
    	CAS Rectangulaire
    		:m_xX=xParam1
    		:m_xY=xParam2
    		:m_xRho=:CalculerModule(xParam1,xParam2)
    		:m_xThéta=:CalculerPhase(xParam1,xParam2)
    	CAS Polaire
    		:m_xX=xParam1*Cosinus(xParam2)		
    		:m_xY=xParam1*Sinus(xParam2)
    		:m_xRho=xParam1
    		:m_xThéta=xParam2
    FIN
    On peut faire des opération sur les vecteur entre autre l'addition.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    FONCTION Ajouter(clVecteur2 est CVecteur):CVecteur
    clVectRes est CVecteur
     
    clVectRes:p_xX=:p_xX+clVecteur2:p_xX
    clVectRes:p_xX=:p_xY+clVecteur2:p_xY
     
    RENVOYER clVectRes
    Utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    clV1 est CVecteur
    clV2 est CVecteur
    clVRes est CVecteur
     
    clV1=allouer un CVecteur(50,PI/4,CVecteur.Polaire) //Utilisation du constructeur
    TracerVecteur(clV1,BleuFoncé)
    clV2:p_xRho=107
    clV2:p_xThéta=0.79
    clVRes=clV1:Ajouter(clV2)
    TracerVecteur(clVRes,VertFoncé)
    dLigne(IMG_Vecteur,clV1:p_xX,clV1:p_xY,clVRes:p_xX,clVRes:p_xY,RougeFoncé)
    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PROCÉDURE TracerVecteur(clVecteur est CVecteur,nCouleur est entier)
    dLigne(IMG_Vecteur,0,0,clVecteur:p_xX,clVecteur:p_xY,nCouleur)
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  9. #9
    Membre habitué Avatar de mous97
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2018
    Messages : 119
    Points : 175
    Points
    175
    Par défaut
    Personnellement je laisse mes membres public et je déclares des propriétés sur les membres soumis à des règles métiers, je trouve ça trop lourd de déclarer des Getter/Setter pour tous ses membres mêmes alors que 80% n'ont n'en pas besoin

  10. #10
    Membre actif

    Homme Profil pro
    Sans
    Inscrit en
    Mars 2018
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Mars 2018
    Messages : 153
    Points : 295
    Points
    295
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mous97 Voir le message
    Personnellement je laisse mes membres public et je déclares des propriétés sur les membres soumis à des règles métiers, je trouve ça trop lourd de déclarer des Getter/Setter pour tous ses membres mêmes alors que 80% n'ont n'en pas besoin

    Raison de plus pour ne pas les exposer en mettant leur visibilité en public.

  11. #11
    Membre habitué Avatar de mous97
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2018
    Messages : 119
    Points : 175
    Points
    175
    Par défaut
    Citation Envoyé par padbrain Voir le message
    Raison de plus pour ne pas les exposer en mettant leur visibilité en public.
    En public les membres sont accessibles pour les liaisons et les affectations, pas besoin de getter/setter qui n'ont aucune règles métiers dedans frérot

  12. #12
    Membre actif

    Homme Profil pro
    Sans
    Inscrit en
    Mars 2018
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Mars 2018
    Messages : 153
    Points : 295
    Points
    295
    Billets dans le blog
    1
    Par défaut
    Chacun fait bien comme il veut

  13. #13
    Membre habitué Avatar de mous97
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2018
    Messages : 119
    Points : 175
    Points
    175
    Par défaut
    Citation Envoyé par padbrain Voir le message
    Chacun fait bien comme il veut
    "4-On n'accède jamais directement aux membres d'une classe, ils sont privés. Il faut passer par des getter (récupération) et des setter "
    Pas d'après cette règle

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

Discussions similaires

  1. Bouton qui masque un calque et en affiche un autre
    Par Carter dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/11/2006, 16h10
  2. Procedures stockées qui appellent un autre ?
    Par Tchinkatchuk dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 09/05/2005, 09h30
  3. Réponses: 6
    Dernier message: 21/03/2005, 13h22
  4. tableau qui englobe un autre tableau
    Par skea dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 28/12/2004, 13h58
  5. Réponses: 2
    Dernier message: 29/10/2003, 11h05

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