種類
「種類」とは、複数の手順や変数を機能ごとに分類して、まとめたものです。
プログラムが大きくなると、手順や変数をたくさん作ることになり、整理する必要があります。種類を使うことで、手順や変数を一つの固まりにまとめられます。種類は、一般のプログラミング言語では、クラスと呼ばれるものに相当します。
種類を使う
プロデルには、基本ライブラリやプラグインによって種類があらかじめ用意されています。
オブジェクト生成
「作る」文を使うと、指定した種類のオブジェクト(インスタンス)を作れます。
書式 「作る」文 (オブジェクト生成)
《オブジェクト名》という《種類名》を作る
「作る」文での初期値の指定
「作る」文では、種類を生成すると同時に、生成後のオブジェクトの設定項目や種類変数の初期値を指定できます。
この文法によりプログラムの簡略表記が可能になります。なお、初期値が指定できるのは、すでに定義してある設定項目か種類変数のみとなります。
例文 「作る」文で種類変数の初期値を指定する
池という円(半径15,位置{10,10})を作る 円とは +半径 +位置 終わり
例文 「作る」文で設定項目の初期値を指定する
窓というウィンドウを作る 窓に了解というボタン(幅100,高さ30,位置{50,50},内容「了解!」,見た目「フラット」,背景色黄色)を作る 窓を表示する 待機する
オブジェクトアクセス式
オブジェクトアクセス式は、オブジェクトの設定項目や種類変数にアクセスするための式です。
書式
《オブジェクト名》の《設定項目/種類変数》
例文
メッセージは「こんにちは」 メッセージのカタカナを表示する
手順の呼出し
種類には、特定の動作を実行するための手順があります。手順は、手順呼出し文で呼び出せます。
手順呼出し文の書き方は、手順により異なります。それぞれの種類の手順の説明や宣言内容を確認して、書いてください。
イベント手順の受け取り
「作る」式で【変数名】を指定すると、生成されたオブジェクトのイベント手順と、同じ種類スコープにある手順が自動的に対応付けられます。
詳しくは「作る」文の説明をご覧ください。
例文 ボタンのイベントが発生した時の手順を定義する
OKボタンというボタンを作る OKボタンがクリックされた時の手順 //対応付けられます 終わり
種類を定義する
種類の構成要素(メンバー)
種類には、次のような構成要素(メンバー)を定義できます。
- 変数(フィールド)
- 手順(メソッド)
- 設定項目(プロパティ)
- イベント手順
種類宣言文の書式
種類を定義するには、次のような種類宣言文を書きます。
種類宣言文の書式
《種類名》とは
/* この中に種類の構成要素の定義を書きます */
終わり
種類変数
種類の定義の上で、変数名を指定すると、その変数は種類に属する変数(フィールド)として定義されます。
変数定義上の変数の宣言は、様々な表現があります。「持つ」文で宣言するには、次のように書きます。
書式 種類変数の宣言文(日本語表記)
《変数名》を持つ 《種類名》である《変数名》を持つ
例文
マイカーという車を作る マイカーの名前は「カローラ」 車とは 名前を持つ 終わり
次のようにUML風に書くこともできます。
例文 種類変数の宣言文
《修飾子》《変数名》:《種類名》 《修飾子》《変数名》:《種類名》=《値》
例文
マイカーという車を作る 車とは +名前:文字列=「リーフ」 終わり
静的な種類変数
変数名に感嘆符“!”を付けることで、静的な種類変数として扱われます。この変数の値は「作る」文でインスタンスを作った場合でも、プログラム全体で1つの固有の値だけを持つ変数になります。
例文
Aというテストを作る Aの値は10 Bというテストを作る Bの値を報告する テストとは +値! 終わり
種類手順
種類宣言文に手順宣言文を書くことで、種類に属する手順を定義できます。
種類の手順宣言文の例文
種類の中に「鳴く」手順を定義します。なお手順宣言文の「自分」とは、 その手順が定義された種類そのものを表すキーワードです。
猫という動物を作る 猫が「にゃー」と鳴く 動物とは 自分が[鳴き声]と、鳴く手順 鳴き声を表示する 終わり 終わり
設定項目(プロパティ)
種類に、設定項目を定義できます。
取得する際の手順
種類の【設定項目名】に対し、設定項目が取得された際に実行する手順(ゲッター)を定義します。設定項目の結果は「返す」文を書きます。
《設定項目名》を取得する手順 《内容》を返す 終わり
設定する際の手順
種類の【設定項目名】に対し、設定項目へ設定する際に実行する手順(セッター)を定義します。設定項目へ設定する値は「設定値」変数に格納されます。
《設定項目名》を設定する手順 終わり
取得と設定の手順をまとめる
設定項目を取得する手順と設定する手順を一つにまとめることもできます。
《設定項目名》という属性 取得する手順 《内容》を返す 終わり 設定する手順 終わり 終わり
例文
利用者の年齢は10 利用者の年齢を表示する 利用者とは 歳を持つ 年齢という属性 設定する手順 歳は、設定値 終わり 取得する手順 歳を返す 終わり 終わり 終わり
はじめの手順(コンストラクタ)
「作る」文によって、種類が作成される際に最初に実行される手順です。多くの場合、変数の初期化などの処理を書きます。
はじめの手順 終わり
「はじめの手順」で引数を渡す場合には、次のように( )で囲って仮引数の変数名を指定します。複数指定する場合は、カンマ区切りで指定します。
「はじめの手順」の引数には、変数のみ指定でき、助詞は指定できません。
はじめ(名前,年齢)の手順 終わり
「はじめの手順」に引数を指定した場合は「作る」文で『種類名(引数)を作る』の形式で、引数に対応する値や式を指定します。
たろうという利用者(「太郎」,15)を作る 「[たろうの名前] [たろうの年齢]」を表示する 利用者とは 名前を持つ 年齢を持つ はじめ(名前,年齢)の手順 自分の名前は、名前 自分の年齢は、年齢 終わり 終わり
継承した種類のコンストラクタ
継承した種類では、そのコンストラクタが呼び出される前に、継承元のコンストラクタが呼び出されます。継承元のコンストラクタに、パラメータがある場合は、次のように継承元のコンストラクタのパラメータを指定します。
ユーザとは はじめ(名前)の手順 終わり 終わり 利用者とは ユーザを受け継ぐ はじめ(名前,年齢)の手順=(名前) 終わり 終わり
終わりの手順(デストラクタ)
種類が使用されず、削除される場合に実行する手順です。 種類が不要になった際に、関連する変数や機能を終了させる際に使用します。 プログラムの終了時や不要なメモリ領域が整理される際に自動的に実行されます。
助詞は指定できません。
終わりの手順 終わり
イベント手順を定義する
種類宣言文の中で「発生する」文を使ってイベント手順を定義できます。
イベント手順を定義すると、オブジェクトで発生したイベントをオブジェクト外部の手順で受け取られます。
マイカーという車を作る マイカーの到着した時の手順は、到着した マイカーが到着する 到着した手順 「到着しました。[改行][この時の緯度][この時の経度]」を情報アイコンで表示する 終わり 車とは // イベント手順を定義します 到着した時に発生する 【自分】が、到着する手順 // イベント手順を発生させます 情報という到着イベント情報を作る 情報の緯度は35.681382 情報の経度は139.766084 情報で到着した時を発生させる 終わり 終わり // イベント手順が発生したときに使用する付加情報 到着イベント情報とは イベント情報を継承する +緯度 +経度 終わり
メンバーのアクセス範囲を限定する
種類に属する変数または手順、設定項目は、他の種類からのアクセスを制限できます。
例えば、種類内部でのみの利用を想定した手順に対しては他の種類から実行できないように定義することや、種類所属する変数を他の種類からアクセスできないように定義できます。
識別子 | 意味 | 説明 |
---|---|---|
+ | 公開 | 変数へ設定・取得できる範囲は制限されません。(Public) |
- | 非公開 | 同じ種類にある手順からのみ利用することが可能です。(Private) |
# | 限定 | 同じ種類にある手順や継承された種類にある手順からのみ利用することが可能です。(Protected) |
~ | 内部限定 | (現在は無効)同一プログラム内から利用することが可能です。(Internal) |
(なし) | 通常は「+」(公開)と同じ制限になります |
例文
車の名前は「ベンツ」 車の色は「黒」 車の持ち主名は「カイル」 車の名前を表示する 車の暗証番号を表示する ーー見ることができない 車が内部処理する ーー実行できない [車が「1212」で、持ち主]なら 「この車の持ち主です」を表示する そうでなければ 「この車の持ち主でありません」を表示する そして 車とは +名前 +色 +持ち主名 -暗証番号 -自分が、内部処理する手順 暗証番号は「1212」 終わり 自分が、[キー]で、持ち主かどうかを判定する手順 内部処理する キーが、暗証番号なら ○を返す そうでなければ ×を返す そして 終わり 終わり
種類の継承
種類は、他の種類から継承できます。「継承」とは、すでに定義された種類の機能(手順や変数など)を引き継いで新しい種類を定義することです。
継承を使うことで例えば、すでにある種類をそのままにした上で違う所だけ新しい種類に定義することや、定義する変数や手順が共通する部分だけをまず1つの種類にまとめて、その種類を継承して異なる部分を定義することができます。
書式
《もとの種類の名前》を継承する 《もとの種類の名前》を受け継ぐ
別の種類にある手順や変数を受け継いだ新しい種類を作ります。継承した種類に、さらに手順や変数を追加して定義できます。
一つの種類で、受け継げる種類の数は、1つです。プラグインのオブジェクトから継承することもできます。
例えば、ウィンドウを引き継いて、それぞれの機能に合わせたウィンドウを種類として作られます。
例文
車を受け継いだ消防車という種類を作ります。消防車には「サイレン」という手順だけが書かれていますが、車を受け継いでいるため「鳴る」という手順を呼び出すこともできます。
消防車がサイレン 消防車が鳴る 消防車とは 車を受け継ぐ 自分が、サイレンする手順 「ウーウー」を表示する 終わり 終わり 車とは 自分が、鳴る手順 「ブッーブッー」を表示する 終わり 終わり
手順の上書き
継承先の種類にて、継承元にある手順と引数が同じ手順を新たに上書き定義できます。
同じ種類内の手順内で、レシーバ補語を省略すると、継承元の種類で呼び出した場合であっても、継承先の手順が優先されて呼び出されます。
レシーバ補語(「自分」)を明示的に指定すると、手順が継承先の手順で上書きされた場合でも、呼び出した種類を基準にして定義された手順が呼び出されます。
車Aという車改を作る 車Aが名前を表示する 車とは +名前 自分を命名する手順 名前は「テスト車」 終わり 自分が、名前を表示する手順 自分を命名する //同じ種類で定義された手順(車:命名する)が呼び出されます。 命名する //オーバライドされた手順(車改:命名する)が呼び出されます。 名前を報告する 終わり 終わり 車改とは 車を受け継ぐ 自分を命名する手順 名前は「テスト車改」 終わり 終わり
同じ手順名のオーバロード
通常は、ひとつの種類で、同じ名前の手順を定義できません。
ただし、手順に必要な情報(引数と助詞)やその数が違えば、同じ名前の手順を複数定義できます。このような同じ名前の手順でも、必要な情報が違う手順を定義することを手順のオーバロードと呼びます。
例文 手順のオーバロード
次の例では、犬種類に、引数の型が異なる「見る」手順が2つ定義されています。この2つの手順は「~を」で指定した対象に応じて実行する手順が変わります。
ぽちという犬を作る 健太という家族を作る 山田さんという知らない人を作る ぽちが健太を見る ぽちが山田さんを見る 犬とは 自分が、知らない人である[人]を、見る手順 「ワン!ワン!ワン!」を表示する 終わり 自分が、家族である[人]を、見る手順 「きゅうきゅん」を表示する 終わり 終わり 人とは 終わり 知らない人とは 人を継承する 終わり 家族とは 人を継承する 終わり
手順オーバロードの規則
同じ名前の手順を複数作る条件には、次の点が関係します。オーバロードできる手順を定義するには、同じ名前の他の手順と、引数の数、助詞、引数の型が違っている必要があります。
- 引数の数・・・引数は、変数と助詞の組みを表します。
- 助詞・・・助詞とは、“を”や“へ”など、引数に添えられる識別子です。
- 引数の型・・・引数の型とは、引数の変数の型です。「○○である」や「:○○」などで書くことで指定します。
例文 オーバロードできる例
1.次の例は、引数の数が異なるので、同じ名前の手順を定義できます。
[ファイル名]を[ソフト名]で開く手順 終わり [ファイル名]を開く手順 終わり
2.次の例は、引数の個数と変数の名前、引数に添えられた助詞は同じですが、引数の型が異なるので、同じ名前の手順を定義できます。
数値である[値]を足す手順 終わり 文字列である[値]を足す手順 終わり
3.次の例は、引数の個数と引数の型は同じですが、引数に添えられた助詞が異なるので、同じ名前の手順を定義できます。
文字列である[名前]と、走る手順 終わり 文字列である[名前]へ、走る手順 終わり
例文 オーバロードできない例
次の例は、引数の名前は異なりますが、引数の型と引数に添えられた助詞、その数も、同じなため同じ名前の手順を定義できません。
文字列である[ソフト名]を起動する手順 終わり 文字列である[ファイル名]を起動する手順 終わり
抽象的な種類
抽象的な種類は、生成できない種類であることを指定します。このキーワードが指定された種類にて定義された手順や変数は、継承した種類から利用できます。
実装なしの種類 (インタフェース)
実装なしの種類が手順宣言文の先頭のみでプログラム文本体を含まないことを指定します。このキーワードが指定された種類は、インタフェースとして扱われ、具体的な本題がない型情報のみが宣言できます。他の種類で実装することで使用します。
例文
実装なし(インタフェース)の種類である「水中生物」種類と「生物」種類を定義して、その両者を実装する「魚」種類を定義するプログラム例です。
【さかな:水中生物】 さかなという魚を作る //次のように書いて、実装なし種類を生成できません さかなという水中生物を作る 水中生物とは 実装なし 自分が、泳ぐ手順 終わり 終わり 生物とは 実装なし 自分が、生まれる手順 終わり 終わり 魚とは 水中生物を実装する 生物を実装する 自分が、泳ぐ手順 「すいすい」を表示する 終わり 自分が、生まれる手順 「うまれる」を表示する 終わり 終わり
単一種類 (シングルトン)
種類が単一種類(シングルトン)であることを指定します。このキーワードが指定された種類は、プログラム中で1回だけ自動的にインスタンスが生成されます。「作る」文によってインスタンスを作ることはできません。オブジェクトに種類名を直接指定することでその種類の手順や変数を利用できます。
例文
スカイツリーの高さを報告する //次ように書いてインスタンスは生成できません タワーというスカイツリーを作る タワーの高さを報告する スカイツリーとは 単一種類 +高さ=634 終わり
オブジェクトの種類を判定する
条件判断文を使ってオブジェクト(インスタンス)の種類を判定するには、条件式として「である」後置子を指定します。
《式》が《種類名》である
さかなが生物であるなら「さかなは生物です」を表示する