Actorクラスとメソッドアクセス制御:キャラ管理ライブラリを考える(4)

例えば、スーパークラスのActorで座標を管理するxとyは、サブクラスからはアクセスできないようにする。
internal_xとかそういう名前にしておいて、はじめにxからinternal_xにコピーして、自動処理内ではそっちをアクセスし、自動処理が終わったらまたxに入れておく。
こうしておけばRubyのメソッドを検索する必要性は無くなる。
C++ならprivateキーワードでそういうことができたような気がする。
ところが、Rubyのアクセス制御を調べてみると、protectedやprivateキーワードはC++とは意味が違うようだ。
んで、サブクラスがスーパークラスインスタンスを参照できないようにするものは、どうやら無い。
あるのかもしれないが、わからなかった。
とはいえ、Ruby的には無くても、Cで作った拡張ライブラリならそんなことはやりたい放題だ。
単純に公開しなければよい。


DXRubyでも、公開していない変数は普通にたくさんある。
内部処理なのだから、それらを全部理解して使うならいいが、そうでもないのにいじられたらたまらないわけだ。
そういう意味では、サブクラスに公開しないインスタンス変数というのは、普通にあっておかしくはないし、Cで作ったライブラリであればなおさら、Rubyから見えない値があるのは当たり前だ。
そう考えれば、ActorとLayer関連は結構できそうな気がしてくる。
問題なのは、DXRubyのように単発のクラス群ではなく、Actorはスーパークラスとして設計しなければならいところで、このあたりは経験が無いので正直よくわからない。
まあ、DXRubyそのものも、まったく経験の無いところから作っているわけだが。
拡張ライブラリもDirectXもはじめてだし。
なんにせよ、きちんと理解すれば使えても、変な使い方をすると意味不明な動きをする、とかだと非常に困る。
DXRubyのターゲットから考えても、初心者が簡単に使えるようなものが望ましい。
どうしたら自然な感じになるのかは、やっぱりいろいろ試しながらということになるだろう。