Comments
Description
Transcript
NetCOBOL for .NET 基本編
第4章 NetCOBOL for .NET プログラムの開発 そ れ で は 、 具 体 的 に Ne t C O B O L f o r . N E T の プ ロ グ ラ ム 開 発 に 入 っ て いきましょう。開発環境やプログラムの構造、開発の手順、クラスを使 うための手順などを見ていきます。アプリケーションの形態によっては、 同じCOBOLと言っても手続き型COBOLとかなり違った構造を持ち、ま た新たな命令を駆使してプログラミングしていくことになります。 4.1章で説明するように、いろいろな形態のアプリケーションが作成 可 能 で す が 、 以 降 の 演 習 や 具 体 例 な ど は 、 We b ア プ リ ケ ー シ ョ ン を 中 心 に説明していきます。 40 Copyright 2006-2009 FUJITSU LIMITED 4.1 作成できるアプリケーションの種類 4.1 作成できるアプリケーションの種類 手続き型COBOLでは、バッチやオンラインのアプリケーションが作 成できたように、NetCOBOL for .NETでもいろいろな形態のプログラ ムを作成することができます。しかし、ゼロから作成していく必要はな く、各形態のアプリケーションのテンプレートが提供されています。形 態毎に雛型プログラムが準備されていると考えてください。このテンプ レートを選択して、必要部分の修正、追加により、プログラムを作成し ていきます。以下に、作成できる主なアプリケーションについて説明し ます。 コンソールアプリケーション Windows ACCEPT コンソール アプリケーション DISPLAY コンソール ウィンドウ 図4-1-1 この形態のアプリケーションは、手続き型COBOLプログラマーには 最も馴染みのある形です。従来のバッチプログラムをイメージしてくだ さい。画面は使用できませんが、バッチプログラムと同様に、COBOL の 小 入 出 力 機 能 ( A C C E P T 文 や D I S P L AY 文 ) に よ り 、 コ ン ソ ー ル ウ ィ ン ド ウから文字を受け取ったり、書き込んだりすることができます。プログ ラムの形態も従来の手続き型COBOLと同じ形です。1章では、オフコン から移行したCOBOLバッチプログラムを、この形態のアプリケーショ ンとして動作させたわけです。 41 Copyright 2006-2009 FUJITSU LIMITED 4.1 作成できるアプリケーションの種類 Windowsアプリケーション Windows Windows アプリケーション Windows GUI 画面 図4-1-2 この形態のプログラムは、画面の入出力を行う、スタンドアロンやク ライアントサーバの環境で動作するアプリケーションです。手続き型 C O B O L で は 、 画 面 設 計 ツ ー ル (N e t C O B O L f o r Wi n d o w s で 提 供 し て い る FORMなど)で画面定義体を作成し、画面に対してREAD/WRITEを行う ことで画面の入出力を行ってきました。 本 形 態 で は 、 画 面 を 、 開 発 ツ ー ル で あ る Vi s u a l St u d i o が 持 つ フ ォ ー ム デザイナを使用して作成することになります。作成された画面を 「 Wi n d o ws フ ォ ー ム 」 と 呼 び ま す 。 プ ロ グ ラ ム は 、 Wi n d o w s フ ォ ー ム か ら自動生成されます。この生成されたプログラムはオブジェクト指向の プログラムで、手続き型のCOBOLと構造が大きく異なります。 プログラマーは、画面の入出力のREAD/WRITEの命令を直接記述す る必要はなく、画面の表示などの基本機能は自動生成されています。し かし、自動生成されたものは雛型であり、基本機能が作られているだけ で、処理としては何の機能も持っていません。プログラマーが必要な処 理を追加することにより、プログラムを完成させます。 42 Copyright 2006-2009 FUJITSU LIMITED 4.1 作成できるアプリケーションの種類 ASP.NET Webアプリケーション(ASP.NET Webサイト) Windowsサーバ Windowsクライアント Webアプリケーション Web GUI画面 ブラウザ 図4-1-3 こ の 形 態 の プ ロ グ ラ ム は 、 画 面 の 入 出 力 を 行 う We b 環 境 で 動 作 す る ア プ リ ケ ー シ ョ ン で す 。 画 面 や プ ロ グ ラ ム の 考 え 方 は 、 画 面 の 名 称 を We b フ ォ ー ム と 呼 ぶ こ と 以 外 は 、 Wi n d o w s ア プ リ ケ ー シ ョ ン と 同 様 で す 。 ただし、プログラムが動作する環境が異なるため、自動生成されたプ ログラムが使用しているクラスや、プログラマーが使用するクラスの多 く は 、 Wi n d o w s ア プ リ ケ ー シ ョ ン と は 異 な り ま す 。 本 書 で は 、 こ の 形 態 のアプリケーションを中心に説明していきます。 43 Copyright 2006-2009 FUJITSU LIMITED 4.1 作成できるアプリケーションの種類 XML Webサービス Windowsクライアント Windowsサーバ Webアプリケーション Web GUI画面 Windowsサーバ ブラウザ Webサービス 図4-1-4 We b サ ー ビ ス に は 幅 広 い 意 味 が あ り ま す が 、 こ こ で は 、 We b 上 で 公 開 され、様々なアプリケーションと連携しながら業務処理を受け持つ、画 面を持たないプログラムというレベルの説明で止めます(図4-1-4は We b ア プ リ ケ ー シ ョ ン と の 連 携 例 ) 。 詳 細 に つ い て は 、 書 籍 や イ ン タ ー ネットなど様々な情報源がありますので、次のステップで勉強してみて ください。 クラスライブラリ NetCOBOL for .NETプログラムでは、提供されたクラスを使用して プログラミングを行いますが、使用したいクラスを新たに作成すること もできます。作成したクラスは、.NET Frameworkで提供されているク ラ ス ラ イ ブ ラ リ の ク ラ ス と 同 様 に 、 . N E T 環 境 の 他 言 語 ( Vi s u a l B a s i c 、 C# など)からも利用可能になります。 44 Copyright 2006-2009 FUJITSU LIMITED 4.2 開発環境 4.2 開発環境 プログラム開発の前に、開発環境について見ておきましょう。 N e t C O B O L f o r . N E T の 開 発 で は 、 開 発 ツ ー ル と し て 、 Vi s u a l St u d i o を 使用します。この環境では、資産はソリューションとプロジェクトとい う2つの単位で管理されます。プログラム開発のためには、この両方が 必要になります。プロジェクトとは、プログラム単位に必要なソースや 画面などのファイルの集まりと考えてください。プロジェクトを1つ以 上まとめたものが「ソリューション」となります(図4-2-1)。 ソリューション プロジェクトA 画面ファイル プログラム COBOLソースファイル 登録集ファイル プロジェクトB 画面ファイル プログラム COBOLソースファイル 登録集ファイル ・ ・ ・ 図4-2-1 プログラム開発には、まずプロジェクトを作成します。もし、1つし かプロジェクトを作成しないのであれば、これが自動的にソリューショ ンとして認識、作成されます。この場合は、「1プロジェクト=1ソリュ ーション」というわけです。 この作成したソリューションにプロジェクトを追加していけば、「1 ソリューション=nプロジェクト」のソリューションを作成することが できます。管理したい形態にあわせて、プロジェクトやソリューション を設定します。本書の演習は、2プロジェクト=1ソリューションのパタ ー ン で 作 成 し て い ま す 。 Vi s u a l St u d i o で の 開 発 時 、 次 の よ う な 画 面 で 画 面デザインを行います(図4-2-2)。 45 Copyright 2006-2009 FUJITSU LIMITED 4.2 開発環境 開発画面(画面デザイン時) メニューバー ツールバー ソリューション エクスプローラ デザイナ 出力ウィンドウ プロパティ ウィンドウ ツールボックス 図4-2-2 開発画面は、複数のウィンドウから構成されています。それぞれのウ ィンドウを見ていきましょう。 46 Copyright 2006-2009 FUJITSU LIMITED 4.2 開発環境 デザイナ 図4-2-3 デザイナとは、画面をデザインするためのウィンドウです(図4-2-3)。 Wi n d o w s フ ォ ー ム ア プ リ ケ ー シ ョ ン 作 成 時 は 「 Wi n d o w s フ ォ ー ム デ ザ イ ナ 」 、 We b フ ォ ー ム ア プ リ ケ ー シ ョ ン 作 成 時 に は 「 We b フ ォ ー ム デ ザ イ ナ 」 と な り ま す 。 Vi s u a l B a s i c な ど の よ う に 、 G U I を 使 用 し て 非 常 に ビ ジ ュアルな画面が簡単に作成できます。 47 Copyright 2006-2009 FUJITSU LIMITED 4.2 開発環境 ツールボックス ピンマークのボタンで 「常に表示」と「自動的に隠す」 を切り替え 「ツールボック ス」をクリック して表示 部品を選択して、 画面に貼り付け 図4-2-4 ツールボックスとは、デザイナに表示された画面に貼り付ける各種部 品 を 選 択 す る メ ニ ュ ー 画 面 で す (図 4 - 2 - 4 ) 。 こ の ボ ッ ク ス か ら 各 種 部 品 を 選択して、デザイナ画面に貼り付けて画面を作成します。これらの部品 のことを「コントロール」と呼びます。NetCOBOL for .NETの世界で は、このひとつひとつのコントロールがクラスとして扱われます。クラ ス で す か ら 、 そ れ ぞ れ が 機 能 ( メ ソ ッ ド ) を 持 ち 、 値 (プ ロ パ テ ィ ) を 持 っ て い ま す 。 例 え ば 、 Te x t B o x コ ン ト ロ ー ル は 、 ど の よ う な メ ソ ッ ド と プ ロパティを持っているのでしょうか。このコントロールは、入力された 文字をクリアしたり、文字を追加したりするメソッドを持っています。 また、縦の大きさ、横の大きさ、色などをプロパティとして保持してい ま す 。 3 章 で 学 ん だ 手 順 で 、 リ フ ァ レ ン ス を 「 Te x t B o x 」 の キ ー ワ ー ド で検索して、内容を確認してみてください。プロパティは画面作成時に 変更も可能ですし、プログラム中からの参照や更新も可能です。これら のコントロールは、プログラムの実行時に自動的にオブジェクトとして 生成されるので、プログラマーがオブジェクトを生成する必要はありま せん。これにより、プログラマーはオブジェクトを生成することなしに、 プロパティの値を設定、参照したり、メソッドを使用したりすることが で き ま す (図 4 - 2 - 5 ) 。 48 Copyright 2006-2009 FUJITSU LIMITED 4.2 開発環境 (Webフォーム) (Webフォーム) プロパティ メソッド ・・ テキストボックスオブジェクト (Webフォーム) システムにより実行時に生成 ラベルコントロール テキストボックスコントロール ラベルコントロール テキストボックスコントロール ボタンコントロール ボタンコントロール メソッド ・・ ラベルコントロール プロパティ ボタンオブジェクト プロパティやメソッドが使用可能 ラベルオブジェクト プロパティ メソッド 図4-2-5 ソリューションエクスプローラ 参照設定 (アセンブリ) 開発資産 図4-2-6 ソリューションエクスプローラとは、プロジェクトやソリューション 内の開発資産を階層構造で表示するウィンドウです(図4-2-6)。また、プ ロジェクトやソリューション内で使用するクラスが含まれるアセンブリ 49 Copyright 2006-2009 FUJITSU LIMITED 4.2 開発環境 の一覧(参照設定)も表示します。クラスの論理的グルーピングの単位が 名前空間であるのに対して、物理的なグルーピングの単位を「アセンブ リ」と言います。アセンブリは、たくさんのクラスを含んだライブラリ と考えてください。1つのアセンブリに複数の名前空間が含まれたり、1 つの名前空間が複数のアセンブリに分かれたりしています。プロジェク トやソリューション内でクラスを使用するためには、使用したいクラス を含むアセンブリが、この参照設定に存在する必要があります。名前空 間と同じ名称のものがありますが、参照設定に設定されているものはア センブリであり、名前空間ではないことに注意してください。作成する アプリケーションのテンプレートを選択した時点で、プログラムが動作 する基本的なアセンブリは自動的に設定されています。しかし、プログ ラマーが使用したいクラスが含まれるアセンブリが本ウィンドウに存在 しなければ、プログラマーが必要なアセンブリを追加してやらなければ なりません。詳細は、「4.5 クラス利用の手順」で説明します。 プロパティウィンドウ 図4-2-7 プロパティウィンドウとは、ソリューションやプロジェクト、画面に 貼り付けたコントロールなどが持つプロパティの設定を行うためのウィ ンドウです(図4-2-7)。ツールボックスで説明したように、画面のコント ロ ー ル は 、 プ ロ パ テ ィ ( デ ー タ )を 持 っ て い ま す 。 画 面 上 の コ ン ト ロ ー ル をクリックすると、そのコントロールの持つプロパティがこのウィンド ウに表示され、設定項目を変更することができます。 50 Copyright 2006-2009 FUJITSU LIMITED 4.2 開発環境 コードエディタ 図4-2-8 コードエディタとは、COBOLソースを記述するためのエディタです (図4-2-8)。ソリューションエクスプローラに表示されているCOBOLソ ースファイルをダブルクリックしたり、デザイナ上で右クリックして表 示 し た メ ニ ュ ー か ら [コ ー ド の 表 示 ]を 選 択 し た り 、 様 々 な 方 法 で 表 示 で きます。単なる編集機能だけでなく、予約語の色を変更する機能や、使 用するクラスのメソッド名やプロパティ名の入力時に、有効なメソッド 名やプロパティ名が一覧表示されるインテリセンス機能など、プログラ ム作成の効率向上のための機能も備えています。 出力ウィンドウ プログラム開発時に出力されるビルドの結果やデバッグ時の出力など の様々なメッセージが出力されます(図4-2-9)。 図4-2-9 51 Copyright 2006-2009 FUJITSU LIMITED 4.3 プログラムの構造 4.3 プログラムの構造 クラス定義 IDENTIFICATION DIVISION. CLASS-ID. クラス名 ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. REPOSITORY. オブジェクト定義 OBJECT. DATA DIVISION. データ定義 ① PROCEDURE DIVISION. METHOD-ID. A. DATA DIVISION. ② データ定義 PROCEDURE DIVISION. 処理ロジック END-METHOD-A. 環境部 オブジェクト定義 OBJECT. [データ部] [手続き部] [メソッド定義] [メソッド定義] [メソッド定義] ・・ METHOD-ID. B. DATA DIVISION. ② データ定義 PROCEDURE DIVISION. 処理ロジック END-METHOD-B. ・・・・・・ END OBJECT. END CLASS クラスID. END OBJECT. 図4-3-1 ここでは、作成するプログラムの構造を見てみましょう。図4-3-1に 示すように、手続き型COBOLのプログラムとかなり構造が異なってい ます。NetCOBOL for .NETでは、1章で見たようなコンソールアプリケ ーション以外は、プログラムを作成するのではなく、クラスを作成する と考えてください。クラス定義の中は、環境部とオブジェクト定義部に 分かれます。オブジェクト定義部の中にデータ定義やメソッド定義を記 述します。上記図右のオブジェクト定義の展開を見てください。各メソ ッ ド が 使 用 す る デ ー タ を 「 D ATA D I V I S I O N 」 に 定 義 し ま す が 、 各 メ ソ ッ ド共通に使用するデータを①に、各メソッド固有に使用するデータを② に定義します。②で定義したデータは、メソッド間で共有はできません。 メソッド定義は、手続き型COBOLのデータ定義と処理ロジックにあ たる部分を記述します。全体の構造は異なるものの、クラスを使用しな いメソッドであれば、手続き型のCOBOLプログラムと何ら変わりあり ません。どのように記述するのかは、次の開発の手順で見ていきましょ う。 52 Copyright 2006-2009 FUJITSU LIMITED 4.4 開発の手順 4.4 開発の手順 大きな開発の流れは、図4-4-1のようになります。この手順に沿って 見ていきましょう。 開発環境の起動 開発環境の起動 プロジェクトの作成 プロジェクトの作成 画面のデザイン/COBOL手続きの記述 画面のデザイン/COBOL手続きの記述 エラー対処 エラー対処 ビルド、リビルド ビルド、リビルド 翻訳エラー発生 翻訳エラーなし 実行・デバッグ 実行・デバッグ 図4-4-1 開発環境の起動 既存プロジェクト名 図4-4-2 53 Copyright 2006-2009 FUJITSU LIMITED 4.4 開発の手順 Wi n d o w s の ス タ ー ト メ ニ ュ ー か ら 「 N e t C O B O L f o r . N E T 」 を 選 択 し 、 開発環境を起動します。このとき、図4-4-2のスタートページが表示さ れます。既存のプロジェクトが存在する場合には、その一覧が表示され ます。既存のプロジェクトを操作したい場合には、一覧の中からプロジ ェ ク ト を 選 択 し ま す 。 一 覧 に 表 示 さ れ て い な い 場 合 は 、 [ フ ァ イ ル ]メ ニ ュ ー − [開 く ]− [プ ロ ジ ェ ク ト /ソ リ ュ ー シ ョ ン ]か ら 、 既 存 の ソ リ ュ ー シ ョンファイル(.sln)を選択します。 プロジェクトの作成 プ ロ ジ ェ ク ト を 新 規 作 成 す る と き は 、 [フ ァ イ ル ]メ ニ ュ ー − [新 規 作 成 ]− [ We b サ イ ト ]を 選 択 し ま す 。 さ ら に 、 [ 言 語 ]ボ ッ ク ス で 「 F u ji t s u N e t C O B O L f o r . N E T 」 を 選 択 す る と 、 図 4 -4 - 3 の 画 面 が 表 示 さ れ ま す 。 「 A S P. N E T We b サ イ ト 」 を 選択 プロジェクトを 作成する場所 「Fujitsu NetCOBOL for .NET」を 選択 図4-4-3 4.1章でNetCOBOL for .NETで作成できるアプリケーションの種類を 説明しました。これらのアプリケーションをゼロから作る必要がないよ うに、雛型の選択をここで行うということなのです。テンプレートを選 択することにより、自動的に各形態のアプリケーションを動作させるた めの基本的なアセンブリを参照設定に取り込んで、環境を設定してくれ ま す 。 今 回 は 「 A S P. N E T We b サ イ ト 」 を 選 択 し ま す 。 そ の 際 、 ウ ィ ン ドウ下部にプロジェクトを作成する場所を指定して、「OK」をクリック します。 54 Copyright 2006-2009 FUJITSU LIMITED 4.4 開発の手順 画面のデザイン/COBOL手続きの記述 デザイン画面とソース (画面定義)の切り替え 図4-4-4 テンプレート選択後、図4-4-4の画面が表示されます。この画面で、 使 用 す る We b フ ォ ー ム の デ ザ イ ン を 行 い ま す 。 で は 、 ソ リ ュ ー シ ョ ン エ クスプローラのウィンドウに注目してみましょう。いくつかのファイル が自動生成されているのが分かります。ここで、ソリューションエクス プ ロ ー ラ の [ D e f a u l t . a s p x ]配 下 を 見 て み ま し ょ う ( 図 4 -4 - 5 ) 。 Default.aspx Default.aspx.cobx 図4-4-5 55 Copyright 2006-2009 FUJITSU LIMITED 4.4 開発の手順 まず、Dafault.aspxというファイルがあります。さらにその下位に Dafault.aspx.cobxというファイルがあります。この正体は、拡張子が aspxのファイルが画面のフォーマットであり、cobxの拡張子を持つファ イルがCOBOLソースです。見せる部分がaspxファイルで、処理する部 分 が c o b xフ ァ イ ル と い う わ け で す 。 こ の 2 つ の フ ァ イ ル で We b フ ォ ー ム が構成されています。他にもいくつかファイルがありますが、入門レベ ルでは、この2つのファイルを押さえておけば十分でしょう。 ソリューションエクスプローラのDafault.aspx.cobxをダブルクリック すると、画面左側(図4-4-6)に自動展開されたCOBOLソースが表示され ます。以降は、エディタ画面上部のタグをクリックすれば、画面フォー マットとCOBOLソースの表示切り替えができます。 表示切り替え 展開された COBOLソース 図4-4-6 こ の 展 開 さ れ た ソ ー ス プ ロ グ ラ ム は 、 We b ア プ リ ケ ー シ ョ ン と し て 動 作する最低限のクラス定義とメソッドが設定されているだけです。処理 としては何の機能も持っていませんが、いくつか押さえておくべきポイ ン ト が あ り ま す 。 ま ず 、 I D E N T I F I C AT I O N D I V I S I O N と R E P O S I TO RY を見てみましょう。次のような記述があります。 56 Copyright 2006-2009 FUJITSU LIMITED 4.4 開発の手順 CLASS-ID. CLASS-THIS AS "_Default" PARTIAL INHERITS CLASS-PAGE. ・・・・・① ・ REPOSITORY. ・ CLASS CLASS-PAGE AS "System.Web.UI.Page"・・・・・② ②は、「 S y s t e m. We b . U I . P a g e ” と い う ク ラ ス は 、 こ の プ ロ グ ラ ム の 中 で は C L A S S - PA G E と 記 述 し ま す 。 」 と い う 宣 言 で す 。 N e t C O B O L for .NETでは、リファレンスに記載されたクラス名を、上記のように R E P O S I TO RY 段 落 で 内 部 名 に 対 応 付 け て 、 プ ロ グ ラ ム 中 で は 内 部 名 で 使用します。クラス名をそのまま使用するよりも、プログラムも見やす くなりそうですね。①では、「CLASS-THISというクラスは、CLASSPA G E を 、 つ ま り 、 S y s t e m. We b . U I . P a g e ” ク ラ ス を 継 承 し て い ま す 。 」 ということを意味しています。 S y s t e m. We b . U I . P a g e ” ク ラ ス は 、 We b アプリケーションになくてはならない基本機能を持つクラスです。 こ の 定 義 に よ り 、 作 成 す る ク ラ ス 、 つ ま り We b ア プ リ ケ ー シ ョ ン が 、 S y s t e m. We b . U I . P a g e ” ク ラ ス の 子 ク ラ ス と な り 、 そ の 全 て の 機 能 を 継 承しているということになります。 展開されたプログラムで、もう1点確認しておきたい部分があります。 Page_Loadメソッドを見てみましょう。次のような記述になっています。 METHOD-ID. PAGE-LOAD AS "Page_Load". DATA DIVISION. LINKAGE SECTION. 01 sender OBJECT REFERENCE CLASS-OBJECT. 01 e OBJECT REFERENCE CLASS-EVENTARGS. PROCEDURE DIVISION USING BY VALUE sender e. END METHOD PAGE_LOAD. こ の メ ソ ッ ド は 、 We b ア プ リ ケ ー シ ョ ン 選 択 時 に は 必 ず 展 開 さ れ る メ ソッドです。そして多くの場合、ユーザーがコーディングを追加しなけ れ ば な ら な い メ ソ ッ ド で す 。 We b ア プ リ ケ ー シ ョ ン は 画 面 の 入 出 力 を 行 います。ここは、その画面に対する初期処理を記述するメソッドなので す。例えば、画面入力項目の初期化、画面出力項目への初期値設定など をこのメソッドに記述します。このメソッドを実行した後に、システム が画面を出力してくれます。手続き型COBOLプログラムでは、プログ ラムの制御は上から下に流れ、画面の入出力も自分で制御しなければな りませんでした。しかし、NetCOBOL for .NETでは、画面の入出力は シ ス テ ム で 実 行 し て く れ る の で 、 項 目 の 設 定 や 編 集 、 フ ァ イ ル や DB の 入出力などの必要な処理のみを記述すればよいのです。 57 Copyright 2006-2009 FUJITSU LIMITED 4.4 開発の手順 PA G E _ L O A D メ ソ ッ ド : 画 面 に 対 す る 初 期 処 理 を 記 述 す る 。 では、実際に画面をデザインしてみましょう。 フォームデザイナで、ツールボックスから必要なコントロールを配置 して画面を作成します。ボタンを1つ作って、次のような画面を作成し てみます。 図4-4-7 作成したボタンをダブルクリックすると、ソースエディタに画面が遷 移し、ボタンを追加したことによって、COBOLプログラムに一部のス テートメントが追加生成されます。 58 Copyright 2006-2009 FUJITSU LIMITED 4.4 開発の手順 追加された次のメソッドを見てみましょう。 メソッド内で使用する METHOD-ID. Button1_Click PROTECTED. データを定義 DATA DIVISION. WORKING-STORAGE SECTION. LINKAGE SECTION. 01 sender OBJECT REFERENCE CLASS-OBJECT. 01 e OBJECT REFERENCE CLASS-EVENTARGS. PROCEDURE DIVISION USING BY VALUE sender e. END METHOD Button1_Click. メソッドで行う処理を記述 こ れ は 、 メ ソ ッ ド の 名 前 ( B u t t o n 1 _ C l i c k )を 見 れ ば 、 何 を す る た め の メソッドか見当がつきますね。ボタンがクリックされたときに行う処理 を記述するメソッドです。例えば、計算の実行とか別の画面に遷移する といった処理をこのメソッドに記述します。 上 図 に 示 す よ う に 、 メ ソ ッ ド で 必 要 な デ ー タ の 定 義 は 、 D ATA D I V I S I O N や W O R K I N G - S TO R A G E S E C T I O N に 、 処 理 は P R O C E D U R E DIVISIONに記述します。ボタンやチェックボックスなどのように、そ のコントロールをクリックすることで、イベントが発生するコントロー ル が あ り ま す 。 We b フ ォ ー ム 作 成 時 に こ れ ら の コ ン ト ロ ー ル を 貼 り 付 け ると、そのコントロールが持つイベントをメソッドに関連付けて処理す ることができるようになります。COBOLソース生成後、追加されたメ ソッドに必要な処理を記述してプログラムを完成させていきます。プロ グラム全体としてみれば、手続き型のCOBOLのように、プログラムの 上から下に実行されるのではなく、ボタンのクリックというイベントに 対応して処理が実行されることになります。このようなプログラムを 「イベント駆動型」と呼びます。 さて、ツールボックスの項で説明したように、画面上に貼り付けるコ ントロールそのものがクラスでしたね。クラスはプロパティを持ってい ます。プロパティを見るには、画面上のコントロールをクリックします。 59 Copyright 2006-2009 FUJITSU LIMITED 4.4 開発の手順 クラス クリック プロパティ クリックしたプロパティ の説明表示 設定値 図4-4-8 Buttonコントロールをクリックした時のプロパティウィンドウを見て みましょう(図4-4-8 左図)。ここに表示される内容が、「Button」クラス が持つプロパティの内容で、このウィンドウから値を設定することがで きます。 個々のプロパティの意味がわからない時は、プロパティ名をクリック してください。プロパティウィンドウの下にそのプロパティの説明が表 示されます(図4-4-8 右図)。では、「Button」クラスの主なプロパティを 見てみましょう。 ID プログラム中で使用するコントロールのオブジェクト名称を設定しま す。 プログラムで、メソッドに処理を依頼する時は、メソッド名と併せて オブジェクト名を指定する必要がありました (3.2章参照) 。プロパティ に値を設定する時も同様に、処理の対象を特定するために、プロパティ 名 と 併 せ て オ ブ ジ ェ ク ト 名 を 指 定 す る 必 要 が あ り ま す 。 そ の 時 、 「 ID 」 プ ロパティに設定した名称が、指定するオブジェクト名になります。具体 的には、「プロパティ名 OF オブジェクト名」という指定で、操作するプ ロパティを一意に特定します。「ID」プロパティの指定内容は任意ですが、 手続き型COBOLの変数と同じ考え方で、識別しやすい名称を設定しま しょう。 60 Copyright 2006-2009 FUJITSU LIMITED 4.4 開発の手順 BackColor コントロールの背景色を設定します。 「…」ボタンを クリック 図4-4-9 BackColorプロパティの「…」ボタンをクリックすると、図4-4-9のウ ィンドウが表示されます。ここから任意の色を選択すると、コントロー ルの色が変化します。 Te x t ボタン上に表示される文字列を指定します。この文字列の属性(大き さ や 書 体 な ど ) は 、 F ON T プ ロ パ テ ィ で 設 定 し ま す 。 ここでは、Buttonコントロールを取り上げていますが、ツールボック スには、その他様々なコントロールがあります。その概要と主なプロパ ティを次の表に示します。 61 Copyright 2006-2009 FUJITSU LIMITED 4.4 開発の手順 コントロール サンプル 主な 設定プロパティ 機能 固定の文字列の表示 ・ID ・BackColor ・Font ・ForeColor ・Text データ入力領域の表 示。 入力された文字列をプ ログラムで受け取った り、値を設定して表示し たりすることが可能 ・ID ・TextMode ・Text ・BackColor ・Font ・ForeColor ドロップダウンリストの 表示。 選択された項目をプロ グラムで受け取ったり、 ドロップダウンリストに 対して値を設定したり することが可能 ・ID ・BackColor ・Font ・Items---ドロップダウ ンリストに出力する選 択肢を指定 ラジオボタンの表示。 選択された項目をプロ グラムで受け取り可能 ・ID ・BackColor ・Font ・Items---ラジオボック スに出力する選択肢を 指定 Label TextBox DropDownList RadioButtonList 62 Copyright 2006-2009 FUJITSU LIMITED 4.4 開発の手順 ビルドとエラー対処 ビルドとは、ソースのコンパイル&リンクを行い、実行可能プログラ ム を 作 成 す る こ と で す 。 ビ ル ド メ ニ ュ ー か ら 「 We b サ イ ト の ビ ル ド 」 を 選 択すると、ビルドが実行されます。ビルド時にエラーが発生すると、エ ラー一覧ウィンドウに内容が表示されるので、その対処をします。エラ ー が 発 生 す る と 、 図 4 -4 - 1 0 の よ う な 一 覧 が 表 示 さ れ ま す 。 出 力 さ れ た エ ラーメッセージをダブルクリックすると、エディタ画面に切り替わり、 プログラムのエラー箇所にジャンプします。 エラーメッセージをダブルクリック すると、エディタ画面の該当箇所に ジャンプ 図4-4-10 エ ラ ー メ ッ セ ー ジ の 調 査 は 、 ス タ ー ト メ ニ ュ ー か ら [プ ロ グ ラ ム ]− [NetCOBOL Base Edition 開発パッケージfor .NET V4.0] − [ N e t C O B O L ]− [ N e t C O B O L メ ッ セ ー ジ 説 明 書 f o r . N E T ]を 選 択 し て 、 表 示される以下の画面から該当するメッセージを選び、エラー内容に従っ て 対 処 し ま す ( 図 4 - 4 - 11 ) 。 エ ラ ー メ ッ セ ー ジ に 対 応 す る エ ラ ー コ ー ド (JMNxxxI-x)は出力ウィンドウに表示されています。 63 Copyright 2006-2009 FUJITSU LIMITED 4.4 開発の手順 該当メッセージを選択 図4-4-11 実行 デ バ ッ グ メ ニ ュ ー か ら [ デ バ ッ グ 開 始 ]を 選 択 し た り 、 [F 5 ]キ ー を 押 す ことで、開発環境からプログラムを起動できます。COBOL実行環境の 設定が必要な場合には、ツールメニューから[NetCOBOL for .NETユー テ ィ リ テ ィ ]− [ C O B O L 実 行 環 境 設 定 ユ ー テ ィ リ テ ィ ]に よ り 、 We b . c o n f i g ( We b 構 成 フ ァ イ ル )に C O B O L の 環 境 変 数 を 設 定 し ま す 。 デバッグ 作 成 し た We b サ イ ト を デ バ ッ グ す る に は 、 We b サ イ ト メ ニ ュ ー か ら 「 A S P. N E T 構 成 」 を 選 択 し 、 We b サ イ ト 管 理 ツ ー ル を 起 動 し ま す ( 図 4 4-12)。 図4-4-12 64 Copyright 2006-2009 FUJITSU LIMITED 4.4 開発の手順 さ ら に [ア プ リ ケ ー シ ョ ン ]タ グ を ク リ ッ ク し 、 [ デ バ ッ グ と ト レ ー ス の 構 成 ]を 選 択 し ま す (図 4 - 4 - 1 3 )。 図4-4-13 [デ バ ッ グ の 有 効 化 ]チ ェ ッ ク ボ ッ ク ス を チ ェ ッ ク す る こ と に よ り 、 デ バ ッ グ す る こ と が 可 能 に な り ま す ( 図 4 - 4 - 1 4 )。 図4-4-14 65 Copyright 2006-2009 FUJITSU LIMITED 4.5 クラス利用の手順 4.5 クラス利用の手順 開発の手順をここまで見てきました。大きな流れはわかったものの、 クラスを使った処理の記述が、まだわかりませんね。手続き型COBOL であれば、ファイル定義、データの定義を行って、命令を記述していく という順序になるのですが、今回はクラスを使用してのプログラミング です。必要なクラスの探し方は2章で見てきましたが、そのクラスをど のように使用するのか、そのためにどのような定義が必要なのかを見て いきましょう。 使用したいクラスはリファレンスから探しましたが、リファレンスに 存在するものが即座に使用できるわけではありません。サブルーチンを 使用する時にも引数の定義という準備をして、CALL文で呼び出します。 クラスを使用するのにもいくつかの準備が必要です。その手順を見てい きます。 クラスの参照設定 クラスを使用するためには、そのクラスをプロジェクトやソリューシ ョンから使用できる状態にしなければなりません。その準備をするのが 参照設定です。開発の手順で説明したように、使用するクラスが含まれ るアセンブリを参照設定に指定する必要があるのです。アプリケーショ ンのテンプレートを選択することによって、基本的なアセンブリは取り 込まれています。使用するクラスがこのアセンブリに含まれていない場 合には、クラスが含まれているアセンブリを調査して、参照設定に追加 す る 必 要 が あ り ま す (図 4 - 5 - 1 ) 。 ソリューションエクスプローラ Systemアセンブリ 参照設定 System ① クラスD クラスA クラスC System.Data クラスB System.Xml クラスE ② アセンブリを参照設定に追加 System.Xmlアセンブリ ①Systemアセンブリに含まれるクラスを使用する場合 クラスb クラスa ・参照設定追加不要 クラスe クラスd ②System.Xmlアセンブリに含まれるクラスを使用する場合 クラスc ・参照設定にSystem.Xmlアセンブリの追加 が必要 図4-5-1 66 Copyright 2006-2009 FUJITSU LIMITED 4.5 クラス利用の手順 しかし、使用するクラスが含まれるアセンブリをどのようにして探せ ばよいのでしょう。あまり複雑に考える必要はありません。リファレン スを参照して使用するクラスを探したら、リファレンス内に参照設定で 設定すべきアセンブリの記述があります。それがクラスの記述の「必要 条件」の項の「アセンブリ」です。図4-5-2の画面を見てください。 このアセンブリの名称が参照 設定に設定されているかどう かを判断 図4-5-2 ここに記述されたアセンブリが、参照設定に設定されていなかった場 合は、プログラマーが追加する必要があります。ただし、使用するクラ スのアセンブリが、図4-5-2のように「Mscorlib」の場合には、参照設定 に追加しなくてもかまいません。このアセンブリに含まれるクラスは、 参照設定への追加なしで、自動的に使用可能となります。アセンブリの 追加方法は、ソリューションエクスプローラウィンドウのプロジェクト を 右 ク リ ッ ク し て 、 [参 照 の 追 加 ]に よ り 表 示 さ れ る 図 4 - 5 - 3 の 画 面 か ら ア センブリを追加します。 67 Copyright 2006-2009 FUJITSU LIMITED 4.5 クラス利用の手順 図4-5-3 クラスの登録 アセンブリを参照設定で取り込んだからといって、そのアセンブリに 含まれるクラスをプログラムですぐに使用できません。クラスは、名前 空間に記述してある名称のままでは、COBOLプログラムの中で使用で きないのです。プログラム内では、内部名を定義して使用します。その た め に 、 環 境 部 ( E N V I R O N M E N T D I V I S I O N ) の R E P O S I TO RY 段 落 で 、 プログラム内で使用する内部名とクラス名とを対応づける必要がありま す。 プログラムで使用する基本的なクラスについては、4.4章で見たよう に 、 プ ロ グ ラ ム の 自 動 生 成 時 に RE P O S I TO RY 段 落 の 定 義 を 追 加 し て く れ ま す 。 し か し 、 自 動 生 成 し た プ ロ グ ラ ム は 、 あ く ま で We b ア プ リ ケ ー ションの雛型であり、業務処理はプログラマーが記述しなければなりま せん。その際、雛型には定義されていない、いくつものクラスが必要に な る こ と で し ょ う 。 そ の よ う な ク ラ ス を R E P O S I TO RY 段 落 で 追 加 定 義 する必要があるのです。その記述形式は、次のようになります。 CLASS クラスの内部名 AS "名前空間を含めたクラス名" 必要となるクラスの数だけ上記定義を追加します。 プロパティの登録 プロパティはコントロールが保持している値で、プロパティウィンド ウで設定ができます。また、プログラムから値の設定や変更も可能です。 そのためには、プログラムからプロパティを参照する名称が必要となり ます。クラスと同様な考えで、プログラム中で使用するプロパティ名を 内部で使用する名称として定義しておく必要があります。その記述形式 は次のようになります。 68 Copyright 2006-2009 FUJITSU LIMITED 4.5 クラス利用の手順 P R O P E RT Y プ ロ パ テ ィ の 内 部 名 A S " プ ロ パ テ ィ 名 " クラスとプロパティの登録例を図4-5-4に示します。 クラスの登録例 プロパティの 登録例 図4-5-4 オブジェクト参照の設定 さて、いよいよクラスを使用してプログラミングを行いますが、クラ スに定義されたメソッドはサブルーチンと異なり、CALL文では呼び出 すことができません。後述のINVOKE文を使用するのですが、その使用 の前に、オブジェクトを生成する必要があります。繰り返しますが、定 義情報であるクラスを、メモリ上に実体(オブジェクト)として作成しな いとクラスは使用できません。また、オブジェクトは複数生成できるた め、オブジェクトを一意に識別できないと、オブジェクトに対する処理 が依頼できません。では、オブジェクトをどのようにして一意に識別す るのでしょう。 手続き型COBOLの変数を考えてみてください。変数は、メモリ上に あり、プログラム中では、その変数に付けた名前で特定することができ ます。言い方を変えれば、変数名がメモリ上の実体を指しているという ことになります。オブジェクトも同様に、作ったオブジェクトを特定す 69 Copyright 2006-2009 FUJITSU LIMITED 4.5 クラス利用の手順 るための変数を持つ必要があるのです。これを「オブジェクト変数」と 呼びます。 オブジェクト変数には、生成したオブジェクトのアドレスが格納され ます。しかし、プログラマーがアドレスそのものを意識する必要はなく、 オブジェクト変数を指定することでオブジェクトの特定が可能になりま す(図4-5-5)。今までの説明の中で出てきたオブジェクト名というのは、 プログラム中では、このオブジェクト変数のことになります。オブジェ クト変数は、オブジェクトの実体そのものではないというところに注意 してください。 (オブジェクト変数) オブジェクト変数Aを指定 してオブジェクト生成 オブジェクト A ク ラ ス オブジェクト変数A でオブジェクト参照 可能 オブジェクト変数Bを指定 してオブジェクト生成 オブジェクト B オブジェクト変数B でオブジェクト参照 可能 オブジェクト変数Cを指定 してオブジェクト生成 オブジェクト C オブジェクト変数C でオブジェクト参照 可能 図4-5-5 オブジェクトを生成して、オブジェクト変数により参照可能にするこ と を 、 「 オ ブ ジ ェ ク ト 参 照 の 設 定 」 ま た は 「 オ ブ ジ ェ ク ト の 取 得 (獲 得 ) 」 と 言います。オブジェクト変数も、手続き型COBOLの変数と同様に、 D ATA D I V I S I O N に 次 の よ う な 形 式 で 定 義 し て お く 必 要 が あ り ま す 。 01 オブジェクト変数名 OBJECT REFERENCE クラスの内部名 プログラムで使用するオブジェクト変数は、プログラムの自動生成時 に定義されているものもあります。例えば、画面に貼り付けたコントロ ールのオブジェクト変数は、プログラムの自動生成と同時に、プロパテ ィで設定した「ID」をオブジェクト変数名として生成されています。 変数というと、PICTURE句で定義した文字項目や数字項目を思い浮 70 Copyright 2006-2009 FUJITSU LIMITED 4.5 クラス利用の手順 かべますが、クラスを使用するときはこのような変数の定義も覚えてお いてください。この変数の型を「オブジェクト型」と呼びます。オブジ ェクトは、このオブジェクト型の変数でのみ参照可能です。つまり、オ ブジェクトのアドレスは、オブジェクト型の変数にしか代入できないと いうことです。 OBJECT. DATA DIVISION. WORKING-STORAGE SECTION. 01 WK-RowCollect OBJECT REFERENCE CLASS-ROWCOLLECTION. ・・・・① 01 WK-Row OBJECT REFERENCE CLASS-ROW. ・・・・② 01 WK-CellCollect OBJECT REFERENCE CLASS-CELLCOLLECTION. PROCEDURE DIVISION. また、このオブジェクト変数全体をまとめて、「オブジェクト型」と 呼びますが、各々の変数もそれぞれ型を持っています。例えば、上記コ ーディングにおいて、変数WK-RowはRow型、WK-RowCollectは RowCollection型の変数というわけです。参照可能なクラスの名前がそ のまま型として定義されます。ある型の変数は、型の異なる変数には格 納できません。上記②のWK-RowはRow型の変数です。「この変数には Rowクラスから生成したオブジェクトしか参照できません。」というこ とを意味しています。①のRowCollectionクラスから生成したオブジェ クトのアドレスはWK-Rowには格納できない、つまり、WK-Rowでは参 照できないということになります(図4-5-6)。 (Row型) 参照可能 Rowオブジェクト WK-Row 参照不可 (RowCollect型) WK-RowCollect RowCollectionオブジェクト 参照可能 図4-5-6 71 Copyright 2006-2009 FUJITSU LIMITED 4.5 クラス利用の手順 ここで「型」という言葉を使ってきましたが、クラス使用時には、手続 き 型 COBOLで の 変 数の 型 と はち ょ っ と違 っ た 考え 方 が 必要 に な りま す 。 オブジェクト指向の世界では、データもまたオブジェクトとして扱いま す。手続き型COBOLでは、プログラム中に定義したデータとは、単に メモリ上に確保された領域に格納された文字や値でしたが、NetCOBOL for .NETでは、従来型のこのようなデータ型に加え、オブジェクトとし て扱うデータ型が存在します。オブジェクトとして扱うということは、 データだけでなく、そのデータを操作する手続きを持っているというこ とです。このような型を「.NETデータ型」と呼びます。NetCOBOL for .NETは、下図のように、従来のCOBOLが持つ独自のデータ型 と.NETデータ型の2つの型が存在することになります(図4-5-7)。 図4-5-7 クラスを使用しない場合は、COBOL独自のデータ型を使用しておけ ば問題ありませんが、クラスを使用するときには、.NETデータ型を意 識する必要があります。 72 Copyright 2006-2009 FUJITSU LIMITED 4.5 クラス利用の手順 .NETでの型の、COBOL言語上の扱いの対応表を以下に示します。 .NET基本データ型とCOBOLデータ型の対応 .NET Framework での型名 COBOL言語上の扱い 説明 System.Byte USAGE BINARY-CHAR UNSIGNED 8ビット符号なし整数 System.Sbyte "System.SByte"型オブジェクト参照 8ビット符号付き整数 System.Int16 USAGE BINARY-SHORT SIGNED 16ビット符号付き整数 System.Int32 USAGE BINARY-LONG SIGNED 32ビット符号付き整数 System.Int64 USAGE BINARY-DOUBLE SIGNED 64ビット符号付き整数 System.UInt16 "System.UInt16"型オブジェクト参照 16ビット符号なし整数 System.UInt32 "System.UInt32"型オブジェクト参照 32ビット符号なし整数 System.UInt64 "System.UInt64"型オブジェクト参照 64ビット符号なし整数 System.Single USAGE COMP-1 単精度浮動小数点 System.Double USAGE COMP-2 倍精度浮動小数点 System.Boolean "System.Boolean"型オブジェクト参照 ブール値(真または偽) System.Char PIC N Unicode文字(16ビット) System.Decimal "System.Decimal"型オブジェクト参照 96ビット10進値 System.IntPtr System.UIntPtr System.Object System.String 基になるプラットフォームによって サイズが決まる符号付き整数 (32 ビ ッ ト の プ ラ ッ ト フ ォ ー ム で は "System.IntPtr"型オブジェクト参照 32 ビ ッ ト 値 、 64 ビ ッ ト の プ ラ ッ ト フ ォームでは64ビット値) 基になるプラットフォームによって サイズが決まる符号なし整数 "System.UIntPtr"型オブジェクト参照 (32 ビ ッ ト の プ ラ ッ ト フ ォ ー ム で は 32 ビ ッ ト 値 、 64 ビ ッ ト の プ ラ ッ ト フ ォームでは64ビット値) .NET Frameworkのすべての型 "System.Object"型オブジェクト参照 のルート "System.String"型オブジェクト参照 Unicode文字の文字列 73 Copyright 2006-2009 FUJITSU LIMITED 4.5 クラス利用の手順 この表は、.NET Frameworkでの型が、COBOL言語上で何に相当する かをまとめたものです。リファレンスを参照してクラスを調査すると、 使用する引数などのデータは、.NET Frameworkの型で説明されていま す。そのようなデータをCOBOLの中で定義するときに利用してくださ い。クラスを使用するときには、この「型」という考え方が非常に大切に なります。定められたデータ型のデータを使用しないとクラスが使用で きないのです。しかし、この表を丸暗記する必要はありません。クラス を使っていく中で慣れていけば十分です。 それでは、具体的にクラスやプロパティをどのように操作するのかを 見ていきましょう。 74 Copyright 2006-2009 FUJITSU LIMITED 4.5 クラス利用の手順 オブジェクトの生成 クラスは、オブジェクトとして生成しないと使用可能になりません。 「クラスに機能を実行させるには、そのオブジェクト名、メソッド名を 指定して処理を依頼する。」ということを説明しましたが、その前にオ ブジェクトを生成しないと処理の依頼ができません。それには、 INVOKE文を使用して、次のように行います。 I N VO K E ク ラ ス の 内 部 名 " N E W " R E T U R N I N G オ ブ ジ ェ ク ト 変 数 名 REPOSITORY. CLASS-CONNECTION AS "System.Data.SqlClient.SqlConnection". DATA DIVISION. 01 ConnectDB OBJECT REFERENCE CLASS-CONNECTION ・ PROCEDURE DIVISION. ・ INVOKE CLASS-CONNECTION "NEW" RETURNING ConnectDB こ の コ ー デ ィ ン グ は 、 「 オ ブ ジ ェ ク ト 変 数 Co n n e c t D B で 参 照 で き る コ ネクションクラスのオブジェクトを新たに作成しました。」という意味 になります。これ以降、このオブジェクトは、オブジェクト変数 ConnectDBを指定して操作することができます(図4-5-8)。 (オブジェクト変数) CONNECTIONクラス オブジェクト 生成 ConnectDB CONNECTIONオブジェクト INVOKE CLASS-CONNECTION “NEW” RETURNING ConnectDB 図4-5-8 75 Copyright 2006-2009 FUJITSU LIMITED 4.5 クラス利用の手順 メソッド、プロパティの利用 オブジェクトを生成したら、そのオブジェクトの持つメソッドを利用 するにはどうすればよいのでしょう。それには、生成したオブジェクト に対してメソッドの実行を依頼して、実行結果をもらうことが必要です。 そのためには、オブジェクトの生成時と同様に、INVOKE文を使用しま す。 I N VO K E オ ブ ジ ェ ク ト 変 数 名 " メ ソ ッ ド 名 " [USING 引数1 引数2・・引数n] [RETURNING 戻り値] 次のようなクラスを例に見ていきましょう。 従業員クラス(照会メソッド(SHOUKAI)を持っている)の照会メソッ ドに従業員番号を渡して処理を依頼し、処理の結果として、その従業員 の 氏 名 を も ら い ま す (従 業 員 ク ラ ス の 定 義 は 、 C L A S S - E M P L O Y E E と 定 義済みの前提です)。この時のコーディングは、次のようになります。 01 JYUGYOIN OBJECT REFERENCE CLASS-EMPLOYEE ・・・・・・・・① 01 従業員番号 PIC 9(06). 01 氏名 PIC N(10). ・ INVOKE CLASS-EMPLOYEE "NEW" RETURNING JYUGYOIN. ・・・・・・② INVOKE JYUGYOIN "SHOUKAI" USING 従業員番号 RETURNING 氏名. ・・・③ ① 従 業 員 ( EM P L O Y E E ) ク ラ ス の オ ブ ジ ェ ク ト 変 数 を 定 義 し ま す 。 ② 従 業 員 ( EM P L O Y E E ) ク ラ ス の オ ブ ジ ェ ク ト を 生 成 し て 、 オ ブ ジ ェ ク ト 変 数 JY U G Y O I N で 参 照 可 能 と し ま す 。 ③従業員番号を引数として、従業員オブジェクトの照会(SYOUKAI) メソッドに対して処理を依頼し、戻り値として氏名を受け取ります。 また、このINVOKE文は次のように書くこともできます。 M O V E J Y U G Y O I N : : " S H O U K A I " ( 従 業 員 番 号 ) TO 氏 名 このような書き方を「メソッドの行内呼出し」と言います。メソッド に戻り値がある場合のみ、このような書き方ができます。しかし、行内 呼出し単独の使用はできず、MOVE文や後述のSET文とともに使用しま 76 Copyright 2006-2009 FUJITSU LIMITED 4.5 クラス利用の手順 す。 以上のように、オブジェクトを生成して、そのオブジェクトの持つメ ソッドに対して処理を依頼するというのが基本です。しかし、オブジェ クトを生成せずに、いきなり処理を依頼することのできるメソッドもあ るのです。これを「静的(スタティック)メソッド」と呼びます。プログ ラマーは、自分でオブジェクトを生成することなしに、メソッドを使用 できます。では、クラスライブラリを使用するときに使用したいメソッ ドが静的メソッドなのか否かを、どう判断すればよいのでしょう。 クラスライブラリを使用するときには、リファレンスを見て機能や使 い方を調べましたね。下のメソッド一覧を見てください。 S:静的メソッド 図4-5-9 画面中の「S」の表示が静的メソッドを表します。つまり、このメソッ ドは、オブジェクトの生成なしに使用できるということになります。静 的メソッドを使用するときには、INVOKE文でオブジェクト変数の代わ り に ク ラ ス 名 ( ク ラ ス の 内 部 名 )を 指 定 し ま す 。 プロパティの値は、デザイナで画面を作成する時に設定可能ですが、 プ ロ グ ラ ム か ら も 設 定 や 参 照 が 可 能 で す 。 そ の 際 使 用 す る の が 、 SE T 文 です。プロパティもメソッドと同様に、どのオブジェクトのプロパティ なのか特定する必要があります。そのためには、「OF」を使って次の 77 Copyright 2006-2009 FUJITSU LIMITED 4.5 クラス利用の手順 ように指定します。 プロパティ名 OF オブジェクト変数名 このようにプロパティを特定して、SET文の次のような指定で、値の 設定が可能になります。 S E T 受 け 側 TO 送 り 側 例えば、画面上のテキストボックスにある文字列をプログラムの作業 領域の変数に受け取る場合、次のようなコーディングになります。 REPOSITORY. PROPERTY PROP-TEXT AS "Text" ・・・・・・・・・・・① ・ WORKING- STORAGE SECTION. 01 lblPassword OBJECT REFERENCE CLASS-LABEL PROPERTY ・・・・・・・・・・・② 01 WK-Password PIC X(06). ・・・・・・・・・・・③ ・ PROCEDURE DIVISION. SET WK-Password TO PROP-TEXT OF lblPassword. ・・・④ ・ ① Te x t プ ロ パ テ ィ の 内 部 名 を 定 義 し ま す 。 ②配置された画面のコントロール毎に、オブジェクト変数が自動生成 されています。lblPasswordは、画面作成時にプロパティウィンドウ に設定したIDです。この名前がオブジェクト変数となり、プログラム からオブジェクトを参照可能となります。 ③パスワードの受け取り領域の定義です。 ④lblPasswordコントロールのテキストプロパティの内容をWKPasswordに設定しています。 .NET Frameworkで提供されるクラスライブラリに存在するクラスは、 多くのメソッドとプロパティを持っています。NetCOBOL for .NETの プログラミングでは、これらのクラスを使いこなしていくわけですが、 その際、組み込みオブジェクトも意識しておいてください。 こ れ は 、 We b 機 能 の 代 表 的 な ク ラ ス の オ ブ ジ ェ ク ト を 、 We b ア プ リ ケ ーション動作時、自動的に生成してくれるものです。つまり、プログラ マーがオブジェクトを生成しなくても、プロパティやメソッドが使用で 78 Copyright 2006-2009 FUJITSU LIMITED 4.5 クラス利用の手順 きるということです。メソッドについては、静的メソッドと同じように 使用できますが、静的メソッドの場合は、オブジェクトが自動生成され ているわけではありません。組み込みオブジェクトとして自動生成され るクラスとして、HttpRequest, HttpResponse, HttpServerUtilityなど(6 章参照)があります。 79 Copyright 2006-2009 FUJITSU LIMITED 4.6 具体例 4.6 具体例 そ れ で は 、 画 面 を 表 示 す る 簡 単 な We b ア プ リ ケ ー シ ョ ン を 作 成 し て 、 流れを確認していきましょう。次のような画面を持ち、入力された数字 の平方根を出力するプログラムを作成します。プログラムを起動すると、 画面の日付表示領域に現在の日付が表示されます。そして、この画面の 入 力 値 領 域 に 1 0 桁 以 下 の 数 値 を 設 定 し て 、 [ 計 算 ]ボ タ ン を ク リ ッ ク す る と、出力値領域に平方根が出力されます(図4-6-1)。 初期表示時に現在日付 計算ボタンをクリック すると、入力値領域の 数値の平方根を出力値 領域に表示 図4-6-1 ( 1 ) プ ロジェクトの作成 開 発 環 境 を 起 動 し 、 新 規 に We b サ イ ト を 作 成 し ま す 。 テ ン プ レ ー ト は 、 「 A S P. N E T We b サ イ ト 」 を 選 択 し 、 「 O K 」 を ク リ ッ ク し ま す ( 図 4 - 6 - 2 ) 。 「 A S P. N E T We b サ イ ト 」 を 選択 「Fujitsu NetCOBOL for .NET」を 選択 図4-6-2 「場所」と「プロジェクト名」は任意に設定します。 80 Copyright 2006-2009 FUJITSU LIMITED 4.6 具体例 ( 2 ) 画 面のデザイン コントロールの貼り付け 画面に次のコントロールを貼り付けていきます。 ・画面タイトル(Labelコントロール) ・日付表題(Labelコントロール) ・ 日 付 欄 ( Te x t B o x コ ン ト ロ ー ル ) ・入力値表題(Labelコントロール) ・ 入 力 欄 ( Te x t B o x コ ン ト ロ ー ル ) ・出力値表題(Labelコントロール) ・ 出 力 欄 ( Te x t B o x コ ン ト ロ ー ル ) ・計算ボタン(Buttonコントロール) 上記コントロールをツールボックス から画面上に貼り付け デザイン画面 に切り替え 図4-6-3 上記コントロールをツールボックスから画面上に貼り付けていきます。 Wi n d o w s フ ォ ー ム の デ ザ イ ン 画 面 で は 、 任 意 の 位 置 に コ ン ト ロ ー ル を 配 置 で き ま す が 、 We b フ ォ ー ム の デ ザ イ ン 画 面 で は 、 行 単 位 に カ レ ッ ト (縦棒の点滅)位置にコントロールを貼り付けていきます。カレット位 置は、矢印キーやマウスのクリックなどで移動させることができます。 また、カレットが表示されている状態(コントロールが選択されていな い 状 態 ) で [ E n t e r ]キ ー を 押 す こ と に よ り 、 新 し い 行 を 挿 入 す る こ と が で きます。ここでは、コントロールを貼り付けたあと、貼り付けたコント ロールの下に新しい行を挿入して、コントロールを貼り付けていきます (図4-6-3)。 81 Copyright 2006-2009 FUJITSU LIMITED 4.6 具体例 We b フ ォ ー ム で の コ ン ト ロ ー ル の 配 置 に は 、 貼 り 付 け た コ ン ト ロ ー ル を 選 択 し 、 書 式 メ ニ ュ ー の [位 置 ]で 任 意 の 位 置 を 指 定 す る 方 法 や 、 テ ー ブ ル メ ニ ュ ー の [テ ー ブ ル の 挿 入 ]で 作 成 さ れ る H T M L の テ ー ブ ル な ど を 使用して区画された位置にコントロールを配置する方法などがあります。 ( 3 ) プ ロパティの設定 各コントロールのプロパティは、プロパティウィンドウから行います。 各コントロールをクリックすると、プロパティウィンドウにそのコント ロールの持つプロパティが表示されるので、変更したい項目に値を設定 します。 画面タイトルのラベル をクリック 画面タイトルのラ ベルコントロールの プロパティを表示 図4-6-4 各プロパティの値を次のように設定します。色、フォントなどの項目 は、今回設定した値を記述していますが、任意の値を設定しても構いま せん。 画面タイトル(Labelコントロール) BackColor Font Text Yellow X-Large (+をクリックすると展開 Sizeで指定) Bold :True ■平方根算出画面■ 82 Copyright 2006-2009 FUJITSU LIMITED 4.6 具体例 Text 日付表題(Labelコントロール) 日付 入力値表題(Labelコントロール) Text 入力値 出力値表題(Labelコントロール) Text 出力値 日付欄(TextBoxコントロール) ID lblDate 入力欄(TextBoxコントロール) ID Maxlength txtInData 10 出力欄(TextBoxコントロール) ID txtOutData 計算ボタン(Buttonコントロール) Font Text Bold:True Size:Large 計算ボタン ( 4 ) C O BOL手続きの記述 画面の位置関係やコントロールの大きさを調整後、画面からCOBOL ソースプログラムを生成します。現時点でのソリューションエクスプロ ーラのウィンドウは、図4-6-5のようになっています、この状態で 「Default.aspx.cobx」をダブルクリックします。 83 Copyright 2006-2009 FUJITSU LIMITED 4.6 具体例 「Default.aspx.cobx」を ダブルクリック 図4-6-5 すると、図4-6-6の画面のようにCOBOLソースが表示されます。この ように、基本的部分のCOBOLソースは自動生成されます。この生成さ れたCOBOLソースに対して、必要な修正を行っていきます。この画面 とフォーム画面との切り替えは、画面上部のタグによっていつでも可能 です。 タグで切り替え 図4-6-6 84 Copyright 2006-2009 FUJITSU LIMITED 4.6 具体例 こ の 生 成 さ れ た プ ロ グ ラ ム ソ ー ス を 見 る と 、 PA G E _ L O A D メ ソ ッ ド が 存在します。ここは、この画面の初期処理を記述するメソッドでした。 この例では、初期画面出力時には、画面右上に現在日付を出力するよう になっています。つまり、画面の初期処理は、「現在の日付をこのテキ ストボックスに設定する。」ということになります。具体的には、以下 のような処理がこのメソッドに必要になります。 WORKING-STORAGE SECTION. 01 WK-YYYYMMDD PIC X(08). 01 WK-YMD. 03 WK-YYYY PIC ZZZ9. 03 FILLER PIC X(01) VALUE ".". ① 03 WK-MM PIC Z9. 03 FILLER PIC X(01) VALUE ".". 03 WK-DD PIC Z9. 01 WK-Date-R REDEFINES WK-YMD PIC X(10). PROCEDURE DIVISION USING BY VALUE PARAM-SENDER PARAM-E. MOVE FUNCTION CURRENT-DATE TO WK-YYYYMMDD. MOVE WK-YYYYMMDD(1:4) TO WK-YYYY. ② MOVE WK-YYYYMMDD(5:2) TO WK-MM. MOVE WK-YYYYMMDD(7:2) TO WK-DD. SET PROP-TEXT OF lblDate TO WK-Date-R. ・・・ ③ END METHOD PAGE_LOAD. ①②のコーディングについては問題ないですね。手続き型のCOBOL と同じ記述で、日付の編集領域の定義と、組み込み関数を使っての日付 の受け取り、編集を行っています。 ③でSET文を使用しています。コントロールが持つ値(プロパティ)は、 画面作成時に設定することも可能ですが、プログラムからの操作も可能 でしたね。この文により、プロパティで設定したID(lblDate)で示すコン トロールのプロパティに対して、編集済みの日付領域(WK-Date-R)の値 を設定しています。ここで記述されている「PROP-TEXT」とは何でしょ う。4.5章の「プロパティの登録」を思い出してください。プロパティを プログラムから参照するためには、プロパティ名を内部で使用する名称 で 登 録 し て お く 必 要 が あ り ま し た ね 。 そ の た め に 、 R E P O S I TO RY 段 落 に次の文を追加しておきます。 PROPERTY PROP-TEXT AS "Text" こ の 文 を 追 加 す る こ と に よ り 、 「 Te x t プ ロ パ テ ィ は 、 こ の プ ロ グ ラ ム の中ではPROP-TEXT という名前で参照します。」ということが宣言さ れるわけです。 それでは、残りの処理を考えていきます。このプログラムの機能は、 85 Copyright 2006-2009 FUJITSU LIMITED 4.6 具体例 ボタンをクリックすることで開始されます。入力値領域の数値の平方根 を計算して、出力値領域に表示するというものです。つまり、ボタンを クリックしたときのイベントとしての処理が必要になります。しかし、 今のCOBOLソースには、そのようなメソッドが見当りません。ボタン をクリックしたときの処理を記述するメソッドを生成する必要がありま す 。 そ の た め に は 、 フ ォ ー ム 画 面 か ら [計 算 ]ボ タ ン を ダ ブ ル ク リ ッ ク し ま す 。 す る と 、 エ デ ィ タ 画 面 に 自 動 的 に 遷 移 し 、 PA G E _ L O A D メ ソ ッ ド の 下 に 、 次 の よ う な Bu t t o n 1 _ C l i c k メ ソ ッ ド が 展 開 さ れ ま す ( 図 4 - 6 - 7 ) 。 ここに、ボタンをクリックしたときの処理を記述します。 生成 ダブルクリック METHOD-ID. Button1_Click PRIVATE. DATA DIVISION. WORKING-STORAGE SECTION. LINKAGE SECTION. 01 sender OBJECT REFERENCE CLASS-OBJECT. 01 e OBJECT REFERENCE CLASS-EVENTARGS. PROCEDURE DIVISION USING BY VALUE sender e. END METHOD Button1_Click. 図4-6-7 ボタンをクリックした時に行う処理は、入力値領域の数値の平方根を 算出して、その値を出力値領域に設定するというものです。そこで、こ のメソッドに次のような処理を記述します。 WORKING-STORAGE SECTION. 01 WK-IN PIC X(10) VALUE SPACE. 01 WK-SQRT PIC 9(10) VALUE 0. 01 WK-OUT PIC ZZZZZZZZZ9.99. PROCEDURE DIVISION USING BY VALUE sender e. SET WK-IN TO PROP-TEXT OF txtInData. UNSTRING WK-IN DELIMITED BY ALL " " INTO WK-SQRT. COMPUTE WK-OUT = FUNCTION SQRT(WK-SQRT). SET PROP-TEXT OF txtOutData TO WK-OUT. END METHOD Button1_Click. ① ② ③ ④ 86 Copyright 2006-2009 FUJITSU LIMITED 4.6 具体例 ① 入 力 値 の Te x t B o x に 設 定 し た I D ( t x t I n D a t a ) で テ キ ス ト プ ロ パ テ ィ を 参照して、WK-INに入力値を設定しています。 ② 入 力 値 か ら 数 字 の み 取 り 出 し ま す ( ス ペ ー ス カ ッ ト )。 ③ S Q RT 関 数 を 使 用 し て 平 方 根 を 算 出 し ま す 。 ④ 算 出 し た 平 方 根 を 、 出 力 値 の Te x t B o x に 設 定 し た I D ( t x t O u t D a t a ) で テキストプロパティを参照して、算出した平方根を設定します。 これだけで、プログラムは完成です。ここでは、手続き型のコーディ ングで平方根を算出しましたが、クラスを利用しての算出も、もちろん できます。そのコーディング例を記述しておきます。使用しているクラ スやメソッドをリファレンスで調べてみてください。 ( R E P O S I TO RY 段 落 に 追 加 ) CLASS CLASS-DOUBLE AS "System.Double" CLASS CLASS-STRING AS "System.String" CLASS CLASS-MATH AS "System.Math" ( B u t t o n 1 _ C l i c k メ ソ ッ ド 内 の W O R K I N G - S TO R A G E S E C T I O N に 追 加) 01 W-D 01 W-STR 01 WK-OUT OBJECT REFERENCE CLASS-DOUBLE. OBJECT REFERENCE CLASS-STRING. PIC X(10) VALUE SPACE. (Button1_Click メソッド内のPROCEDURE DIVISIONに追加) *>StringからDoubleに変換します SET W-STR TO PROP-TEXT OF txtInData. INVOKE CLASS-DOUBLE "Parse" USING W-STR RETURNING W-D. *>平方根を求めます INVOKE CLASS-MATH "Sqrt" USING W-D RETURNING W-D. *>結果を出力します SET WK-OUT TO W-D::"ToString". SET PROP-TEXT OF txtOutData TO WK-OUT. ( 5 ) プ ログラムのビルドと実行・デバッグ この後プログラムのビルドと実行・デバッグを行います。詳細は、5 章の演習の手順を参照してください。 87 Copyright 2006-2009 FUJITSU LIMITED