ユーザーオブジェクトの継承とは? ~PowerBuilder 入門!!第 7 弾 (2)~

みなさん、こんにちは!

このブログは、「PowerBuilder ってなに?」「PowerBuilder ってなにができるの?」という疑問に、IT 用語の解説もしつつ、簡単に分かりやすくお答えすることをモットーにしています。

気になる方はぜひ続きを見てみてくださいね。

キャラクター紹介

ねこぴ自己紹介

ねこぴ

PowerBuilder の日本語版オリジナルキャラクター。
(猫に見えるが) PowerBuilder の先生。

最近、海外旅行に行きたくて仕方ない。

ちまき自己紹介

ちまき

PowerBuilder をこれから学びたい開発初心者。

最近、世界のお菓子を作るのが好き。

ある日の午後のこと・・・。

ねこぴ話す

最近、世界旅行の宣伝が多いにゃ!

いざ!旅行王を目指すにゃ!

ちまき笑う

旅行王・・・

そして仲間を増やしていくやつですか?

ねこぴ説明

そうだにゃ!

そしてねこぴ旅行王の伝説は弟子に「継承」されていくのにゃ!

ちまき説明

今日のテーマですね!!!

前回は ユーザーオブジェクトについて でしたよね!

ねこぴ説明

無理やり感が強いとかは禁句だにゃ!

今回はユーザーオブジェクトの中でも継承について学んでいくにゃ。

ちまき疑問

「継承」と聞いたら、親から子へ受け継がれる、師匠から弟子へ継承されるみたいなのが思い浮かびますけど・・・

そんな感じですか?

ねこぴ説明

そんな感じにゃ。知っていると便利な機能だから覚えてほしいにゃ。

 

前回のブログでは「ユーザーオブジェクトの基礎」について解説しました。

今回はユーザーオブジェクトの継承について解説していきたいと思います。


PowerBuilder って何なの?と思ったあなた!

PowerBuilder 入門ブログシリーズ第 1 弾をぜひご覧ください(^◇^)

PowerBuilder とは? ~PowerBuilder 入門!! 第 1 弾~

 

動画で分かりやすくPowerBuilder について知りたいなあという方は・・・

YouTube で PowerBuilder 入門シリーズの動画を公開中!なので要チェック★

最新版はこちら↓↓


タイトル画像

前回のブログでユーザーオブジェクトとは 1 か所だけでなく、いろんなところに応用したい

動作を 1 つのオブジェクトとして保存する「オブジェクト指向」に基づいた考え持つものだと説明しましたね!

これはまさに「オブジェクト指向」に基づいた考えだと言えますね(・ω・)ノ

また「オブジェクト指向」は、オブジェクトごとに管理することで、修正や変更が簡単にできる

ということでした。

 

エディットマスク

 

例えば前回紹介した上記の画像です。

こちらはビジュアルユーザーオブジェクトのエディットマスクです。

「このエディットマスク、色々な場面で使いそうだな。でもいちいちそれぞれのエディットマスクに同じ処理を設定するのは面倒くさい。」

そんな時は、ユーザーオブジェクトとして保存しておけば、設定した機能通り動く(この場合、エディットマスク)をいつでもどこからでも呼び出して使えるのでした。


タイトル画像

では、ここからはユーザーオブジェクトについてもう少し確認していきましょう。ユーザーオブジェクトは「継承」いう機能があります(^o^)

では、「継承」とは何か?

あるオブジェクト(先祖)から同じ機能を備えた別のオブジェクト(子孫)を作成することです。

「継承」と聞いたイメージそのままですね。しかも聞いて驚くなかれ\(^o^)/

子孫は先祖の機能を受け継ぎつつ、自分で機能を設定することができるのです。

 

構文のまとめ

 


タイトル画像

では継承方法について解説していきます。

おっと、その前に以前説明をしてなかったことがあります。

今回エディットマスクを継承の例として設定したいと思いますが、以前作成したエディットマスクを一旦保存してみましょう。

以前作成したビジュアルユーザーオブジェクトの標準ビジュアルで作成した「エディットマスク」を開いてください!

ちなみに PowerBuilder は何かを新規作成した場合、1つでも変更を加えないと保存ができません。(名前を変更する、どこかにチェックを入れるなど)

継承の説明にもなりますので、説明をしながら必要な設定をしたいと思います。

まずは「プロパティ」の設定を行っていきます。

カスタムクラス

 

それでは、さっそく全般タブの「テキスト」の「未設定」という文字を削除しましょう。

そして同じく全般タブの「IME」を「なし」に設定しましょう。IME は、英数字や日本語など入力するエリアによって入力できる方法を設定できるプロパティです。「なし」なので特にカラムに応じて切り替える設定は行いません。

そしてマスクタブの「マスク」を「なし」に、「マスクデータ型」は、「stringmask!」にしてください。「stringmask!」は String 型が入力可能なマスク専用にするということですね!

 

続いて以下のようにコードを記述してみてください。イベントは「getfocus」にしましょう。SetFocus は指定のコントロールにフォーカスをセットする関数です。

「getfocus」は、エディットマスクオブジェクトにカーソルのフォーカスが当たっているときに発動するイベントですね。

先祖オブジェクト_スクリプト記載

 

それでは保存したいと思います。

PowerBuilder のコントロール命名規約によると、エディットマスクに関しては「em」なので、ユーザーオブジェクトの頭文字と併せて、「uo_em」と名前を付けます。

カスタムクラスペインタ

 

正常に保存されると、ツリービューにユーザーオブジェクトが表示されます。

(ユーザーって名前だから人の形なのかな笑)

ツリービュー

 

お待たせしました( ˘ω˘ ) それでは継承方法の説明に入っていきますね!

継承を行うには、メニューから継承を選択するか、パワーバーからオブジェクトの継承アイコンをクリックします。

ではメニューのファイルを選択し、リスト 2 番目の継承をクリックします。

そうすると、「オブジェクトから継承」というダイアログが開きます。

1番下の「オブジェクトの種類」から「ユーザ オブジェクト」を選ぶと、右側の一覧に pbl に格納されているユーザーオブジェクトが表示されます。これは継承したい先祖を選ぶ画面になりますね。

選択した「uo_em」を継承したオブジェクトが現れました!

継承ウィンドウ

 

すると、先ほど保存した「uo_em」から継承したオブジェクトが現れました!

ウィンドウのところに「uo_em から継承したユーザ オブジェクト」としっかりと記載がありますね。

継承したオブジェクト

 

先祖でスクリプトが定義されている場合は、イベントリストや関数リストのアイコン色が青くなります。イベントや関数は先祖の機能をそのまま受け継いでいますが、子孫の方ではスクリプトを定義しない限り表示はされません。

 

以上が継承方法となります^^


タイトル画像

先ほどの説明にもあった通り、子孫は先祖に定義されている機能を受け継ぐことができます(^^)/

ということは、先祖に定義されていれば、その先祖を継承した子孫にいちいちスクリプトを記述しなくても、先祖と同じ定義がされているオブジェクトを大量生産できるというわけですね!

ただし、全て許されるという訳ではなく、スクリプトの実行には一定のルールが存在します。

それが以下です。

 

  • 関数の場合
    • 先祖にスクリプトが記述されている場合は、先祖のスクリプトがそのまま実行されますが、子孫に記述した場合は上書きされます。

  • イベントの場合
    • 先祖に規定された機能が実行され、次に子孫に規定された機能が実行されます。ただし、「先祖スクリプトの拡張」という機能を OFF にした場合は先祖に規定された機能は実行されず、子孫の機能だけが実行されます。
  •  

    「先祖スクリプトの拡張」は子孫の画面から右クリックで確認することができ、子孫にスクリプトが記述されているときのみ有効となります(^^)/

    先祖スクリプトの拡張

     

    継承機能を使って、「uo_em」からさらに「uo_em_child」を作成しました。

    子孫からも先祖に書いてあるスクリプトを確認することができます!

    ただし、整合性を保つために編集はできません。

    編集をしたい場合は先祖から行うようにしてくださいね(^^)

    子孫から先祖確認

     

    上の図で、先祖や子孫のユーザーオブジェクト横に何やら色のついた、ゲームで言うと手紙みたいなマークがついていますよね(^o^)

    これは「白」だと自身のみにスクリプトが記載されているという意味になり、「青」だと先祖のみにスクリプトが記載されているという意味になります。

    マークの違い

     


     

    ちまき喜び

    先祖があれば、継承によって子孫を作成することで、楽に機能を複製できますね!

    継承いいですね。

    ねこぴ回答

    そゆことだにゃ。

    ルールを確認しつつ、上手く使えば開発も早くなるにゃね。

     


      • -継承とはあるオブジェクト(先祖)から同じ機能を備えた別のオブジェクト(子孫)を作成すること
      • -子孫は先祖で設定されている機能を引き継ぐことができる
      • -継承においては一定のルールがあるが、継承を行うことで開発が早くなるので便利!

       

      PowerBuilder 入門ブログシリーズ、次回の内容はこちら↓↓

      https://japan.appeon.com/technical/techblog/userobject-bblog-7-3/

      いかがでしたでしょうか?

      より詳しく PowerBuilder に関してお知りになりたい方は、 Appeon 社の製品サイトをチェック!


      Appeon 社の製品サイトはこちら

       

      「難しい言葉は簡単に、分かりやすく」をモットーに、今後も PowerBuilder についてお伝えしていきたいと思いますので、どうぞよろしくお願いします!

      テクニカルブログ 一覧を見る
PowerBuilder マイグレーション
PowerBuilder学習、動画で始めちゃう?