オブジェクト指向プログラミング

 

Advertisement

オブジェクト指向プログラミング

 プログラミング言語は、その設計思想によって大きく2種類のタイプに分けられます。1つは関数型言語とよばれるものであり、Haskell や Scala などがその代表例です。もう1つは Java や Ruby, PHP などに代表されるオブジェクト指向言語です。

 Python はオブジェクト指向言語に分類されます。実際には関数型も巧みに組合わせて処理するので「関数型 + オブジェクト指向言語」と呼んだほうが正確かもしれませんが、極めてオブジェクト指向の強い言語であることは確かです。

 object は英語で「物、物品、物体」という抽象的な意味をもつ単語です。テーブル、机、書棚、パソコン、ボール、シャープペン ...... これらはすべて「モノ」の範疇に含まれますが、その機能や用途はそれぞれ異なっています。たとえばテレビには「電波を受信して画面に表示する」、「チャンネルを変える」、「見たい番組を検索する」といった機能があり、エアコンには「室温を設定する」、「除湿する」、「風向を変える」という機能が備わっています。テレビとエアコンでは、当然見た目や寸法も違います。
 このように「モノ」の種類によって形態や機能が異なっていることは日常生活の中でもごく自然な感覚であり、オブジェクト指向とは、そうした「モノ」の概念をプログラミングの世界に持ち込んで設計されたシステムなのです。

 プログラミング言語で「モノ」に相当するのは、「データとデータのもつ性質」です。Python ではデータとクラス変数、インスタンス変数、メソッドが「モノ」、すなわちオブジェクトであると定義されています。クラス変数やインスタンス変数はオブジェクトの見た目や形態を決定します。メソッドはオブジェクトのもつ固有の機能です。たとえば "apple" という文字列は「自身と他の文字列を連結させた別の文字列を生成する」という join()メソッドを備えています。

 "apple" と "orange" は異なるオブジェクトですが、どちらも strクラス(文字列型)に属します。同様に数値の 1 と 2 は intクラス(整数型)に、1.0 と 2.0 は floatクラス(浮動小数点数型)に属しています(あるオブジェクトがどのクラスに分類されるのかは、type関数を用いて簡単に調べることができるので色々と試してみてください)。同じクラスのオブジェクトは見た目(インスタンス変数やクラス変数)は個々で微妙に異なっていても同じ機能を備えています。
 strクラスのオブジェクトであれば連結機能を備えているし、intクラスや floatクラスのオブジェクトは互いに加えたり引いたりする演算機能を備えています。
 詳細については個々の記事で解説しますが、クラスとはオブジェクトの設計図です。この設計図に書かれた仕様にしたがって個々のオブジェクトが生み出されています。int や float, str などは組み込みのクラスですが、モジュールをインポートすることで、組み込み以外のクラスのオブジェクトを作り出すことができるようになります。また、ユーザー自身が新しいクラスを定義することも可能です。最初のうちはクラスとオブジェクトの概念を把握することは難しいかもしれません。しかし実際にコードの中でクラスを定義する経験を繰り返すことによって、その構造を自然と理解できるようになります。このページにはオブジェクト指向プログラミングに絞った内容の記事のメニューを並べていきますので、中級者以上を目指すPythonプログラマーはぜひ参考にしてください。

 ≫ オブジェクト指向プログラミング② クラスとオブジェクト