抽象データ型とオブジェクト指向

by tanabe on December 02, 2004

福井プログラマー生活向上委員会」さんをあちこち読み漁っていて、書こう書こうと思っていた話を思い出しました。きっかけとなったのは、この話。

オブジェクト指向初心者はカプセル化のことだけ考えろ

ここにある「基本はカプセル化」という話、賛成です。設計レベルではまた別のポイントもあると思いますが、実装レベルで一番重要なのはこの点だと思います。私がオブジェクト指向プログラミングのことを理解したと感じたのもこの辺りの話を自分の中で消化したときでした。

そのときに参考にさせて頂いた抽象データ型の説明が非常に自分の中でしっくりと来た覚えがあるので、紹介いたします。
S34さんという企業のサイトの中に"C++ Technical Documents"というコンテンツがあり、そこの記事になります。

抽象データ型と Java/C++ そして COM/CORBA
Cによるオブジェクト指向'風'プログラミング


抽象データ型はオブジェクト指向を理解する上で非常にキーとなる概念ですが、あまり解説されている話を見ません。Cによる抽象データ型プログラミングから、C++によるオブジェクト指向プログラミングへ理解を進めていくと、「なぜオブジェクト指向がこのような特徴を持つに至ったか」というプログラムの思想の流れを感じられます。

最後にまつもとゆきひろ氏のオブジェクト指向の捉え方がまつもと氏らしい平易な文章で書かれたものがありますので、ご紹介して終わりとします。

| 「継承がある抽象データ型」と「オブジェクト」の区別って何でしょう
| ね. C++ なんかだと, つい「オブジェクト指向プログラミング」ではなくて
| 「抽象データ型を使ったプログラミング」をしてしまうのですが.

# こーゆー話はruby本4章のネタなのですが,きっとここまではカ
# バーできないと思うのでここで意見を述べておきます.間違って
# ネタに出来たらめっけものだし.^^;;;

私の理解だと「オブジェクト指向」は「オブジェクトを中心にした
考え方」であり,「オブジェクト」の要件は「カプセル化」だと思
うので,「抽象データ型」はオブジェクト指向の範疇に含まれると
思います.

ただ,オブジェクト指向プログラミングという話をする場合には

* カプセル化
* 継承
* 動的結合(ポリモルフィズム)

がないと,オブジェクト指向プログラミングしている気にならない
と言うのは本当なのですが,分析レベルではかえって邪魔でしょう.

 


この記事へのトラックバック
 以前書いたエントリ「オブジェクト指向初心者はカプセル化のことだけ考えろ」に対してTBして頂いたのでそちらへのコメントとして書いていたのですが、ちょっと面白い内容になったのでこちらに記事として書くこと...
「抽象データ型」と「オブジェクト指向」の区別【福井プログラマー生活向上委員会】at December 02, 2004 10:47