オブジェクト指向 JSL - 例?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />ディスカバリーカンファレンスヨーロッパでドリュー・フォリアが行った素晴らしい講演に続いて (オブジェクト指向 JSL – 保守可能/拡張可能な JSL コードを作成するためのテクニック)、初めてのオブジェクト指向 JSL を作成しようとしています。
ObjectClass.jsl (Drew が提供するコア サンプル ファイルから) を使用して、作成したオブジェクトのプロパティを取得および設定できます。
私の質問は、このアイデアを実装する方法を確認するために共有できる簡単な例を持っている人はいるかということです。 たとえば、次の例はオブジェクトとしてどのように見えるでしょうか (現実世界では、次のような詳細を保存したいと思う可能性が高いことを考慮して)テーブル名、いいえ。コル、列名、いいえ。各テーブルの行、ラベル列など)?
NamesDefaultToHere(1);
dt1 = Open("$SAMPLE_DATA/Cars.jmp");
dt2 = Open("$SAMPLE_DATA/Cars 1993.JMP");
// テーブルを結合します (一致する列名を見つけるために何らかの関数が使用されたと仮定します)
dt3 = データテーブル( dt1 ) << 結合(
With( データテーブル( dt2 ) )、
同じ名前の列を結合、
列のマッチングによる( Column(dt1,1) = Column(dt2,1), Column(dt1,2) = Column(dt2,2) )、
倍数 ( 0, 0 ) を削除します。
不一致を含める( 0, 0 )、
メインテーブルの順序を保持する( 1 )
);
//結果を表示
win1 = dt3 << グラフ ビルダー(
サイズ(534、447)、
コントロールパネルを表示(0)、
変数( X( :サイズ ), Y( :名前( "ホイールベース (インチ)" ) ) )、
要素( 点( X, Y, 凡例( 38 ) )、箱ひげ図( X, Y, 凡例( 39 ) ) )
);
//片付ける
win1 << 閉じる時(dt1 <<ウィンドウを閉じる;dt2 <<ウィンドウを閉じる; dt3 << ウィンドウを閉じる(保存なし) );
新しいクラスの作成はいつ決定しますか? どのプロパティをどのキーに割り当てたかを覚えていれば、汎用の ObjectClass がテーブルに対して問題なく機能します。
ありがとう、
スティーブン
Re: オブジェクト指向 JSL - 例は?ドリューフォグリア
まず第一に、私はこれに込められた細部が大好きです。私が悪魔の代弁者を演じても構わないのであれば、関数が名前空間を返すときに、なぜ最上位の名前空間を作成するのでしょうか?名前空間はスタックされず、1 つを除くすべての例では、その名前空間内の唯一の関数はインスタンス化関数です。クラスは名前でインスタンス可能であるべきで、ObjectClass:newObject() の代わりにすべてがその中にあるべきだと思います。ただあなたの思考プロセスに興味があります。
私はしばらくオブジェクト指向のものを嘲笑してきましたが、あなたの「this=namespace(expr(ns<
ありがとう、
ヴィンス
Re: オブジェクト指向 JSL - 例は?スティーブン・ピアソン
知っているドリューフォグリアすでにあなたの質問に回答されていますが、回答を作成中だったので、価値があるものとして提示することにします。
まず、私の意見では、データテーブル自体はすでにオブジェクトとして考えることができます。
dt1 = NewTable() - Datatable の新しい「インスタンス」を作成します
ShowProperties(dt1) - Datatable オブジェクト dt1 のすべての「プロパティ」と「メソッド」を表示します。
Drew の返信のように、追加のプロパティとメソッドを使用して既存の Datatable オブジェクトを「拡張」することを考えることができます。 次のような追加機能を考えました。
1. 行状態ハンドラー。
2. 列と行、追加/削除の検出。
3. 表のセルの変更履歴。
4. データボックス(ディスプレイボックス)
したがって、DatatableObject の可能な「コンストラクター」は、メンバー変数と関数が宣言されているようになります。 (Expr( New Namespace() に注意してください)。
この方法でオブジェクトを宣言する背後にある考え方は、複製可能なエンティティを確立するだけでなく、完全に定義された後に使用できるようになる関数と式の名前を明確に確認できるようにすることです。

私のバージョンの NewDatatableObject (部分的なリスト)。 実際にメンバー関数が定義されている場所は次のとおりです。


たとえば、DatatableObject の 2 つの別々のインスタンスを作成します。

これらのテーブルには「拡張」プロパティが組み込まれています。 この例では、行の選択や列/行の削除の検出など、いくつかのテーブル アクションが追跡されます。


この方法を使用して実装できる他の便利な関数のホストも想像できます。
Re: オブジェクト指向 JSL - 例は?こんにちは、フィリップ
とても微妙です。 DataTableClass 定義の 30 行目を見ると、次のようになります。

super はローカル変数 (関数のライフサイクルにスコープ設定) として定義されており、既存の deleteChildReferences 関数の DEFINITION が割り当てられています。
もう一度読んでください。
別の言い方をしましょう。 名前空間にはすでに関数 deleteChildReferences があります (これは ObjectClass.jsl に定義されており、6 行目の ObjectClass:newObject() 呼び出しが実行されるときに割り当てられます)。 DataTableClass では、29 行目がその割り当てを置き換えています。 ただし、再割り当てのプロセスでは、元の関数定義 (ObjectClass で宣言された関数定義) への参照を保持するローカル変数 "super" を作成しています。 このようにして、その関数の動作をオーバーライドし、この場合はテーブル参照を閉じるコードを追加し、その後も super() 呼び出しを使用して元の関数宣言を呼び出すことができます。
Re: オブジェクト指向 JSL - 例は?ドリューフォグリア、
本当に助かりました、ありがとう。 現在のプロジェクトには非線形のインタラクションがあるため、このアプローチにより、ユーザーから収集しているメタデータをより簡単に操作できるようになると思います。
Re: オブジェクト指向 JSL - 例は?ドリューフォグリア
見逃していたらごめんなさい、「super()」はどこにあるのでしょうか?定義されていますか?
Re: オブジェクト指向 JSL - 例は?スティーブン・ピアソン、
返信までに時間がかかってしまい申し訳ございません。 あなたが提供した例として、「クラス」定義とその使用例を示します。 これが必要かどうかを検討することが重要です。 ご指摘のとおり、「新しいクラスをいつ作るか決めるのですか?」 私のプレゼンテーションを思い出していただけると思いますが、私は、OO 構造が最良のアプローチであるかどうかを判断する前に、プロジェクトの規模、共同開発、寿命、再利用の必要性などを考慮する必要があると提案しました。 対応させていただきますムシャープのコメントには、そのトピックに関する詳細が含まれています。
あなたの例に戻りましょう。 必須ではありませんが、ObjectClass を親クラスとして使用して、DataTableClass を作成できます。

DataTableClass インスタンスのフィールドの使用法は次のようになります。

このような単純な例では、OO 構造を使用する理由はありません。 ただし、テーブルのコレクションを管理し、ユーザーと外部システムがコメントやその他の属性を追加できるようにし、これらのコレクションを渡し、特定のイベントを処理して応答し、将来の拡張と拡張を計画し、他の人がこれらのテーブルを簡単に利用できる「コントラクト」など。その場合、このような OO 構造を使用することは非常に有益です。
Re: オブジェクト指向 JSL - 例は?誤解しないでください。OOP は優れたコードを生成する優れた方法論ですが、FP も同様です。経験豊富なプログラマーであれば、FP の方法で必要な品質のコードを生成できるでしょう。擬似 OOP の儀式は、実行すべきというよりも、実行できるかどうかの演習です。あなたが OOP しか知らない中級プログラマーで、慣れ親しんだ方法でコーディングしたい場合は、FP を学ぶことをお勧めします。これは、成長し、考え方を変え、多くの言語でより適切にプログラミングするのに役立ちます。あなたが FP しか知らない中級プログラマーで、視野を広げるために OOP を学びたいと考えている場合は、実際に言語内にクラスとオブジェクトが実装されている別の言語を学ぶことから始めることをお勧めします。もしあなたが本当に何も知らない初心者プログラマーで、OOP が素晴らしいと聞いただけなら、私のアドバイスを受け入れて、今は忘れてください。特に、主に JSL でスクリプトを作成する場合はそうです。
個人的には、JMP がクラスとオブジェクトを実装して真の OOP が実現されるまで待ちたいと思います。それが彼らのレーダーに含まれているかどうかはわかりませんが、私はそれが起こると確信しています。つまり、今では JavaScript にクラスとオブジェクトがあります。未来がどうなるかは決して分かりません。
Re: オブジェクト指向 JSL - 例は?スティーブン・ピアソン、
このトピックに興味を持っている人が他にもいるのを見てとてもうれしいです。ムシャープJSL は OOP 言語ではないという意見は正しいです。 しかし、最近では、JSL で「疑似 OOP」構造を実現できるようになりました。 私の作品を皆さんと共有できることを嬉しく思います。 あなたが投げかけた質問に対して適切な返答ができるかどうか試してみます... 待機する
フィル
Re: オブジェクト指向 JSL - 例は?私の 2 セントだけ: その講演で学んだことはすべて忘れてください。
JSL はオブジェクト指向言語ではありません。OOP はデータ構造が組み込まれていない言語には最適ですが、プログラミングの唯一の方法というわけではありません。ただし、Java、C++、C# のバックグラウンドを持つプログラマーのほとんどは、非 OOP 方法でのプログラミングに頭が下がります。JMP では、データ構造はデータ テーブルに任せるのが最善です。これにはメリットとデメリットが伴います。私の意見では、JSL データ テーブルからフランケンシュタイン オブジェクトをハッシュ化することはできますが、その場合は欠点ばかりが残り、利点は何もありません。
JSLとは私S関数型プログラミングが得意です。JSL は関数 AND 式をサポートします。関数型プログラミングを使用して、必要なことをすべてクリーンに実行できます。2 つのプログラミング方法を比較した長所と短所については、この記事をご覧ください。コード初心者