みなさん、こんにちは!
このブログは、「PowerBuilder ってなに?」、「PowerBuilder って何ができるの?」という疑問に、IT 用語の解説もしつつ、簡単に分かりやすくお答えすることをモットーにしています。
気になる方はぜひ続きを見てみてくださいね。
ねこぴ
PowerBuilder レクチャーのキャラクター。
(猫に見えるが)PowerBuilder の先生。
ゆる~く楽しく!がモットー。
ちまき
PowerBuilder をこれから学びたい開発初心者。
ITの知識はちょっとあるようなないようなレベル。
YouTube では、この PowerBuilder 入門シリーズの動画版を公開しています!
動画版では、実際の PowerBuilder の画面操作をしているところを確認しながら進められるので、より理解力が深まります。
あわせてぜひご視聴ください!
最近、世界旅行の宣伝が多いにゃ!
いざ!旅行王を目指すにゃ!
旅行王・・・
そして仲間を増やしていくやつですか?
そうだにゃ!
そしてねこぴ旅行王の伝説は弟子に「継承」されていくのにゃ!
今日のテーマですね!!!
前回は ユーザーオブジェクトについて でしたよね!
無理やり感が強いとかは禁句だにゃ!
今回はユーザーオブジェクトの中でも継承について学んでいくにゃ。
「継承」と聞いたら、親から子へ受け継がれる、師匠から弟子へ継承されるみたいなのが思い浮かびますけど・・・そんな感じですか?
そんな感じにゃ。知っていると便利な機能だから覚えてほしいにゃ。
前回のブログでは「ユーザーオブジェクトの基礎」について解説しました。
今回はユーザーオブジェクトの継承について解説していきたいと思います。
PowerBuilder って何なの?と思ったあなた!
PowerBuilder 入門シリーズの第 1 弾ブログをぜひご覧ください(^◇^)
前回のブログでユーザーオブジェクトとは 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^)
これは「白」だと自身のみにスクリプトが記載されているという意味になり、「青」だと先祖のみにスクリプトが記載されているという意味になります。
先祖があれば、継承によって子孫を作成することで、楽に機能を複製できますね!
継承いいですね。
そゆことだにゃ。
ルールを確認しつつ、上手く使えば開発も早くなるにゃね。
・継承とはあるオブジェクト(先祖)から同じ機能を備えた別のオブジェクト(子孫)を作成すること
・子孫は先祖で設定されている機能を引き継ぐことができる
・継承においては一定のルールがあるが、継承を行うことで開発が早くなるので便利!
こちらのブログシリーズ次回の記事はこちら↓↓