オブジェクト指向による分析とは

オブジェクト指向分析による分析は,概念的な塊から「もの」を仮想世界に創出し,そこに実世界の「もの」の名前を借用して名付けることで,仮想世界にしか存在し得ない「もの」を,複数人で認知(分かる)するといった認知技術的側面を持っている.オブジェクト指向による分析とは「物事を分けることで解を出す」方法である.何らかの単位に分けて人が理解できるレベルまで分けぬくことがオブジェクト指向分析の基本である.

では,ここで「会社には技術員と営業員がいる」ということを分析してみよう.まず,この文章から「もの」を分類してみよう.分類された「もの」は以下のとおりである.

次にその関係を関連によって表す.

図: 関連を使ったモデリング
\begin{figure}\begin{center}
\includegraphics[width=8.2cm]{UMLFIG/oo-1.eps}
\end{center}\vspace{-1cm}
\end{figure}

[*]は図[*]で取り上げた会社と社員のモデルに似てきたが,もう少し情報の整理をする.会社は技術員と営業員を社員として雇用しているので,できれば社員と会社の関係を含めてモデリングできないものだろうか.そこで,汎化-特化を使うと以下のようにモデリングすることができる.

図: 汎化を使ったモデリング
\begin{figure}\begin{center}
\includegraphics[width=15.2cm]{UMLFIG/oo-2.eps}
\end{center}\vspace{-1cm}
\end{figure}

汎化-特化は,白抜きの矢印で表す.矢印の指している方を「基本クラス(スーパークラス)」,その逆を「サブクラス」と呼ぶ.図の上下左右の位置関係は関連と同様に関係ない.

[*]では,次のことをモデルにて表現している.

つまり,このモデリングでは,営業員と技術員をまとめた抽象的なクラスである社員を導入し,会社と社員という関係をシンプルに示すことが可能になる.このように抽象的なクラス(社員)をモデルに入れることで「営業員と技術員は社員という特性を共有する」という概念の整理がスムーズに行えていることに注目.

このようにして作成された抽象的なクラスは,抽象クラスと呼ばれ,クラス名をイタリック体で書く.抽象クラスは,概念を理解するうえで抽象的なクラスとして導入されるものである.つまり抽象クラスは実体を持つことはできない.抽象クラスからはインスタンスを生成できないという特性があり,実際にインスタンスが作成できるのはあくまでサブクラスである.このことを図[*]で説明すると,技術員の鈴木は技術員クラスから生成されるが社員クラスから生成されるものではないということである.

インスタンスで考察する

さて,ここで汎化-特化のモデルの性質を理解してもらうために,図[*]のモデルから技術員2名と営業員2名を作ってみよう.

図: オブジェクト図を用いた考察
\begin{figure}\begin{center}
\includegraphics[width=9.8cm]{UMLFIG/oo-3.eps}
\end{center}\vspace{-1cm}
\end{figure}

どうだろう,抽象クラスの「社員」はインスタンスとして存在せず,見事に消えている.  社員は,技術者クラスと営業員クラスの構造に内包されている.そして会社「MIB」は,それぞれのインスタンスを社員として扱っていることを示している.つまり,会社は,技術員も営業員も社員として操作しているわけである.そして操作される対象が,それぞれの操作に対する実現手段を知っている.

このような抽象化メカニズムのことをオブジェクト指向では,ポリモーフィズム(多態性または多様性)という.