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

Flash Pascal Discussion :

Cas de conscience sémantique


Sujet :

Flash Pascal

  1. #1
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut Cas de conscience sémantique
    Bonjour,

    Je vous soumets un cas de conscience ... peut-être aurez vous une idée que je n'ai pas envisagé.

    actuellement FlashPascal déclare les évènements comme des propriétés de type "procedure of object.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    type
      MovieClip = external class
        property onPress: procedure of object;
      end;
     
    var
      mc: MoveClip;
    begin
      mc := MovieClip.Create(_root, '', 1);
      mc.onPress := ...
    end;
    c'est tout à fait fonctionnel...mais de par la conception de FlashPascal et la nature de Flash, il est possible de dériver MovieClip avec une méthode onPress

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    type
      MyMovie = class(MovieClip)
        procedure onPress;
      end;
    cela donne deux approches et je trouve cela un peu confus, j'aimerai donc trouver une syntaxe qui permette de faire sauter cela.

    J'ai pensé à ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    type
      MovieClip = external class
        procedure onPress; virtual;
      end;
     
      MyMovie = class(MovieClip)
        procedure onpress; override; // n'a plus besoin d'être case sensitive
      end;
    grâce au virtual/override, seule la méthode virtuelle a besoin d'avoir la bonne casse, la casse de la méthode surchargeant étant ignorée. Et on est assuré d'avoir correctement tapé le nom de la fonction.

    mais on perd la possibilité d'attacher la méthode "mc.onPress := ...".

    je me suis dit que je pouvais étendre la syntaxe pascal en autorisant d'affecter une méthode virtuelle et le tour est joué.


    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
     
    type
      MovieClip = external class
        procedure onPress; virtual;
      end;
     
      MyMovie = class(MovieClip)
        procedure onpress; override; // n'a plus besoin d'être case sensitive
        procedure autrepress;
      end;
     
    var
      mc: MyMovie;
    begin
       mc := MyMovie.Create(_root, '', 1);
       mc.onpress := autrepress;
    end;
    alors, ça fonctionne, mais c'est sémantiquement très discutable. En effet, la méthode avec override intervient au niveau de la classe, donc toutes les instances de MyMovie utilisent ce code...alors qu'en affectant "autrepress" à "onpress" on travaille au niveau de l'instance; les autres instances ne sont pas affectées.

    c'est d'autant plus troublant que j'ai fait le test avec XML sous ActionScript, et ça fonctionne.

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    //-- TXML.as
    class TXML extends XML {
    	function onData(src: String) {
    		trace('class');
    	}
    }
    //---
    var x1 : TXML = new TXML();
    var x2 : TXML = new TXML();
    x2.onData = function(src: String) {
    	trace('instance');
    }
    x1.load('TXML.as'); // class
    x2.load('TXML.as'); // instance

    Alors est-ce que cette syntaxe avec virtual/override vous choque ?
    Avez vous une autre idée pour gérer cette dualité propriété/méthode ?

    Notez qu'avec cette modification, il faudra ajouter un "override" à toutes les méthodes surchargée dans le code existant...à moins que je n'inclus des warning...
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  2. #2
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Hello,


    Personnellement, l'histoire de casse est vraiment problématique. J'ai encore été empoisonné hier avec le trackbar pour une erreur qui était liée à cela.
    Ton cas de conscience risque de choquer les puristes en Pascal mais ton entorse arrangerait très bien les choses...
    Moi personnellement, ça ne me dérange pas mais ce serait intéressant d'avoir le point de vue des responsables Pascal.
    Le désagrément lié à la casse pour moi l'emporte sur le fait de transgresser les règles. (mais c'est un point de vue personnel...)
    Une autre solution ?...A part des warning...
    Si les warning apparaissent de manière efficace au moment où on tape avec une mauvaise casse, j'y suis favorable (avec la bonne syntaxe qui apparaisse à l'écran ou même avec une insertion automatisée). Ce qui serait sans doute encore la meilleure méthode peut-être.

    voilà

  3. #3
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    c'est ce qu'il me semble, d'autant que j'ai tendance à plus utiliser la version "override" que l'affectation d'un évènement.

    après cela ne serait sans doute pas compatible avec ActionScript 3 (quand FlashPascal fera du Flash 11)...mais en même temps il risque d'y avoir bcp d'incompatibilité entre FlashPascal 2 et 3...ne serait-ce que parceque AS2 et
    3 ne tournent pas dans la même machine virtuelle et qu'on ne retrouve pas tous les objets AS2 en AS3.

    bon je me donne entre le temps de la réflexion
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

Discussions similaires

  1. Cas de conscience, besoin d'éclaircissements
    Par Spirale21 dans le forum Emploi
    Réponses: 9
    Dernier message: 13/11/2014, 20h57
  2. Réponses: 9
    Dernier message: 03/04/2014, 15h14
  3. [corba] débutant : dans quels cas l'utiliser
    Par jmturc dans le forum CORBA
    Réponses: 2
    Dernier message: 10/10/2002, 08h58

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