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 :

Interface, objet et affectation


Sujet :

WinDev

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 122
    Points : 81
    Points
    81
    Par défaut Interface, objet et affectation
    Bonjour,

    Soit le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    O est un MaClasse dynamique = allouer MaClasse()
    I est un I_MonInterface <- O
    O2 est un MaClasse dynamique = I // ça plante !
    En sachant que MaClasse implémente l'interface I_MonInterface.

    Sur la troisième ligne, j'obtiens cette erreur : "On ne peut pas affecter à un objet autre chose qu'un objet de la même classe."

    Comment faire en sorte que la dernière affectation fonctionne ?

    Merci d'avance pour votre aide

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 122
    Points : 81
    Points
    81
    Par défaut
    En fait, après avoir poussé un peu mes tests, je réalise que le support des interfaces dans Windev c'est vraiment du grand n'importe quoi.

    On peut passer d'un objet à une interface, mais impossible de faire l'inverse.

    Et PC Soft prétend que Windev supporte la POO.
    Les bras m'en tombent.

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 942
    Points : 1 933
    Points
    1 933
    Par défaut
    Tout le monde sait que la POO dans windev n'st qu'une brique rajoutée sur le procédurale. Pour accepter de l'objet comme on le connait dans quasiment tous les langages, il faudrait presque tout refaire. Ils en sont incapables
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 122
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par philouZ Voir le message
    Tout le monde sait que la POO dans windev n'st qu'une brique rajoutée sur le procédurale. Pour accepter de l'objet comme on le connait dans quasiment tous les langages, il faudrait presque tout refaire. Ils en sont incapables
    Oui tu as raison, et c'est bien triste.
    Que de temps perdu à cause de leurs mensonges marketing et/ou de leur documentation mal fichue. Si ces limitations avaient été documentées explicitement, je me serais passé des interfaces.

    Mais bref, concernant mon problème précis, j'espère malgré tout qu'il y a une bidouille ou une astuce pour contourner cette lacune.

  5. #5
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 942
    Points : 1 933
    Points
    1 933
    Par défaut
    S'il y en a une je ne la connais pas...
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  6. #6
    Membre actif
    Homme Profil pro
    Ingé Indus
    Inscrit en
    Juillet 2014
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingé Indus
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 107
    Points : 241
    Points
    241
    Par défaut
    Bonjour,

    Je ne suis, de loin, PAS un expert en poo.
    Mais pourquoi aurais-t-on besoin de de créer un objet à partir d'une interface ?
    Pour moi cela revient à faire un objet spécifique à partir d'un objet générique. Il faudrait faire un constructeur avec l'interface à recopier en argument.

    De mon coté j'utilise une interface pour faire des traitements commun avec des sources (objet) différents qui implémentent chacun la même interface.
    Et j'en suis satisfait.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 122
    Points : 81
    Points
    81
    Par défaut
    Bonjour Yoshi,

    En fait, je ne cherche pas à créer un objet à partir d'une interface.

    Je souhaite :
    - Créer une instance d'une classe qui implémente une interface (pas de souci, c'est la première ligne du code que j'ai mis en exemple)
    - Pouvoir manipuler cette instance en tant que référence vers cette interface (pas de souci non plus, c'est la seconde ligne du code)
    - Pouvoir, à partir d'une référence vers cette interface, obtenir de nouveau une référence vers la classe de base (c'est la troisième ligne, qui plante)

    Dans mon exemple simplifié, l'utilité n'est pas évidente, mais lorsque l'on souhaite passer des paramètres à des procédures, cela peut être très pratique.

    Windev semble le gérer pour des références vers des instances de classe (on peut les manipuler, les tester, les convertir, sans trop de problème), mais ne le gère pas avec les interfaces (enfin, il le gère à moitié, ce qui, dans mon cas, limite grandement l'intérêt des interfaces).

    Le passage d'une instance d'objet vers une interface est très habituel en POO. L'inverse est plus rare mais supporté (à ma connaissance) par tous les langages objets sérieux.
    (dans un langage comme C# par exemple, la manipulation de référence est transparente, qu'il s'agisse de classes ou d'interface, en toute souplesse et en toute sécurité (je cite C# mais ce n'est pas du tout propre à C#, c'est simplement Windev qui a 20 ans de retard sur ce point))

    Pour la petite histoire, j'en ai besoin ici ... pour pallier d'autres limitations de Windev (entre autres choses, l'absence de généricité, mais c'est encore un autre sujet).

  8. #8
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 810
    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 810
    Points : 5 269
    Points
    5 269
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Si mes souvenir sont bons, cela sefait dans la déclaration de la classe qui va utiliser l'interface via implémente

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CMaClasse est classe
    Implémente I_MonInterface
    etc ...
    Comme O2 est un CMaClasse, il est automatiquement implémenté par I_MonInterface.
    Si tu veux récupérer les méthodes et les propriétés de CMaClasse pour définir l'interface, il faut passer par cette méthode : https://doc.pcsoft.fr/?6010015
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 122
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par Voroltinquo Voir le message
    Bonjour,
    Si mes souvenir sont bons, cela sefait dans la déclaration de la classe qui va utiliser l'interface via implémente
    Merci Voroltinquo,
    Mais ce n'est pas l'implémentation de l'interface dans ma classe qui me pose souci, cette partie là marche très bien :-)

    Citation Envoyé par Voroltinquo Voir le message
    Comme O2 est un CMaClasse, il est automatiquement implémenté par I_MonInterface.
    Plus exactement, si O2 est une instance de CMaClasse qui implémente I_MonInterface, alors j'aurai accès depuis O2 à tout ce qui est déclaré dans I_MonInterface.
    Mais en l'occurrence le problème n'est pas là pour moi

    Citation Envoyé par Voroltinquo Voir le message
    Si tu veux récupérer les méthodes et les propriétés de CMaClasse pour définir l'interface, il faut passer par cette méthode : https://doc.pcsoft.fr/?6010015
    Non, ce n'est pas ce que je veux faire, pas besoin d'utiliser les outils de réflexion ici.

    Cf mes trois lignes de code initiales. Mon problème est que la troisième ligne devrait fonctionner ... mais ne marche pas.

  10. #10
    Membre éclairé
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2017
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2017
    Messages : 329
    Points : 791
    Points
    791
    Par défaut
    Je n'utilise pas les interfaces, mais ne suis absolument pas surpris de l'erreur que tu obtiens.
    Je tenterais un testing pour voir ce que ça donne je suis curieux.

    Pour l'absence de généricité, à tout hasard, regardes si ceci peut t'aider, je l'ai posté il y a quelques temps:
    https://www.developpez.net/forums/d2...typer-tableau/

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 122
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par kunnskap Voir le message
    Je n'utilise pas les interfaces, mais ne suis absolument pas surpris de l'erreur que tu obtiens.
    Je tenterais un testing pour voir ce que ça donne je suis curieux.

    Pour l'absence de généricité, à tout hasard, regardes si ceci peut t'aider, je l'ai posté il y a quelques temps:
    https://www.developpez.net/forums/d2...typer-tableau/

    Bonjour Kunnskap,

    Merci beaucoup, tu m'avais déjà dépanné pour le transtypage de tableau, et j'utilise très souvent ta technique, qui est très puissante, permet de faire des choses sympas et, dans une certaine mesure, de pallier l'absence de généricité au niveau du langage.

    Malheureusement, dans certains cas, l'absence de véritable polymorphisme paramétrique (comme ce que l'on peut trouver en c# ou en java) est trop coûteuse à contourner

  12. #12
    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 fred_malette Voir le message
    Bonjour,

    Soit le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    O est un MaClasse dynamique = allouer MaClasse()
    I est un I_MonInterface <- O
    O2 est un MaClasse dynamique = I // ça plante !
    En sachant que MaClasse implémente l'interface I_MonInterface.

    Sur la troisième ligne, j'obtiens cette erreur : "On ne peut pas affecter à un objet autre chose qu'un objet de la même classe."

    Comment faire en sorte que la dernière affectation fonctionne ?

    Merci d'avance pour votre aide
    Salut, oui il existe une solution tous les problèmes de type en objet avec windev

    O2 est un MaClasse dynamique = I // ça plante ![/CODE]
    Type juste ton O2 en objet dynamique : O2 est un objet dynamique = I (tu perdra l'auto-complétion étant donné que l'objet est typé en objet dynamique mais ça marche)

  13. #13
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Points : 4 681
    Points
    4 681
    Billets dans le blog
    22
    Par défaut
    Hello,

    As tu essayé avec cette ligne en changeant l'opérateur d'affectation ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    O2 est un MaClasse dynamique <- I
    Bon dev
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 122
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par mous97 Voir le message
    Salut, oui il existe une solution tous les problèmes de type en objet avec windev

    O2 est un MaClasse dynamique = I // ça plante ![/CODE]
    Type juste ton O2 en objet dynamique : O2 est un objet dynamique = I (tu perdra l'auto-complétion étant donné que l'objet est typé en objet dynamique mais ça marche)
    Cela ne fonctionne pas mieux, l'affectation plante de la même manière

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 122
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par dsr57 Voir le message
    Hello,

    As tu essayé avec cette ligne en changeant l'opérateur d'affectation ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    O2 est un MaClasse dynamique <- I
    Bon dev
    Merci, déjà essayé, même plantage !

    Windev et les interfaces, il vaut mieux oublier

  16. #16
    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 fred_malette Voir le message
    Cela ne fonctionne pas mieux, l'affectation plante de la même manière

    Oups je me suis trompé c'est pas "O2 est un objet dynamique = I" mais "O2 est un objet dynamique <- I"

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 122
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par mous97 Voir le message
    Oups je me suis trompé c'est pas "O2 est un objet dynamique = I" mais "O2 est un objet dynamique <- I"
    Merci !
    ... mais ça ne fonctionne toujours pas chez moi.

  18. #18
    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 fred_malette Voir le message
    Merci !
    ... mais ça ne fonctionne toujours pas chez moi.
    Les objets dynamique ont toujours fait l'affaire pour moi quand je dois transtyper... Peut-être serai-ce du au interface ? De toute façon La POO dans windev ne gère pas le DownCasting voir même le UpCasting (Aberrant ahahahahah )

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 122
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par mous97 Voir le message
    Les objets dynamique ont toujours fait l'affaire pour moi quand je dois transtyper... Peut-être serai-ce du au interface ? De toute façon La POO dans windev ne gère pas le DownCasting voir même le UpCasting (Aberrant ahahahahah )
    Le support de la POO dans Windev est très limité, c'est vrai.
    Mais là ce que tu dis est faux :

    Le downcasting est tout à fait supporté, implicitement. (c'est à dire le transtypage d'un objet instance d'une classe FILLE vers une instance de classe MERE, FILLE dérivant de MERE)

    Le upcasting est un peu plus acrobatique mais supporté également.

    En revanche, quand on manipule des interfaces, c'est une autre paire de manche (j'ai lâché l'affaire pour ma part).

  20. #20
    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 fred_malette Voir le message
    Le support de la POO dans Windev est très limité, c'est vrai.
    Mais là ce que tu dis est faux :

    Le downcasting est tout à fait supporté, implicitement. (c'est à dire le transtypage d'un objet instance d'une classe FILLE vers une instance de classe MERE, FILLE dérivant de MERE)

    Le upcasting est un peu plus acrobatique mais supporté également.

    En revanche, quand on manipule des interfaces, c'est une autre paire de manche (j'ai lâché l'affaire pour ma part).
    Montre moi comment le DownCasting est géré alors je te confirme que ce n'est pas le cas.

Discussions similaires

  1. Problème d'interface objets externes avec GUID
    Par asecos dans le forum Langage
    Réponses: 3
    Dernier message: 23/11/2019, 08h19
  2. Diagramme et interface objet à la Delphi ..
    Par 4Ur3L dans le forum GUI
    Réponses: 1
    Dernier message: 13/11/2009, 20h35
  3. [Facade] Donner une interface objet à une librairie Java, quel est ce pattern ?
    Par Pierre8r dans le forum Design Patterns
    Réponses: 3
    Dernier message: 28/10/2008, 12h19
  4. Développement Bdd et Interface Objet
    Par Loric dans le forum Débuter
    Réponses: 2
    Dernier message: 29/12/2007, 19h06
  5. Réponses: 2
    Dernier message: 29/10/2003, 23h47

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