Smart CODE
生成済みコードに関するオンラインガイド

グループとスマートコードの概要


概要

従来の X および Motif プログラムは大型アプリケーションです。最新の Java プログラムおよびその他のインターネットテクノロジにより、リモートに保存されたデータを利用できる軽量のインタフェースのみのクライアントである thin クライアントを使用した方法が可能になりました。 

使用しているアプリケーションは、いつでも軽量インタフェース層を持つように構成することができますが、旧バージョンの X-Designer では、その作業を簡単にすることはできませんでした。X-Designer は、コールバックスタブを生成するだけで、ユーザーがこれを使用して必要な処理を行なっていました。 

しかし、その処理は簡単なものではありませんでした。ほとんどのユーザーが直面する最初の問題は、Motif アプリケーションプログラミングの難しさです。しかも、クライアント-サーバー構造が必要な場合はさらに複雑になります。 

X-Designer 7 の場合は、"インターネット対応" ソリューションを採用しています。したがって、ツールキットをプログラミングしなくても、X-Designer アプリケーションを実行するコードを記述することができます。 

このコードは、アプリケーション内部で実行することも、Web サーバー上でリモートに実行することもできます。 

今では、X-Designer 7 を使用すれば、Motif thin クライアントインターネットアプリケーションを HTML および CGI 書式のシステムや java applet および servlet アーキテクチャと同様に簡単に開発することができます。 
実際には、可能な限り最適な方法を選択してください。最新の開発を行う場合は、 Java テクノロジを使用するのが適切です。一方、書式を単純にしたい場合は、HTML が効果的です。既存のソフトウェアをほかのイントラネットで使用したり、Web 上で使用できるように拡張したい場合、X-Designer でそれがインターネットに対応できるようになりました。費用のかかる書き直しは不要です。

X-Designer 7 には、3 つの新しいテクノロジがあり、これらを組み合わせてインターネット対応ソリューションを提供します。たとえインターネット対応のアプリケーションを作成する必要がない場合でも、基盤となる機能は、それだけで独立して使用できる便利な機能です。 

  • グループ 
  • getter および setter 
  • インターネット対応スマートコード
  • インターネット対応の利点は ?

    第一に、選択肢が与えられます。 

    コールバックは、必ずしもアプリケーション内に存在している必要がありません。 

    データがある場所ならどこにでもコールバックを置くことができます。どの Web サーバーのどこにコールバックを置いても、あらゆる CGI プログラムと同様に実行されます。 

    X-Designer 7 は、コールバックに関連して完全に機能する CGI プログラムを作成するために必要なラッパーコードをすべて生成します。 

    現時点ではこのような柔軟性は必要ないとしても、X-Designer へのインターネット対応拡張機能を使用することで、全機能を備えた重要な X アプリケーションオーダーの記述が大幅に簡略化されます。さらに、将来新しいテクノロジへの移行を行うことになったときに、簡単に実現できます。

    グループから始める

    グループとは

    簡単に言うと、グループはウィジェットの集合体です。1 つのフォームを設計したと仮定します。すべてのデータ入力フィールドを同じグループのフォーム部分に作成し、それに form_fields という名前を付けます。 

    こうすると、アクセスと更新に必要なコントロールがすべて含まれているデータ構造を使用する場合、インタフェースのプログラミングがより簡単になります。これがグループの利点です。 

    どのウィジェットも、複数のグループのメンバーにすることができます。このことに関して、特に制限はありません。ただし、グループの目的は、オプションメニュー、テキストフィールド、ラジオボックス、トグルなどのユーザーインタフェースコントロールのプログラミングをサポートすることにあるため、フォーム、行列、領域などをグループのメンバーに含めた場合、(便利であるという以外には) ほとんど効果が得られません。

    グループを作成する

    手順 1. グループを構成するウィジェットを選択します。
    階層内で最初のウィジェットをクリックして選択します。
    グループに追加するほかのウィジェットを Shift キーを押しながらクリックして選択します。
    手順 2. 「新規グループに追加」ツールバーボタン(ウィジェットを表す複数の赤い四角が表示されているボタン)を押します。
    新しいグループが選択されている状態でグループエディタが開きます。これを使用して、必要に応じて、group0、group1 の代わりによりわかりやすいグループ名を付けることができます。 

    ダイアログの左下の「適用」ボタンは、グループエディタを「リンク編集」または「コールバック」ダイアログから呼び出したときに、選択を行う場合にだけ使用します。

    グループエディタ

    グループエディタによって、各グループに含まれるコンポーネント全体を参照し、完全な制御ができます。 

    左側の領域には、作成したグループが表示されます。ここでグループを選択し、「名前」フィールドに新しい名前を入力してグループ名を変更することができます。 

    「選択」ボタンを使用すると、(手作業で複数選択を行なった場合と同様に) グループ内の全要素を選択できます。 

    右側には、グループ内のコンポーネントの詳細が表示されます。 

    右側の上部には、デザインの中でグループを構成する要素であるインタフェース構成要素が表示されます。 

    右側の下部には、その他のデータが表示されます。この部分と、「公開」および「非公開」ボタンは、スマートコード生成にのみ関連しています。グループをデータ構造として考えた場合、そのデータ構造に特別な要素を追加するときに、その便利さを認識できます。これについては、後で詳細に説明します。

    グループと複数選択

    複数選択を使用して、リソース設定を体系的に変更する場合、その複数選択をグループとして保存できます。次にこれらのウィジェットを再度選択するときは、グループエディタで「選択」ボタンを押すだけで選択できます。

    グループ要素のサブセットの選択だけを行う場合は、グループエディタでこれらの要素を選択し、「インターネット構成要素」リストの右側にある「選択」ボタンを押します。

    グループとリンク編集

    リンク編集は、ボタンが押されたときに特定のウィジェットに対して非表示、表示、応答などを行うようにするための手法です。動作方法をプログラミングする必要はありません。X-Designer によって自動的にコードが生成されます。 

    あるボタンを押したときに、5 つのコンポーネントが応答するように設定したいと仮定します。これらの 5 つのコンポーネントを 1 つのグループにして、(リンク編集ダイアログで) そのグループをリンクのターゲットとして選択します。個々に 5 回リンクを設定する必要はありません。リンクはグループに対して設定されるため、そのグループにコンポーネントを追加した場合、追加したコンポーネントも応答するようになります。

    グループとコード生成

    デザインにグループを使用する主な理由は以下の通りです。グループは、ソリューション指向のコード生成のための基盤になります。そこで X-Designer の提供するスマートコードを使用すると、ダイアログに要素をワイヤする処理をすばやく簡単に行えるようになります。もちろん、要素はすべてグループ内に作成されます。
    グループとスマートコードは万能ではありません。1 回使用しただけでプログラム関連の問題をすべて解決できる万能の対策はありません。しかし、たいへん大きなクラスのインタフェースワイヤタスクを考えた場合 (これは本来ユーザーが何らかのフォームに入力してそれをサブミットして処理するタスクですが)、スマートコードによりワイヤ処理が簡略化され、Motif、MFC、または Java AWT に関する知識は不要になります。

    グループとスマートコード

    X-Designer のスマートコード機能を使用すると、呼び出されたときに、目的のウィジェットグループの "ハンドル" にアクセスできるようにコールバックを設定することができます。 

    このハンドルは、オブジェクトと考えることができます。グループの個々のコンポーネントがそのオブジェクトのメンバーになります。これらのメンバーには、個々に getter および setter 機能が組み込まれています。したがって、getState() および setState() メソッドを使用して、トグルの状態を取得または設定できます。また、getValue() および setValue() メソッドを使用して、テキストフィールドの内容を取得または設定できます。 

    コード生成の原則は、C でも C++ でも同じですが、構文は多少異なります。プログラミングスタイルと API は、可能な箇所では Java 方式 を模倣しているため、ここで記述されるコードは、インタフェースを Java で作り直すことになった場合、簡単に書き直すことができます。

    悩むのはなぜか

    グループのコントロールとしてコールバックを記述する場合、Motif と MFC のどちらを使用するかを想定することはありません。ツールキット固有のコードを自分で記述する必要はありません。ユーザーが入力する値を単純に処理するだけです。 

    さらに、コントロールへのアクセスメソッドは X-Designer によって生成されるため、プログラマが単純なアプリケーションをプログラムする場合、Motif の特異性を熟知している必要がありません。生成されたコードは、さまざまなコントロールを Motif、MFC、および java AWT でプログラムする方法の例として使用することもできます。 

    これには、多数の明確な利点がありますが、もっとも重要なのは、コールバックが どこから実行されたかは問題にならない点です。必要に応じて、アプリケーションにリンクさせることもできます。また、1000 マイル離れたサーバー上に置くこともできます。 

    従来、X または Motif アプリケーションを作成する場合にもっとも困難な点は、インタフェースとアプリケーション間の区切りを明確に維持しておくことでした。アプリケーションのこの 2 つの側面は、複雑に入り組んでおり、アプリケーションを新しいアーキテクチャにポートさせることが必要になった場合、大部分の構造を再編成しなければならなくなります。スマートコードインタフェースを使用すると、どれがインタフェースで、どれがアプリケーションプログラミングか初めから明確に区別できます。

    コールバックダイアログの変更

    コールバックダイアログに小規模の変更が行われ、左下の「更新」ボタンの上に「スマートコード」領域が追加されました。 

    スマートコードは、ソリューションを目的としています。スマートコードソリューションの 1 つを選択すると、X-Designer によって、コールバックスタブで作用する特別なコードが生成されます。 

    X-Designer 7 では、次の 3 つのソリューションを提供しています。

  • 取得/設定 (getter および setter) 
  • thin クライアント
  • インターネット (インターネットからリソースへのアクセス)
  • したがって、生のコールバックではなく、スマートコールバックが必要な場合は、次の処理を行うだけです。 
  • スマートコードソリューションを選択します。 
  • カスタマイザ (存在する場合) を使用して、アプリケーションに合わせてソリューションを調整します。 
  • スマートコールバックによって使用されるグループを選択します。
  • ユーザーのデータ入力に反応するのではなく、ダイアログを前もって設定しておくには、スマートコードを使用するように X-Designer 固有のコールバック作成を構成する必要があります。

    getter および setter

    スマートコードのスタイルとして「取得/設定」を選択した場合、X-Designer により、グループ内のコントロールへのアクセスと変更を行うために使用できるツールキット独立型のラッパーが生成されます。 

    これを使用すると、ツールキット専用のコードを記述しなくても、ユーザーインタフェースコントロールを変更したり、読み取ることができます。C++ を使用していて、"mygroup" というグループに "text1" というウィジェットがある場合、次のようにしてその値を取得できます。 

    char * val = mygroup->text1->getValue();
    
    if (mygroup->toggle1->getState())
            printf("yes its set\"); // etc..
    
    
    また、次のようにして値を設定できます。 
    mygroup->text1->setValue("hallo world");
    
    
    C にも同様のコードがありますが、SC_SET および SC_GET (スマートコードの場合は SC) マクロを使用して、より煩わしい構文を非表示にすることができます。 
    char * val = SC_GET(Value,mygroup->text1);
    
    SC_SET(Value,mygroup->text1,"hallo world");
    
    

    Web コネクティビティ

    スマートコードのスタイルとして「thin クライアント」または「インターネット」を選択した場合、引き続き getter および setter ラッパーへのアクセスは可能ですが、アプリケーションは thin クライアントになります。このとき実際の処理は、別個に構築された "サーバー" のサブディレクトリ内のコールバックスタブで実行され、Web サーバーの cgi-bin ディレクトリの CGI プログラムは、すべてリモートで実行されます。 

    クライアント-サーバーモードで、サーバーへデータを送信する場合、そこでデータを処理させて、より多くの情報を受信することは、コールバックをアプリケーション内部ではなくリモートで実行することと同様に考えることができます。 

    このスマートコード手法は、次のように使用することもできます。

  • リモートサーバーにデータを送信します (ここで必要なのは、受信の確認だけです)
  • さらに、サーバーからデータを取り込みます。この場合、URL を提供し、ほかの Web クライアント (ブラウザなど) と同様の方法で情報にアクセスします。
  • クライアント側には次の機能があります。
  • precondition スタブおよび postcondition スタブにアクセスし、サーバーに送信される前と、それが戻ってきた後、表示する前にデータをチェックできます。この機能には、取得/設定機能への完全なアクセス権があります。 
  • データの送受信を行うルーチンを無効にしたり、予期しないデータを処理できます。
  • サーバー側にはコールバックがあり、これを使用してグループのメンバーの "値" にアクセスすることができます。テキストフィールドには文字列値が格納され、トグルにはブール型の値が格納されます。

    カスタマイザ

    アプリケーションに合わせてスマートコードを調整できる状況では、「カスタマイズ」ダイアログが表示され、「コールバック」ダイアログの「カスタマイズ」ボタンが有効になります。 

    たとえば、thin クライアント用およびインターネット用スマートコード生成のための「カスタマイズ」ダイアログでは、次の設定を行うことができます。 

  • クライアントとサーバー (のデータフォームなど) を操作するか、または単に URL を 取得するだけか 
  • 必要に応じて、プロキシホストとプロキシポート 
  • サーバープログラムの URL 
  • cgi-bin URL の一部を構成する特殊データ 
  • 非同期更新機能を使用する (サーバーにプッシュ) かどうか  
  • データの送受信用ルーチンの取り消しオプション 
  • 標準の HTML または SGML 構文解析エンジンへのアクセス
  • 生成済みコードを理解する

    オプションの HTML/SGML 構文解析エンジンは、アプリケーションをリンクできるライブラリですが、これは唯一の例外で、必要なスマートコード機能は、すべてソースコードとして生成されます (構文解析エンジンのソースは製品に含まれています。ライブラリはすぐに使用できるように、あらかじめ構築されています。) 

    選択した機能だけが生成されることに注意してください。スマートが同じだけ膨れ上がることはありません。必要な機能だけ取得できます。たとえば、インターネット接続ソフトウェアによって、バイナリサイズに 20K 以上追加されることはありません。 

    旧バージョンの X-Designer によって生成されるコードに慣れているユーザーなら、特殊コードがサブディレクトリに生成されることに気付くと思います。メークファイルには、ソフトウェアを構築する方法を知るために必要な詳細がすべて格納されています。特殊ディレクトリ名は、内容を表す名前になります。たとえば、C で motif アプリケーションを生成している場合、motif インタフェースラッパーのあるディレクトリは、motif_c という名前になります。 

    オンラインロードマップ

    スマートコードコールバックの場合、X-Designer により、メークファイルとソースが格納されているディレクトリと同じディレクトリにオンラインの HTML マニュアルも生成されます。インデックスページ (index.html) には、アプリケーションコードを入力するためのスタブとして用意されたすべてのルーチンの要約と、グループの構造が記述されたページへのリンク、および使用しているコントロールタイプごとに使用可能な getter および setter が含まれています。 

    X-Designer によって生成されたスマートコードの構造へのロードマップとしてインデックスページを使用することができます。

    インターネットコネクティビティ

    インターネットコネクティビティは、http_c (C++ の場合は http_cpp) サブディレクトリ内の 2 つのファイルによって提供されます。ほとんどのプログラマが最初にインターネット用の直接プログラミングを体験するときは Java を使用するということと、標準のインタフェースを保持すれば、経験を最大限に生かせるという考えに基づいて、わかりやすくするために、Java URL と InputStream/OutputStream クラスに似たインタフェースセットを提供しています。 

    HTML を処理する

    インターネット対応ソリューションは、主にクライアントとサーバーの両方の制御を行う開発者に焦点を当てていますが、インターネットから任意の URL の取り込みと処理を行うプログラマの作業も容易になります。 

    もっとも単純な例としては、URL にアクセスし、その処理を適切なウィジェット、たとえば HTML ウィジェットに渡す作業が挙げられます。 

    しかし、受信される HTML は、実際には構造化データなので、最大の付加価値は、データの解析とその内容の操作を行う機能にあると言えます。単純に表示するだけであれば、Web ブラウザを使用した方がよく、手作業でアプリケーションをコーディングする必要はありません。 

    当製品には汎用の SGML 構文解析エンジンと HTML3.2 DTD が組み込まれています。これを使用して、受信したデータから解析ツリーを作成したり、さらに簡単な作業として、 HTML のさまざまなタグや属性を配信対象として指定し、入力ストリーム内でこれらの機能が検出されたときに、独自のコールバックを呼び出させることができます。これは、イベントがユーザーの入力ではなく、データ入力から渡される点を除き、独自のコールバックを登録することにより、インタフェース内にユーザーイベントをプログラミングした場合とまったく同様です。

    既製の例題を使った学習

    getter と setter を使用する

    この例は、Motif コードを 1 行も使用せずに、オプションメニュー、テキストフィールド、トグル、およびラジオボックスが組み込まれたインタフェースをワイヤーする方法を示しています。

    はじめての CGI アプリケーション

    この例では、クライアント側で X-Designer 生成済みコードを直接コンパイルし (記述は一切不要です)、制御コードはサーバー側コールバックに書き込まれるアプリケーションを構築しています。 
    注: 次の 2 つの例題に関しては、ローカルな Web サーバーを設定する必要はありません。すでにサーバーがある場合は、そのサーバープログラムを cgi-bin ディレクトリに移動できます。サーバーがない場合は、http://www.ist.co.uk/cgi-bin/ で実行される構築済みのバージョンを使用できます。

    サーバーにプッシュ。自動更新

    この例題では、クライアント内の時計をサーバーが一定の間隔で更新するインターネットアプリケーションを構築します。これは、生成済みコードの非同期更新 (サーバーにプッシュ) 機能を示していますが、リアルタイム表示が要求されるフォーム (株価の更新、電子メールクライアントなど) を含むインタフェースに適しています。

    前述の例と同様に、インタフェースは完全な thin クライアントです。このクライアントには、X-Designer によって生成されたコードだけが含まれています。

    Web ページの取り込み

    この例題は、サーバーがなくても Web コンテンツにアクセスできる方法を示しています。このクライアント専用アプリケーションは、ユーザーが指定した URL を取り込み、テキスト領域に生の HTML を表示します。

    Web コンテンツを使用する。HTML 以降

    この例題では、取り込み処理をさらに進歩させています。Web コンテンツの処理と分析が可能な独自の構文解析プログラムを記述する必要はありません。この例題は、前の例題と同様のインタフェースを持っていますが、受信データを従来のユーザーインタフェースにもっとも適したフォームにフィルタする点が異なります。