~オブジェクト指向プログラミングの書き方~

日本語(Japanese page) 英語(English page)

このページではオブジェクト指向の書き方についてまとめています。オブジェクト指向プログラミングについてクラスの作り方といった基本的な知識があるとより理解しやすいと思います。

勝手にオブジェクト指向プログラミングになるルールが紹介された資料を見つけて (このページ、このページの参考文献(本)がこれらしい。) オブジェクト指向プログラミングができるようになったので、 そのルールを自分なりにアレンジしたものとそのお役立ち度や効果を紹介します。

また、オブジェクト指向プログラミングが何を理想としているのかを示すためにオブジェクト指向の考え方を紹介します。

オブジェクト指向とは

まず、言葉の意味について記載します。オブジェクト指向についても説明してしまいます。

オブジェクト指向とは上に書いたようにただの書き方のお作法の1つということになります。

ただし、正しい書き方というのは一通りではありません。

では、どのように正しい書き方ができているか判断するかというと、後で記載しているオブジェクト指向によって得られるメリットが十分得られていると感じられれば上手くオブジェクト指向プログラミングができていると判断します。

つまり、正しい書き方とはプログラムを書いている人が決めるものであり、絶対的な正解はなく、完全に主観です。

ここでオブジェクト指向プログラム言語に出てくるクラスという概念についても簡単に触れておきます。

クラスとはコンピュータにやってほしい仕事をなるべく小さく簡単な仕事に分けたときにその小さな仕事(関数)とそれに関わる変数を1つにまとめたものです。

例えばゲームでのHP関連の仕事をクラスにまとめることを考えると、変数としてHPと回復する(HPを増やす)関数とダメージを受ける(HPを減らす)関数と死亡判定する(HPが0以下になったかどうか判定する)関数ぐらいをひとまとめにします。

クラスは「モノ」だと説明されて犬クラスを作成する例がよく紹介されます。犬には名前があって、吠えるという仕事(関数)を定義したり、名前を出力する仕事を定義したりします。しかし、もっと抽象的で実際にないものを、例えばゲームでの敵との接触判定をクラスにしてもよいです。

犬の例はイメージしやすくなるという良い点もあるのですが、「モノ」のイメージに捉われてしまい私は好きではありません。

オブジェクト指向によって得られるメリット

オブジェクト指向プログラミングによって得られるメリットは以下の通りです。

オブジェクト指向プログラミングをするときに意識したいルール

オブジェクト指向プログラミングをするときに意識したほうが良いルールを以下で紹介します。

勝手にオブジェクト指向プログラミングになるルールを守り、オブジェクト指向プログラミングを体験することによって、オブジェクト指向プログラミングを理解することができます。

慣れればどのくらいなら変更してもオブジェクト指向プログラミングのメリットを享受できるかわかるようになります。

そこまでくれば、ルールを守ることで増えるプログラミングにかかる時間とメリットのバランスを見てルールを守るか破るか決められるようになります。

多すぎて覚えられないという方は最初の「1クラス80行以下」、あるいは「クラスを単純に書く」だけでも意識してみることをオススメします。

最初から理想的なオブジェクト指向になったコードを書くのは難しいので、まずは望みの仕事が実行されるコードをとにかく書いて、その後にきれいに直していく(これをリファクタリングといいます。)のがいいと思います。

仕事の組み合わせ方

最初に書いたようにオブジェクト指向では小さな仕事を組み合わせることで仕事内容をコンピュータに指示します。

意識したほうがいいルール「Setterは使わない」、「求めるな、命じよ」に書いたようにSetter、Getterを使わないほうがいいと書きました。

これでどうやって仕事を組み合わせるのかというと、ある関数の引数にクラスを指定することによって実現します。

例えば、ゲームオーバーの処理を例に具体的に示します。

class HP{
private int hp;
public boolean deadJudge()
{
if(hp<=0)
{
return true;
}
return false;
}
}
--------------------------------------
class GameOver{
public void execute(HP PlayerHP)
{
if(PlayerHP.deadJudge()==false)
{
return;
}
(GameOverの処理)
}

少しおかしいかもしれませんが、雰囲気は伝わるのではないかと思います。



ウェブ全体検索
サイト内検索
関連ページ

知識共有ノート一覧へ


Twitterプロフィールページ
Twitterやってます。お気軽にフォローしてください。


当サイトへのリンクについて
当サイトへリンクする際のお願いを記載しています。バナーもこちらに用意しています。




利用規約 プライバシーポリシー お問い合わせ 当サイトへのリンクについて Twitter
メニューへ