Entry

OOP の発想を理解するために手続型言語でもできること

2009年05月06日

OOP が理解できなくて,「私の考え方は手続志向だから,まず main 関数を探してしまう」という人がいたんだけれども,それは OOP 云々とは別の話で躓いているんじゃないだろうか,とちと思った。

そういう方は,C言語でも Pascal でも何でもいいから,ライブラリを作ってみたらどうだろう。C で言うなら,DLL とか shared object を作るわけです。

言うまでもなく,ライブラリには普通 main 関数はありません。ライブラリは,機能を提供するプログラムの部品ですから,当たり前ですよね。一方,OOP の基本的な発想は,プログラムを部品化して再利用するところにあるわけで,ライブラリ作りにおける考え方と共通しています。というか,ライブラリを作りやすくする仕組みが,OOP だとすら思うんですけど,そこら辺はどなんでしょ。

ともかく,ライブラリを作るときに考えなくちゃいけない視点は,次のようなもんのはず。これは,非 OOP 言語と言われているプログラミング言語でも,共通している視点です。

  • プログラムモジュールとして独立している(依存性が低い)。
  • 利用しやすいインターフェイスが用意されている。
  • ライブラリ内部で利用する関数,プロパティを外部から勝手に触らせないようにする。

まず,モジュールが独立しているというのは,関数の呼び方とかリンクするプログラムモジュールによってライブラリの挙動が変更されることがない,ということです。「このライブラリを利用する前には,別のライブラリのこの関数を呼んでおいてください」,みたいなのは,依存性が高くて使いづらい。

また,利用しやすいインターフェイスというのは,ライブラリを利用する側にとって呼び出しやすい手続きが用意されている,ということ。OOP なんかでは,多態性として実現されていたりしますよね。

最後に,ライブラリの関数,プロパティを勝手に触らせないようにする,というのは,言うまでもなくカプセル化の話です。ライブラリは,ひとかたまりの機能を提供するプログラムモジュールですから,そのかたまり(統一性)がばらされてしまうような使い方をされると困ったちゃんです。触っちゃいけないところは触れないように作るのが,安全なライブラリと言えます。カプセル化は C 言語でも翻訳単位で実現できて,static な関数,変数を使えばよかったりします。

かなり極論してしまうと,OOP つのはつまるところ,ライブラリの集まりと言えるんだと思います。機能単位の組み合わせで,ソフトウェアを構成していく手法です。んなもんで,main 関数がどうとか,とかいった話は出てこない。

あたしが知るところ,OOP の理解に困っている方は,手続型言語でもライブラリを作った経験がない方が多い気がしています。作ってみると,「こゆ機能(例えば多態性)がなくて不便」ということがあるはずで,それが OOP な言語では解消されていたりします。

そんなに難しい話でもないし,簡単なのをひとつ作ってみたらどうでしょう。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN