第3章 Objective-C | ||
ホーム | メール | |
目次 | < 前ページ 次ページ > |
Objective-Cが、オブジェクト指向プログラミング言語であることはすでに述べました。現在ではほとんどのプログラミング言語やスクリプティング言語がオブジェクト指向言語になっています。この章ではObjective-Cの説明をはじめるにあたってまずこのオブジェクト指向プログラミングの説明からはじめたいと思います。そして第2節からObjective-C固有の言語仕様について説明をしていきます。
オブジェクト指向プログラミングは“オブジェクト”単位でコーディングをする手法です。C言語では関数という単位でコーディングをしていましたが、簡単に言えば、この関数を一挙に3桁ぐらいパワーアップしたものがオブジェクトです。そしてこのオブジェクトを使ってプログラミングをしていくわけですが、いわばオブジェクト指向プログラミングというよりも、オブジェクト使用プログラミングと考えると理解しやすいでしょう。
オブジェクト指向プログラミング言語(1章でも説明しましたがObject-Oriented Programmingの略称であるOOPと呼ぶ場合もあります)には、関数型プログラミング(手続き型プログラミング)とOOPの両方が使えるハイブリッド型とオブジェクト指向プログラミングしか使えないものがあります。Objective-CやC++は前者にあたり、Javaは後者にあたります。
最初に関数が登場した時には戸惑いもあったでしょうが、その関数を使ってのコーディングに慣れてくると、それまでの関数型でないプログラミング言語に戻る気になれなかったことだろうと思います。このことと同じようにオブジェクト指向プログラミングも慣れてしまえば関数型(手続き型)言語でのコーディングに戻る気がなくなるほど楽です。
また、オブジェクト指向プログラミングの説明ではオブジェクトは「物」と訳されることが多いみたいですが“object”には「目的」という大事な意味もあります。たしかにオブジェクトの中にはウィンドウやボタンなどの目に見える「物」もあります。しかし目には見えない役目を果たすオブジェクトも多数存在しています。このことも含めて考えるとオブジェクト指向プログラミングとは「目的ごとに用意されたオブジェクトを使用して、コーディング(プログラミング)する言語」と説明するのが一番実体に近いように思います。
またおそらく、Objectというのは単なるネーミングで付けた名前だと思います。「object」という単語の持つ「物」や「目的」という意味に固執したのではなく「この新しい型を何と呼ぼう。そうだオブジェクトと呼ぶことにしよう」という感じだったのでしょう。
少し前まではオブジェクト指向プログラミングは大変難しいものだと考えられていました。しかし今ではオブジェクト指向でないプログラミング言語を見つける(ことの)ほうが難しいくらいです。このようにオブジェクト指向プログラミングが当たり前になってくるとOOPを難しくとらえる風潮もなくなってきました(きたように思います)。
オブジェクト指向を理解できるかどうかという問題は“tea”という英語(英単語)を「ティー」と発音できるか、あるいは「テー」としか発音ができないのかという問題とたぶん同じレベルの問題です。口や文章で説明するよりも実際にその環境に身を投じたほうが早く覚えられるでしょう。ある意味、感覚に頼るべき部分が多いということは事実で、机上の理論で学ぶには向いていないかもしれません。
しかし、このように言ってしまっては身もふたもありません。「使っているうちに慣れてきます」というような説明はできるだけしないようにしなければいけません。しかしOOPについては理解するというよりも慣れるというのに近いのは事実だと思います。慣れれば「なんで難しく思っていたのだろう」と思うようになると思います。
またOOPについて意外なところで慣れている人たちもいます。それは旧マクロメディア製品だったFlashを使っていた人たちです。Flashはオブジェクト指向に沿って設計されています。名称は違っていたかもしれませんがFlash には、これから説明するクラスもインスタンスも存在します。もしFlashをご存知であれば、本書を読んでいて「あ。この機能はFlashのあの機能のことだな」と思われることも多いと思います。
現在、オブジェクト指向プログラミング言語と呼ばれるものは多数存在しています。しかしオブジェクトという仕組みはそれぞれのオブジェクト指向プログラミング言語によって微妙に違います。本章では当然のことながら Objective-Cにおけるオブジェクトの説明をいたします。したがって他のオブジェクト指向プログラミング言語にはあてはまらない部分もあるでしょう。しかしその前にすべてのオブジェクト指向プログラミング言語にあてはまる3つの特徴をあげておきます。
「コード」という言葉は「ソースコード」という意味で使われる場合と上記のように「何かを実行する部分」という意味で使われる場合があります。
なお、モジュール (module)という言葉をMac OS X 10.6 Snow Leopard に付属している「辞書」アプリケーションで調べると次のようになります。
「国語辞典」では
・電気機器やコンピューター装置などの、構成要素の単位。独立の完成した機能をもち、交換や着脱が可能で、より大きなシステムに構成される。「英和辞典」では
<▽コメント>上記の赤字で書かれたコンピューターという字句は引用文なので最後の長音を摂る事は不可<△コメント>
・① プログラムやハードウェア機能の単位.
・② 交換可能な構成部分.
オブジェクトはほかのオブジェクトを親として、そのデータ構造とコードのすべてを継承することができます。そして親から譲り受けたコードの一部を変更することや、あるいは新しいデータ構造やコードを追加することができます。この親となるクラスのことをスーパークラスもしくは親クラスと呼びます。そして子となるクラスのことをサブクラスもしくは子クラスと呼びます。
以上が、すべてのオブジェクト指向プログラミング言語に共通してあてはまる3つの特徴です。しかし今の段階でこの3つの特徴を無理に理解しようと努めたり、呪文のように唱えたりして暗記する必要はありません。できるだけ自然と理解できるまで手をかえ品をかえ説明を繰り返していきたいと思います。というよりもさきほどの“tea”の発音の例のように使っていくうちに自然と身につくようにしたほうが学習方法としては良いように思います。
プグラムコード(ソースード)の意味の読み取りやすさのことを「可読性」と言います。
プログラムのコードはコメントをしっかりと書いていたとしても、3ヶ月もすれば自分で書いたコードの意味も分からなくなってしまいます。そのようなコードを他人が見るともっと意味がわかりません。そこでプログラミング言語の発展には「パフォーマンスの向上」と同じぐらいに「可読性の向上」が大事に考えられてきました。関数の登場やオブジェクトの登場というのは「パフォーマンスの向上(プログラムの実行速度の向上)」というよりは、この可読性という点で有利だと判断されて多くの人たちに受け入れられました。
目次 | < 前ページ 次ページ > |