風の迷路

移転先:http://fermiumbay13.hatenablog.com/ ここはヤフーブログ終了に伴い12/15閉鎖します

├オブジェクト指向講座

[ リスト | 詳細 ]

RPGツクーラーのためのオブジェクト指向講座
記事検索
検索

全1ページ

[1]

第1回【変数と関数】

変数と関数とクラス

まずは「変数」「関数」についての解説です。
ざっくり言ってしまえば、変数は「もの」で関数は「こと」です。
変数がデータで、関数が処理ですね。
ツクール2000のイベント画面を確認してみましょう。

イメージ 1

赤で囲っている部分が変数に相当します。イベントのデータですね。
開始条件は何なのか、グラフィックは何か、向きは何か、歩くスピードは何か、全部データです。
対してイベント命令は処理の内容なので、関数に相当します。
何をして、何をして、何をする、というものです。ついでに言えば
移動ルートの設定も関数でしょうか。変数と考えてもいいですが、曖昧なところです。

それではオブジェクト指向でだいたい初めに紹介される「クラス」とは何なのかというと、
「変数」と「関数」を束ねたものとでも考えるのがよいでしょう。
すなわちここで言えばこのイベント全体がクラスです。
だから、イベントの名前がクラスの名前になりそうですね。

しかし、単純にイベント=クラスなのではありません。
ツクール2000のイベントとクラスで大きく違うところがあります。
クラスはオブジェクトの設計図でしかありません。つまり、クラスは実体じゃないのです。
ここでいうオブジェクトが、ツクールでいう目に見えて動いているあのイベントを指します。
イメージはこんなかんじね。

イメージ 2

一つのクラス(設計図)をもとに、オブジェクトを生成するのです。
オブジェクトを生成することを「インスタンス化」といいます。
ツクール2000だと、クラスとオブジェクトが一緒になっちゃってるイメージです。
イベントを編集画面で作ったと同時にイベントが配置されますよね。
そうするとちょっと不便なことが起こります。
似たようなイベントをコピペして配置すること、ツクーラーの皆さまならご経験ありますよね?
でも、設置したあとにイベント命令の一部だけ変えたい!とかなったら
またコピペしなおさなくちゃいけなくなって面倒ですよね。
対策は一応できますが、どうやってもやはり不自然になってしまいます。
上のこのようにクラスとオブジェクトで概念を分けておけば、
同じクラスから別々のオブジェクトを生成できるので便利なのですね。
ツクール5だと実はイベントの作成とイベントの配置が別になっていて、
そちらはクラスとオブジェクトの関係に似ています。

関数のイメージ

関数についての補足です。イベント命令を関数だと思ってください。
そうすると、ツクールのイベント命令は引数も戻り値もない関数と考えることができます。
次の図の上側(void event(void))のイメージですね。この場合はただ文字が表示されるだけです。

イメージ 3

対して、あんまり使う機会は少ないかもしれませんが、
値を渡してやって何か処理して、その結果を返してほしいイベントを作りたいときもあります。
例えば「平方根を求める」とかいうイベントですね。
変数1番に16を入れると変数2番に4って返ってきてほしいようなイベントです。
このとき、入力に用いる変数が「引数」で、出力に用いられる変数が「戻り値」と呼ばれることになります。
C++に限らず、だいたいの言語では引数を与えたら戻り値が返るようなものが提供されているはずですが、
ツクール2000には提供されていないのですよね。このように、変数の操作を使って実装することになります。

グローバル変数と関数

さて、さらにC言語もちょっと触ったことあるよ!という方なら
「グローバル変数」「グローバル関数」というものを聞いたことがあるかもしれません。
そして加えて、なるべくそれらは使うな!!という説明も受けていると思います。
それらはどこからでもアクセスできる万能なものなのですが、万能ゆえに
増えてくるとわけがわからなくなるし、重複して定義してしまえばバグの温床にもなりますので
なるべく使うんじゃないぞ!!などと説明されているわけです。

実は概念的にはツクール2000にもグローバル変数とグローバル関数があるのです。
「スイッチ・変数」がグローバル変数、「コモンイベント」がグローバル関数です。
だって、どのマップにいようとすべてのスイッチ・変数の操作は可能ですし、
コモンイベントは名前の通りどこからでも呼び出せるわけですよね。
そりゃあ便利なのですけれど、いずれも量が増えてくるとどこに何があったのか
本当にわからなくなってしまいます。グローバルなんとかの欠点が目に見えてわかるわけです。


次回からクラスについて触れていきますが、オブジェクト指向では
アクセスを制限するなどの工夫により、そのようなややこしさが解消されています。
実際覚えること多いのですけれど、でも使っているとオブジェクト指向は便利だなぁ、と
そのうち思えるようになってくるはずです。ぜひがんばりましょう^^!
RPGツクール(主に2000など、プログラミングがないもの)をやっていた方が、
オブジェクト指向プログラミングを習得するための講座です。
暇なときに書き進めます。飽きたらごめんなさい。

オブジェクト指向とはプログラミングのお作法の一つで、
「オブジェクト」と呼ばれるものを相互にやり取りさせることでシステムを動かすというものです。
原始的なプログラミングは単純にコードが上から下へ逐次的に実行されるイメージですが、
そういう順番にこなしていくというイメージではなく、
オブジェクト指向は色んなオブジェクトが動き回ってプログラムが展開していくイメージです。

RPGツクールにおけるゲームの作り方は、実はオブジェクト指向っぽいことが多く、
新たにオブジェクト指向でプログラミングをしようと考えている場合は
ツクールの似たような考え方と照らし合わせることで、早く定着させることができると考えたわけです。
だって、そうですよね。ツクールをやったことがあれば分かると思いますけれど、
決して一つの長い長いコードを逐次的に実行させるように作ることはしませんよね。
マップ上にイベントをいくつか置いて、それらの相互作用によりゲームが展開します。
さながらオブジェクト指向です。
XP以降でオブジェクト指向言語(RGSS)が取り入れられたのも何だか納得できます。

そんなわけで、いつかのアクションゲーム講座みたいな感じのノリで
次のような予定で書き進めていくことを考えています。

【目的】
RPGツクール2000とC++言語を例にして、
必要最低限の(クラスベースの)オブジェクト指向のイメージの定着を目指す。

【対象】
・C言語のような手続き型言語をちょっとは知っている。
・ツクールをやったことがある。
・だけどクラスはわからない。

【予定】
・第1回【変数と関数】
・第2回【クラス】
・第3回【インスタンス化】
・第4回【静的クラス】
・第5回【アクセス制限】
・第6回【継承】
・第7回【ポリモーフィズム】
・第8回【何か作ってみようよ】

オブジェクト指向講座としてはありきたりな順序だと思いますけれど、
あくまでツクールと照らし合わせながら書くつもりです。
途中でエターナっちゃったら、笑ってやってください。

全1ページ

[1]


.
検索 検索
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
フェルミウム湾
フェルミウム湾
男性 / O型
人気度
Yahoo!ブログヘルプ - ブログ人気度について

過去の記事一覧

よしもとブログランキング

もっと見る

[PR]お得情報

ふるさと納税サイト『さとふる』
11/30まで5周年記念キャンペーン中!
Amazonギフト券1000円分当たる!
数量限定!イオンおまとめ企画
「無料お試しクーポン」か
「値引きクーポン」が必ず当たる!
お肉、魚介、お米、おせちまで
おすすめ特産品がランキングで選べる
ふるさと納税サイト『さとふる』

その他のキャンペーン


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事