JSL orienté objet - Exemples ?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Après le grand discours que Drew Foglia a donné lors de la conférence découverte Europe ( JSL orienté objet - Techniques d'écriture de code JSL maintenable / extensible ), j'essaie d'écrire mon premier JSL orienté objet.
Je peux utiliser ObjectClass.jsl (à partir des fichiers d'exemple de base fournis par Drew) pour obtenir et définir les propriétés d'un objet que j'ai créé.
Ma question est de savoir si quelqu'un a des exemples simples à partager pour voir comment cette idée est mise en œuvre. Par exemple, comment l'exemple suivant pourrait-il ressembler à des objets (étant donné que dans le monde réel, je suis susceptible de vouloir stocker des détails tels que nom de la table, Non. cols, noms de colonnes, Non. lignes, colonnes d'étiquettes, etc. pour chaque tableau) ?
NamesDefaultToHere(1);
dt1 = Ouvrir("$SAMPLE_DATA/Cars.jmp");
dt2 = Ouvrir("$SAMPLE_DATA/Cars 1993.JMP");
//joindre des tables (en supposant qu'une fonction a été utilisée pour trouver les noms de colonnes correspondants)
dt3 = Table de données( dt1 ) << Join(
Avec( Table de données( dt2 ) ),
Fusionner les colonnes du même nom,
Par colonnes correspondantes (Colonne(dt1,1) = Colonne(dt2,1), Colonne(dt1,2) = Colonne(dt2,2)),
Déposez les multiples( 0, 0 ),
Inclure les non-correspondances (0, 0),
Conserver l'ordre de la table principale( 1 )
);
// affiche le résultat
win1 = dt3 << Générateur de graphes(
Taille (534, 447),
Afficher le panneau de configuration ( 0 ),
Variables( X( :Taille ), Y( :Nom( "Empattement (pouces)" ) ) ),
Éléments( Points( X, Y, Legend( 38 ) ), Box Plot( X, Y, Legend( 39 ) ) )
);
//ranger
win1 << On Close(dt1 <
Quand déciderais-je de créer une nouvelle classe ? L'ObjectClass générique fonctionnerait très bien pour les tables à condition que je puisse me rappeler quelle propriété j'ai attribuée à quelle clé!
Merci,
Étienne
Re : JSL orienté objet - Exemples ?dandfoglia
Tout d'abord, j'aime les détails que vous y mettez.Si cela ne vous dérange pas que je joue l'avocat du diable, pourquoi créez-vous l'espace de noms supérieur lorsque la fonction renvoie un espace de noms ?Les espaces de noms ne s'empilent pas et dans tous vos exemples sauf un, la seule fonction de cet espace de noms est une fonction d'instanciation.Je pense juste que la classe devrait pouvoir être instanciée par son nom et que tout devrait être à l'intérieur, donc au lieu de ObjectClass:newObject().Je suis juste curieux de connaître votre processus de réflexion.
Je me moque des trucs orientés objet depuis un moment, mais votre "this=namespace(expr(ns<
Merci,
vince
Re : JSL orienté objet - Exemples ?stephen.pearson
Je sais dandfoglia déjà répondu à votre question, cependant, j'étais en train de rédiger une réponse, je vais donc la présenter pour ce qu'elle vaut.
Premièrement, à mon avis, le datatable lui-même peut déjà être considéré comme un objet.
dt1 = NewTable() - Crée une nouvelle "instance" de Datatable
ShowProperties(dt1) - Affiche toutes les "propriétés" et "méthodes" pour l'objet Datatable dt1.
On peut penser à "étendre" l'objet Datatable existant avec des propriétés et des méthodes supplémentaires, comme dans la réponse de Drew. J'ai pensé à avoir des fonctionnalités supplémentaires comme:
1. Gestionnaire d'état de ligne.
2. Colonne et ligne, détection d'ajout/suppression.
3. Historique des modifications des cellules du tableau.
4. Databox (Displaybox)
Ainsi, un "constructeur" possible pour le DatatableObject pourrait ressembler à, où les variables membres et les fonctions sont déclarées. (notez le Expr( New Namespace() ).
L'idée derrière la déclaration de l'objet de cette façon n'est pas seulement d'établir une entité réplicable, mais permet également de voir clairement les fonctions et les noms d'expression qui deviendront utilisables une fois qu'ils seront entièrement définis.

Ma version de NewDatatableObject (liste partielle). Voici où les fonctions membres sont réellement définies :


Ainsi, par exemple, nous créons 2 instances distinctes de DatatableObject :

Ces tables ont maintenant des propriétés "étendues" intégrées. Dans cet exemple, certaines actions de table sont suivies, telles que la détection de la sélection de lignes et les suppressions de colonnes/lignes.


On peut également imaginer une foule d'autres fonctions utiles qui pourraient être implémentées à l'aide de cette méthode.
Re : JSL orienté objet - Exemples ?Bonjour, Philippe
C'est très subtil. Si vous regardez la ligne 30 de la définition DataTableClass, vous verrez ceci :

super est défini comme une variable locale (portée au cycle de vie de la fonction) et se voit attribuer la DEFINITION de la fonction deleteChildReferences déjà existante.
Relisez cela.
Permettez-moi de le dire d'une autre manière. Il existe déjà une fonction, deleteChildReferences, sur l'espace de noms (défini dans ObjectClass.jsl qui est inclus et est affecté lorsque l'appel ObjectClass:newObject() sur la ligne 6 s'exécute). Dans DataTableClass, la ligne 29 remplace cette affectation. Cependant, dans le processus de réaffectation, nous créons une variable locale "super" qui contient une référence à la définition de fonction d'origine - celle déclarée dans ObjectClass. De cette façon, nous redéfinissons le comportement de cette fonction, en ajoutant du code pour fermer la référence de table dans ce cas, et nous pouvons toujours appeler la déclaration de fonction d'origine à l'aide de l'appel super().
Re : JSL orienté objet - Exemples ?dandfoglia ,
C'était vraiment utile, merci. Mon projet actuel a des interactions non linéaires, donc je pense que cette approche me permettra plus facilement de jongler avec les métadonnées que je collecte auprès des utilisateurs.
Re : JSL orienté objet - Exemples ?dandfoglia
Pardonnez-moi si j'ai raté cela, mais où est "super()?" défini ?
Re : JSL orienté objet - Exemples ?stephen.pearson ,
Je m'excuse d'avoir mis autant de temps à répondre. Je vais donner un exemple de définition de "classe", et son utilisation, pour l'exemple que vous fournissez. Il est important de considérer si vous voudriez / avez besoin de cela. Comme vous l'avez souligné, "quand décideriez-vous de créer une nouvelle classe ?" Comme vous vous en souvenez peut-être de ma présentation, j'ai suggéré que la taille du projet, le développement collaboratif, la longévité, le besoin de réutilisation, etc. devraient être pris en compte avant de déterminer si les constructions OO sont la meilleure approche. je vais répondre à msharp avec plus d'informations sur ce sujet.
Revenons à votre exemple. En utilisant ObjectClass comme classe parente, bien que non obligatoire, nous pourrions créer une DataTableClass :

L'utilisation des champs pour les instances DataTableClass ressemblerait à :

Pour un exemple aussi simple, il n'y aurait aucune raison d'utiliser les constructions OO. Toutefois, si vous deviez envisager un cas où vous souhaitiez gérer des collections de tables, permettre aux utilisateurs et aux systèmes externes d'ajouter des commentaires et d'autres attributs, transmettre ces collections, traiter et répondre à des événements donnés, planifier une expansion et une extension futures, établir un "contrat" par lequel d'autres peuvent facilement consommer ces tables, etc. Ensuite, l'utilisation de constructions OO telles que celles-ci est très bénéfique.
Re : JSL orienté objet - Exemples ?Ne vous méprenez pas.OOP est une excellente méthodologie qui produit un code superbe, cependant, FP est le même.Si vous êtes un programmeur expérimenté, vous serez en mesure de produire la qualité de code nécessaire de manière FP et w riting pseudo-OOP est plus un exercice pour savoir si cela peut être fait que si cela doit être fait.Si vous êtes un programmeur intermédiaire qui ne connaît que la POO et que vous souhaitez coder de manière familière, je vous recommande d'apprendre FP car cela vous aidera à grandir, à penser différemment et à mieux programmer dans de nombreuses langues.Si vous êtes un programmeur intermédiaire qui ne connaît que FP et que vous souhaitez apprendre la POO pour élargir vos horizons, je vous recommande de commencer par apprendre un autre langage qui a en fait des classes et des objets implémentés dans le langage.Si vous êtes un programmeur novice qui ne sait vraiment rien et que vous venez d'entendre que la POO est cool, alors suivez mon conseil et oubliez-le pour l'instant.Surtout si vous allez écrire des scripts principalement en JSL.
Personnellement, j'attendrais que JMP implémente des classes et des objets, afin que la vraie POO puisse être réalisée.Je ne sais pas si c'est même sur leur radar, mais je suis sûr que cela arrivera, je veux dire, nous avons maintenant des classes et des objets en JavaScript.Vous ne savez jamais ce que l'avenir vous réserve.
Re : JSL orienté objet - Exemples ?stephen.pearson ,
Je suis tellement content de voir que quelqu'un d'autre s'intéresse à ce sujet. msharp a raison de dire que JSL n'est PAS un langage POO. Mais, dans un passé récent, j'ai pu réaliser des constructions "pseudo-OOP" en JSL. Je suis heureux de partager mon travail avec vous. Je vais voir si je peux élaborer une réponse appropriée à la question que vous avez posée... Etre prêt
Phil
Re : JSL orienté objet - Exemples ?Juste mes 2 cents : oubliez tout ce que vous avez appris dans cette conversation.
JSL n'est PAS un langage orienté objet.La POO est idéale pour les langages qui n'ont pas de structures de données intégrées, mais c'est loin d'être la seule façon de programmer.Cependant, la plupart des programmeurs venant d'un milieu Java, C++, C# ne peuvent pas comprendre la programmation de manière non-OOP.Dans JMP, il est préférable de laisser les structures de données aux tables de données.Cela vient avec des avantages et des inconvénients.À mon avis, vous POUVEZ hacher ensemble un objet Frankenstein à partir de la table de données JSL, mais vous vous retrouvez alors avec tous les inconvénients et aucun des avantages.
Qu'est-ce que JSL je S doué pour la programmation fonctionnelle.JSL prend en charge les fonctions ET les expressions.Il peut faire tout ce dont vous avez besoin proprement en utilisant une programmation fonctionnelle.Consultez cet article pour connaître les avantages et les inconvénients comparant les deux méthodes de programmation : CodeNouveau