プチコン4 まとめWiki

オブジェクト指向ライブラリ

パンくずリスト

2020年7月18日投稿 / 投稿者 : りょうたんぽ / タグ : 投稿プログラム ツール ライブラリ オブジェクト指向

概要

オブジェクト指向もどきのためのライブラリ!! ……のテスト、というかデモ。プロジェクト名 OOPTEST。まだまだ途中だけど、一応使える形にはなってます。これからも更新します!

実はこのライブラリは「そのまま利用するライブラリ」として開発しているわけではありません。そのうち SB++ なる言語を作って、プチコン4で動かせるように変換し、その変換されたプログラムが利用するランタイムライブラリにしようと考えてます。そのまま使うには若干不便だけど、特に問題はないです!実際に、この後出て来るサンプルではライブラリをそのまま利用してます。コンバータが完成して SB++ プログラムが変換されたとき、そのような感じのプログラムになります。多分。

ライブラリファイル名は SBPLUSPLUS.LIB となってます。

ガイド

宣言

ライブラリを使うために、まず適当なスロットにライブラリを読み込みます。さらに、Objectクラスの宣言が必要です。

  1. exec ”sbplusplus.lib”,1
  2. const #SBPP_null=0
  3. @Object_Global
  4. enum\
  5.  #Object_base=#SBPP_null,\
  6.  #Object_magic,\
  7.  #Object_this,\
  8.  #Object_all
  9. const #Object=”%%$$”

特に肝心なのは #Object_all と #Object です。

あるクラス名を Class としたとき、#Class_all は別のクラスが Class を継承するときに使います。#Class は、インスタンスを生成するとき、SBPP_Create の引数に渡します。どちらも後述します。

クラスのメンバを定義

ここからは、Personクラスを例に進めます。Personクラスはフィールドとして、文字列型の氏名と、整数型の年齢をもつことにします。

フィールドを、定数で宣言します。

  1. @Person_Global
  2. enum\
  3.  #Person_base=#Object_all,\
  4.  #Person_name$,\
  5.  #Person_age,\
  6.  #Person_all
  7. const #Person=#Object+”B$%”

enum で定義した変数でフィールドの種類を定義しています。あとでインスタンスを生成して情報を取得・設定するとき、最後の all 以外の定数を使います。

最初のフィールドは特別で、名前を base とします。これはスーパークラスを表します。

最初の base には上のように、イコールに続けて継承するクラスを指定しなければなりません。たとえば継承するクラスが BaseClass の場合は #BaseClass_all という形で指定します。特にクラスを継承しないときは、必ず #Object_all を指定します。つまり、Objectはすべてのクラスが継承しています。

最後の定数で、メンバーの型を定義しています。スーパークラスの定数に追加する形で定義します。1文字1フィールドで、次のような意味を持ちます。変数名のサフィックスと一緒です。

文字
%整数型
#実数型
$文字列型

注意点として、この型のリストは B ではじめます。

コンストラクタの定義

コンストラクタは次のように作ります。

  1. common def Person(name$,age)
  2.  dim this=SBPP_Create(#Person,”Person”,”Object”)
  3.  SBPP_Set this,#Person_name$,name$
  4.  SBPP_Set this,#Person_age,age
  5.  return this
  6. end

SBPP_Create でインスタンスの領域を確保します。引数には、先ほどの型のリストと、自分のクラス名とスーパークラス名を指定します。

SBPP_Set でインスタンスのフィールドに値を設定します。

そして this が生成されたインスタンスです。最後に this を返すのもポイントです。

デストラクタの定義

デストラクタは次のように作ります。SBPP_Dispose でインスタンスを削除したとき、自動的に呼ばれます。スーパークラスにデストラクタがある場合は、明示的に呼ばなければいけません。

  1. common def Person_Dispose this
  2.  ’...
  3. end

メソッドの定義

あいさつを表示するメソッドを作ってみます。

  1. common def Person_Greet this
  2.  dim name$=SBPP_Get(this,#Person_name$)
  3.  dim age=SBPP_Get(this,#Person_age)
  4.  print ”どうも!”;age;”歳の”;name$;”です!”
  5. end

フィールドの値の取得には SBPP_Get を使います。必ず第1引数にインスタンスを渡せるようにします。

インスタンスの生成と利用

Personのインスタンスを生成するには先ほどのコンストラクタを呼びます。

  1. dim saito=Person(”Ichiro Saito”,20)
  2. Person_Greet saito

インスタンスの削除

使い終わったインスタンスは SBPP_Dispose で削除します。デストラクタが自動的に呼ばれます。

  1. SBPP_Dispose saito

公開キー

プチコン4 公開キー
4N3Q44344

コメント

この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)


メニュー 【4】

過去シリーズWiki

ヘルプ

リンク

最近の更新

最近の人気ページ

オンライン情報

  • 現在同時に 4 人がこのサイトを見ています
  • このページはこれまでに 89 回、本日は 2 回、昨日は 1 回閲覧されました

ページの先頭に戻る

表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.022 秒 | このページの最終更新 : 2020/07/18 (土) 16:10:51 (26d) | ログイン
Copyright(C) 2011-2019 プチコンまとめWiki