Objective-C入門番外編:オブジェクト指向って何だろう?

サルでき.jp > 11.サルにもできるiPhoneアプリの作り方(旧アメブロ記事) > Objective-C入門番外編:オブジェクト指向って何だろう?

2009/08/28 09:00 投稿先 11.サルにもできるiPhoneアプリの作り方(旧アメブロ記事) 投稿者 カワサキ タカシ

回はObjective-Cの「Objective」の部分、オブジェクト指向のお話です。

今から10年くらい前、
私がシステム屋を始めた頃「プログラム言語と言えばJava」という時代がありました。

なぜって「オブジェクト指向」がJavaの代名詞だったからで、
これからは「オブジェクト指向」の時代だ、と言われていたからです。

勉強しましたね~、というか、させられてましたね~。

継承、汎化、特化、スーパークラス、サブクラス、インターフェース、属性、関連、集約、委譲、オーバーライド、オーバーロード、コンストラクタ、パッケージ、ガベージコレクション、フレームワーク、コンポーネント、ユースケース、ベギラマ、マヌーサ、ホイミ

呪文のような言葉のオンパレード。

言葉は覚えても意味はわからず。
っていうか、
本だけ読んでオブジェクト指向が理解できる人とは友達になれそうもありません。私。

幸か不幸かJavaをプロジェクトで使うことが少なかったため、
コレ幸いと記憶から消去していきました。

ココロの奥底ではすこーし気にしていたんです。

「オブジェクト指向」って結局なんだったんだろうって。

私がオブジェクト指向と再会を果たすのはそれからずーっと後、
Action Scriptという言語を使うようになってからでした。
結構最近のことです。

Action Scriptっていうのは、
Webで良く見かける「Flash」をプログラミングするための言語で、
以前このブログでも書いた「アニメーション」に特化した機能を多く持っています。
開発基礎トレ4:アニメーションの基礎知識 その1
開発基礎トレ5:アニメーションの基礎知識 その2

言語自体がわかりやすいっていう特徴のもあるのですが、
「動くもの」を作るので、概念をより明確に理解することができるオススメの言語です。

私はコレをやってようやく少し「オブジェクト指向」を理解することができました。

呪文の部分ではなく、なにが良いの?オブジェクト指向っての部分が。

ということで、
今回はFlashで「オブジェクト指向」のお話をしていきます。

Objective-Cがどうか、っていうのは後で考えましょう。
あっちの方が難しい気がしますし、同じオブジェクト指向仲間です。
近い近い。きっと。

——————-

試しにWikiで見てみましょうか

オブジェクト指向(オブジェクトしこう)とは、オブジェクト同士の相互作用としてシステムの振る舞いをとらえる考え方である。英語の object-oriented (直訳は、「対象物志向の」・「目的重視の」という意味の形容詞) の日本語訳である。
オブジェクト指向は、当初プログラムの構造をオブジェクト群の相互作用とおよびその雛形であるクラス群の関係として捉え、プログラムコードを書き表すオブジェクト指向プログラミング (OOP; object-oriented programming) から始まっているが、その後、システム開発における要求分析フェイズに略

ハイ、ストーップ!

何語だ。

コレでは理解しろって方が無理ってもんです。

サルでき式に行きましょう

オブジェクト指向は、同じコードを繰り返し書くのをどれだけサボるか、ということと、いかに無駄無く使い回しをするか、ということを極限まで追求した考え方である。

ぐっとわかりやすくなりましたね。

こ難しそうなこと言っても、要は「楽したい」ってことです。
当たり前です。楽にならないもんがこんなに流行るわけない。

オブジェクト指向がわかりにくい理由は、
楽するための手続きが異常に難解。ってことに尽きます。矛盾してます。

最初に書いた呪文もそうですね。
こんなにいっぱい新しい言葉を作るからダメなんです。

何がどれだけ楽になるのか。覚えるのはそれだけです。

さて、ここに1つボールを用意しました。
(アメブロにはFlashを貼付けられないので、リンクを貼っています。)
(再生できない方はこちらからFlash Playerをダウンロードしてください。)

Objective-C入門番外編:オブジェクト指向って何だろう?
<Flashで見る>

ボールです。

大きさ(半径)は18px。
色は赤です。

コレをプログラムで書くとすると、

・円を描く(大きさ18pxと色REDを指定)

こんな感じになります。

せっかく書いたのは良いのですが、
これでは少し寂しいので、弾んでもらいましょう。

Objective-C入門番外編:オブジェクト指向って何だろう?
<Flashで見る>

弾みましたね。
びよーんびよーん。

コレをプログラムで書くとすると、

・円を描く(大きさ18pxと色REDを指定)
・重力に引っ張られる(速度をプラスし、Y座標にプラス)
・壁に当たったらバウンド(速度を反転)
・1フレームごとに再描画

こんな感じになります。
ぐっと長くなってきました。

じゃぁ、これはどうでしょう。

Objective-C入門番外編:オブジェクト指向って何だろう?
<Flashで見る>

ボール、山盛りです。
最大50個くらいボールが出てきます。
びよびよびよびよびよびよびよびよびよびよよよーん。

さーて。
プログラムで書いてみましょうか。

// ボール1個目
・円を描く(大きさ10pxと色GREENを指定)
・重力に引っ張られる(速度をプラスし、Y座標にプラス)
・壁に当たったらバウンド(速度を反転)
・障害物に当たったらバウンド(速度を反転)
・1フレームごとに再描画

// ボール2個目
・円を描く(大きさ5pxと色BLUEを指定)
・重力に引っ張られる(速度をプラスし、Y座標にプラス)
・壁に当たったらバウンド(速度を反転)
・障害物に当たったらバウンド(速度を反転)
・1フレームごとに再描画

// ボール3個目

// ボール50個目

ホントに、書きますか?コレ。

50個もほとんど同じようなこと書いてるんです。
違う部分は個別に設定するとして、あとは1回で済ませたいでしょ。
早く帰って晩飯食いたいし。

さらに問題は、
もし「円」じゃなくて「四角」が描きたくなったらどうします?

50個全部直しますか?

楽してぇ!=オブジェクト指向
の、法則です。
コレを解決するためにオブジェクト指向は生まれたハズです。私はそう思う。

だから、まずこうします。

// ボールってのはこういうもの設計図
・円を描く(大きさXXと色XXを指定
・重力に引っ張られる(速度をプラスし、Y座標にプラス)
・壁に当たったらバウンド(速度を反転)
・障害物に当たったらバウンド(速度を反転)
・1フレームごとに再描画

で、こうします。

// ボール量産マシーン
・大きさ10px、色GREEN「あとは設計図通りボールを作る」
・大きさ15px、色RED「あとは設計図通りボールを作る」
・大きさ3px、色BLUE「あとは設計図通りボールを作る」
・大きさ7px、色YELLOW「あとは設計図通りボールを作る」
※50回繰り返し

そうそう、こういう感じ。

このボールの設計図のことを「クラス」と言います。

こいつに「大きさ」と「色」を指定して、
作りだされた1個1個のボールのことを「インスタンス」と言います。

クラス(設計図)の中には

プロパティ(色とか大きさとか、「属性(静的な値)」の部分)
メソッド(重力に引っ張られるとか、壁に当たったらバウンドとか、「処理(動的な動き)」の部分)

を組み込むことができますので、
クラスから作られたインスタンスもまた、プロパティやメソッドを持っています。

しかも1個1個のボールが、個別に。(コレが重要)

サンプルとしてリンクしてある「跳」というボールが舞い散るプログラム。

ボールの設計図(クラス)は1個だけ作っています。
そのクラスから、50個のインスタンスを、色と大きさを個別に指定して作っています。
(このクラスからインスタンスを作ることを「インスタンス化」と言います。)

後は、放置です。

1個1個のインスタンスが、自分のプロパティとメソッドを使って、勝手に重力に引っ張られたりバウンドをしたりしています。

もしボールを四角にしたくなったら?
もし重力の力をもう少し強くしたくなったら?

簡単です。

設計図(クラス)を直せば良いんです。

で、インスタンス化をし直せば一瞬で全部直ります。

——————-

頭のいい人は考えました。

プロパティとメソッドを含むクラスを定義して、それをインスタンス化できるようになれば、超楽になるじゃん生産性が向上しますな。と。

これが「オブジェクト指向」です。見慣れた説明に近づきましたね。

なんでオブジェクト指向って言うんでしょう?

「クラス」や「インスタンス」のことをまとめて「オブジェクト」って呼ぶからです。そういうことみたいです。私よくインスタンスのことをオブジェクトって言っちゃいますけど。

こういうプログラムの考え方の進化が元にあって、
その考え方の上でさらに便利なことができるようになってきました。
オブジェクト指向万歳です。

だた、拡張されすぎたために、
「オブジェクト指向」自体が何なのかどんどんわからなくなってきています。

このボールの説明もいろんなところで見るのですが、
「だから何が良いのか」がよくわかりませんでした。

動いてるところを見た方が覚えられるエピソード記憶派なアナタのために。
まずはこんな感じで、覚えてみてください。

オブジェクティブ指向食わず嫌いの改善につながれば幸いです。

関連する記事:


Advertisement