Web教材一覧システムの調達

オブジェクト指向

キーワード

オブジェクト指向,インスタンス,カプセル化,メッセージ,ポリーアフィズム,クラス,インヘリタンス,CORBA


オブジェクト指向アプローチ(OOA:Object Oriented Approach)とは、プログラムやデータ、その組合せなどをオブジェクト(もの、部品)としてとらえ、その部品を組み合わせてシステムを構築するアプローチです。

オブジェクト指向の用語・概念

インスタンス、クラス、オブジェクト
[佐藤太郎]や[田中花子]が「学生」という視点でとらえれば、[佐藤太郎]と[田中花子]は、氏名、学籍番号、学部など同一のデータ構造をもち、入学する、単位を取得する、卒業するなど同一の手続をもっています。このような場合、[佐藤太郎]と[田中花子]をインスタンス、「学生」をクラスといいます。
 オブジェクト実体と訳されますが、その定義は場合により異なります。インスタンスを指すこともあればクラスを指すこともあり、その総称として用いることもあります。ここでも混同して用いています。
カプセル化、隠蔽
通常のデータベースでは、データだけを管理しています。外部(プログラマ)は、データをアクセスするときに、ある属性(項目、フィールド)の名称だけを知っていればよく、その位置や桁数などを知る必要がありません。このように、ある情報を内部で管理することをカプセル化、それを外部から見えなくする(知る必要をなくす)ことを隠蔽といいます。カプセル化と隠蔽を同義語として用いることもあります。
 オブジェクト指向では、データだけでなく、それを処理する手続き(メソッドという)までもカプセル化し隠蔽します。
 すなわち、カプセル化(隠蔽)は、オブジェクトの性格を決めるデータ構造や値を隠蔽し,オブジェクトの外部から直接アクセスすることを禁止することであり、それにより、オブジェクトのデータ構造やメソッドを変更した場合でも,外部への影響を避けることができ,オブジェクトの独立性を向上させることができます。また、オブジェクトの再利用が容易になります。
メッセージ
オブジェクト指向では、「単位を取得する」というメソッドがカプセル化されていれていれば、[佐藤太郎がシステム設計論の単位を取得する]処理をするとき、[佐藤太郎][システム設計論]をパラメタとして[単位取得]というメソッドを呼び出せば(その命令をメッセージといい、オブジェクトにメッセージを伝達することをメッセージパッシングといいます)、処理手順を知る必要はなく処理できるのです。
 例えば、販売システムでは、「受注」「在庫」「仕入」「会計」などのオブジェクト間をメッセージを交換する(「~情報」などの矢印)ことにより構築できます。
継承(インヘリタンス)、汎化
[佐藤太郎]や[田中花子]は「学生」ですが、さらには「人間」でもあります。「乗用車」や「トラック」の上位概念として「自動車」があります。このようにクラス間に上位のクラスと下位のクラスがあるとき、上位クラスをスーパークラス(基底クラス)、下位クラスをサブクラス(派生クラス)といいます。
 スーパークラスで定義されたデータ構造と手続をサブクラスで引き継いで使うことができます。それをインヘリタンス(inheritance;継承)といいます。例えば、自動車で定義したハンドルやタイヤなどの部品構成や、生産する、販売するなどの手続きについては、乗用車やトラックで再定義する必要はなく、乗車人数や積載重量などサブクラス特有のものだけを定義すればよいのです。新たにバスを追加するときは、バス特有の事項だけを検討すればよいのです。すなわち、継承という概念によって,モデルの拡張や変更の際に変更部分を局所化できます。
 ここでは1つのスーパークラスからの継承でしたが、複数のスーパークラスから継承することを多重継承といいます。C++は多重継承をサポートしていますが、Javaはサポートしていません。
 なお、サブクラスの共通部分を抽出して、スーパークラスとして定義することを汎化(generalization)といいます。乗用車やトラックのクラスに共通部分が多いことから、自動車というスーパークラスを設定するようなことです。スーパークラスからみれば継承、サブクラスからみれば汎化だといえます。
is-a、part-of
「is-a」とは、「一種 is-a 全体」の関係です。「インスタンス is-a クラス」であり、「サブクラス is-a スーパークラス」です。
「part-of」とは「部分 part-of 全体」の関係です。例えばタイヤと自動車の関係は「タイヤ part-of 自動車」であり、「タイヤ is-a 自動車」ではありません。
ポリモーフィズム
同一名称のメソッドをもつオブジェクトを抽象化してクラスを再定義するポリモーフィズム(多相性)といいます。
 単純にいえば「同じメッセージで、受取側オブジェクトごとに異なる動作にできる」ことです。例えばメソッド名printOut(devise)の引数を出力機器とし、それをプリンタとすれば印刷、ディスプレイとすれば画面表示になります。
 スーパークラスで定義されたメソッドや関数を、サブクラスで独自に定義しなおして上書きすることをオーバーライド(Override)といいます。ポリモーフィズムはオーバーライドにより実現できます。

オブジェクト指向関連事項

オブジェクト指向プログラミング言語
代表的なオブジェクト指向プログラミング言語を掲げます。
 ・C++:C言語をオブジェクト指向に発展させたもの
 ・Java:Web環境でよく用いられるオブジェクト指向言語
 ・Java Script:HTMLに内蔵されるオブジェクト指向のスクリプト言語
UML
オブジェクト指向でシステムを設計・開発するときの多様な標準的な図法。ISOやJISにもなっている。(→参照:「UML」
オブジェクト指向データベース
オブジェクト指向をデータベースの視点から理解することも必要です。(→参照:「オブジェクト指向データベース(OODB)」
CORBA
CORBA(Common Object Request Broker Architecture)は、オブジェクト指向技術の標準化団体OMGが制定した,オブジェクト指向による分散処理環境を実現するためのオブジェクト管理プラットフォームの参照モデルで、分散システム環境で,オブジェクト同士がメッセージを交換するための共通仕様である。オブジェクト間通信の基本インタフェース,相互運用規定などから成っています。

理解度チェック: 正誤問題
過去問題