クラス指向
ビャーネ・ストラウストラップのオブジェクト指向。「ユーザー定義型の」オブジェクト指向。
データ型を定義するのに、「クラス」(もともとはオブジェクト指向とは関係のない SIMULA の言語機能)とその特徴である「継承」を活用するプログラミング手法。ストラウストラップが '80 年代半ばごろまでに C++ の設計を通じて整理したもので、現在主流のオブジェクト指向の考え方。ただし、'90 年代に入ってからは、型の定義にクラスを用いるに際し、クックらにより指摘された欠点を「インターフェイス」を用いることで補い、継承よりは「委譲」を是とする考え方に移り変わってきている。
抽象データ型、派生、仮想関数(今風に言い換えると、カプセル化、継承、多態性)の三要素が必須とされるが、ストラウストラップのオリジナルの定義では、これにコンパイル時型チェック機構、多重継承機構、アクセス制限(情報隠蔽)機構などが続く。また、メイヤー(Eiffel の設計者)はこの考え方をさらに整理し、「契約によるプログラミング」という独自の手法を筆頭に、ストラウストラップの定義に足りないもの、欠けていると思われるものを補い、これを書籍「オブジェクト指向入門」として発表している。
参考:
- [はてな]「オブジェクト指向の概念の発明者は誰ですか?」
- [はてな]「“オブジェクト指向プログラミングとは何か?”」
言うまでもなく、この“オブジェクト指向”は、はじめに「データ型」とそれによる抽象化、そしてそのデータ型をユーザーの手により定義せしむるための「クラス」ありきの考え方なので、クラスがないとこの考え方は成り立たない。静的型システム(コンパイル時型チェック)が前提となるが、その支援のない動的型システム(実行時型チェックのみ)でもある程度の応用は利く。実際、メッセージ指向と呼ぶべきケイのオブジェクト指向という、まったく別のパラダイムに立脚して作られた Smalltalk であっても、そのプログラミングにおいてこの考え方は今や支配的である。クラスを必要としないインスタンスベース・オブジェクト指向の言語(SELF、NewtonScript、JavaScriptなど)の場合は、クラスかクラスに準ずる機構(トレイト)をあえて積極的に用いることでこの考え方の恩恵にあずかれる。
クラス指向のオブジェクト指向において、すべてがオブジェクトである必要はない(そうであっても構わないが、必須ではない。むしろ、クラスを使って定義されたデータ型のインスタンスが、従来の基本型のデータと区別なく扱えることのほうがずっと重要)。この点は、Smalltalk がかつて重きを置いたケイのオブジェクト指向(メッセージ指向)とは大きく異なる。したがって、クラス指向においては、Java も(Eiffel がそうであるように)“純粋”なオブジェクト指向言語であると言って構わない(クロージャの導入を頑なに拒むあたりは、この点で日依ってしまった Eiffel よりも“純粋”にクラス指向を貫いている!)。他方で、“純粋”なオブジェクト指向言語の代名詞的扱いをされることの多い Smalltalk について言えば、この場合、あくまでメッセージ指向や「すべてがオブジェクトである(そうでなければならない)」考え方での“純粋”なのであって、クラス指向(つまり現在主流のオブジェクト指向)においてもなお“純粋”と呼んでよいかどうかは、また別の問題と言える。
--sumim
関連:
参考:
「オブジェクト指向」という言葉を意識した際に、主にケイのオブジェクト指向(メッセージ指向)に傾倒しているユーザー(それを意識しているかいないか、きちんと理解できているかいないかは問わない…)が、インスタンス(=オブジェクト)をどう扱うかという点で、よりオブジェクトを“指向”しているという自負を持つとき、それと比較して、クラス設計や構築、実装など“オブジェクト”ではないものに重きを置いているストラウストラップのオブジェクト指向を揶揄するときに、しばしば用いられる言い回し。--sumim
オブジェクトのもつ情報(責務とかも含め)が、オブジェクトの持ち物である、ということを忘れて(藁)、クラスの持ち物だと思ってしまってる指向形態。 --戯
<オブジェクトがそれをまず持ち、それを最適化した結果としてクラスに情報が集約される(ことがある)>と考えるんじゃなく、まずクラスがそれを持っている、とまず考えてしまう指向形態。 --戯が思うに
別案。オブジェクトの性質はクラス様(藁)によって比較的<静的に>決まってしまうモノダ、と見なしている指向形態。 --戯
余談。クラス図はサポートしてるのにオブジェクト図をサポートしてないUMLツールは、ちょっと勘弁して欲しい>幾つかのブランド --戯
このページを編集 (4214 bytes)
|
以下の 15 ページから参照されています。 |
- SIMULA 67 最終更新: 2005-08-18, 14:26:11 <phara>
- オブジェクト指向 最終更新: 2006-03-17, 19:14:19 <phara>
- オブジェクト指向の表現流儀 最終更新: 2003-04-08, 12:54:06 <tibook>
- オブジェクト指向プログラミング 最終更新: 2007-03-16, 15:37:50 <pharm88>
- カプセル化 最終更新: 2006-04-03, 22:43:44 <192>
- 多態性 最終更新: 2006-04-03, 22:44:14 <192>
- 継承 最終更新: 2006-04-03, 22:44:30 <192>
- 派生 最終更新: 2003-03-28, 14:08:58 <tibook>
- メッセージ指向 最終更新: 2007-03-28, 17:32:29 <pharm88>
- CRCカード 最終更新: 2004-07-22, 23:40:21 <192>
- オブジェクト指向再入門 最終更新: 2006-04-18, 14:20:32 <pharm88>
- オブジェクト指向言語の「純粋性」 最終更新: 2007-04-30, 12:34:17 <p5153-i>
- すべてがオブジェクト 最終更新: 2007-05-01, 06:40:14 <p5153-i>
- オブジェクト指向は本当に「オブジェクト」指向か? 最終更新: 2005-08-09, 21:52:19 <192>
- あなたが Sqeuak、Smalltalk を使うべきでない 10 の理由(募集中) 最終更新: 2006-06-08, 11:48:25 <pharm88>
This page has been visited 11716 times.