オブジェクト指向分析設計

オブジェクト指向分析設計 (オブジェクトしこうぶんせきせっけい、OOAD、英: object-oriented analysis and design ) は、ソフトウェア工学において、ソフトウェア (システム) を相互作用するオブジェクトの集まりとしてモデル化 (オブジェクト指向モデリング) する、オブジェクト指向に基づくソフトウェア開発の方法である。オブジェクト指向の理論的枠組みに基づくソフトウェア開発、すなわちオブジェクト指向開発を行う際の、ソフトウェア開発工程において、分析工程であるオブジェクト指向分析 (OOA; object-oriented analysis) と、設計工程であるオブジェクト指向設計 (OOD; object-oriented design) の、総称である。なおプログラミング工程は、オブジェクト指向プログラミング (OOP; object-oriented programming) という。オブジェクト指向プログラミングの詳細については同項目を参照のこと。オブジェクト指向開発の具体的な方法論を、オブジェクト指向開発方法論 (object-oriented methodology) という。この項目では、オブジェクト指向開発におけるオブジェクト指向分析とオブジェクト指向設計、およびオブジェクト指向開発方法論を、主に説明する。

オブジェクト指向システム

オブジェクト指向システムは、オブジェクトの集まりから構成される。オブジェクト指向システムの振る舞いは、こうしたオブジェクト群が協調して動作することによって遂行される。オブジェクト群の協調動作は、互いにメッセージを送信しあうことによって行われてゆく。メッセージを送信するということは、メソッド( クラスやオブジェクトに属す関数 )を呼ぶ事である。オブジェクトが別のオブジェクトからメッセージを受信すると、メッセージを受信したオブジェクト自身が、そのメッセージ受信によって実行するべきことを決める。同一のメッセージが、複数の異なるメソッドによって実装されていることがある。その場合、どのメソッドが実行の主体になるかについては、そのオブジェクトの状態に依存する。「メッセージ送信」の実装は、モデル化の対象となるシステムのアーキテクチャによりさまざまである。また「メッセージ送信」の実装は、協調動作するオブジェクト群が同一コンピュータ内に配置されているかそれとも複数のコンピュータに分散して配置されているかによっても、異なる。

オブジェクト指向分析

オブジェクト指向分析 (OOA; object-oriented analysis) は、システム化の対象となる領域 (問題領域; problem domain) を対象とし、分析の対象となる問題領域に存在するさまざまな情報の概念モデル (conceptual model) を作ることを目標とする工程である。オブジェクト指向分析で作る分析モデルでは、実装の水準において生じる可能性があるさまざまな種類の制約 (constraint) は、まったく考慮しない。ここで述べた実装の水準における制約には、並行性、分散化、永続化などが、含まれる。すなわち分析モデルでは、システムがどのように構築されるかということは、まったく考慮しない。実装の水準における制約は、オブジェクト指向分析の次の工程であるオブジェクト指向設計 (OOD) で、とり扱う。
オブジェクト指向分析の作業のもととなるのは、記述された形式の要求仕様、将来に向けての企業戦略を記した書類、利害関係者 (ステイクホルダー) やその他の関係者へのインタビューなどである。システムは複数の領域に分割されることがある。システムが分割される際に、分割の基準となるのは、システムが複数のビジネスに関係する場合、その他複数の関心の領域がある場合などである。分割されたシステムは、それぞれ個別に分析される。
オブジェクト指向分析の成果物は、開発するシステムが機能的に「何を」することが必要であるかということを、概念モデルの形で記述したモデル図や文書である。オブジェクト指向分析の成果物は、ユースケース、および統一モデリング言語 (UML) の複数のクラス図や多数の相互作用図のセットであることが多い。ユースケースは、ユースケース図を使って描くことができる。成果物は、システムのユーザインタフェースを模擬して記述した資料を含むことがある。なお、アジャイルソフトウェア開発の開発方法論を採用する場合は、オブジェクト指向分析の成果物は、必要十分な最小限の成果物を作成するのみであることが多い。

オブジェクト指向設計

オブジェクト指向設計 (OOD; object-oriented design) は、オブジェクト指向分析で得られた分析モデルを、さまざまな種類の制約 (constraint) を考慮したモデルに変換する工程である。ここで述べたさまざまな種類の制約には、選択したアーキテクチャに因る制約、非機能的制約 (技術的制約と環境面の制約を含む) を含む。具体的には、トランザクションスループット、レスポンスタイム、実行時のプラットフォーム、開発環境、プログラミング言語などが含まれる。
オブジェクト指向設計では、分析モデルで明確化された多くの概念を、クラスとインタフェースに対応づける。オブジェクト指向設計の成果物は、問題領域についてシステムが「どのように」構築されるかを詳細に記したモデル図と文書である。ただしアジャイルソフトウェア開発の開発方法論を採用する場合は、オブジェクト指向設計の成果物は、必要十分な最小限の成果物を必要十分な最小限の詳細さの水準で作成するのみであることが多い。

オブジェクト指向プログラミング

オブジェクト指向プログラミング (OOP; object-oriented programming) は、オブジェクト指向開発におけるオブジェクト指向設計 (OOD) の次の工程であり（この「次の工程」という概念自体はウォーターフォール開発に固有の概念であり、それ自体はOOADともオブジェクト指向（及びオブジェクト指向プログラミング）とも独立・無関係である）、この工程でソフトウェアのプログラミングを行う。
オブジェクト指向プログラミングでは、ほとんどの場合、プログラミング言語としてオブジェクト指向プログラミング言語 (OOPL; object-oriented programming language) を採用する。オブジェクト指向プログラミング言語では、オブジェクト、クラス、情報隠蔽、継承、多態性 (ポリモフィズム) などの概念を、プログラミング言語に組み込んでいる。そのため、オブジェクト指向プログラミング言語を有効に活用することで、オブジェクト指向プログラミングを効率的に行うことができる。
一方で、オブジェクト指向プログラミングにオブジェクト指向分析設計が有効か否かは、さだかではない。オブジェクト指向分析設計ではしばしば前述のようにプログラミングが分析設計の「次の工程」であるとウォーターフォール開発的に信じられていることもあるようだが、そのような考え方はオブジェクト指向プログラミングの流行によって生まれてきた、オブジェクト指向分析設計以外の多くの手法、特にアジャイルソフトウェア開発では完全に否定されている。また本来は、オブジェクト指向分析設計はクラスベースオブジェクト指向への拘泥は無いはずであるが、現実には多くのオブジェクト指向分析設計の解説においてクラスベースオブジェクト指向が大前提となっており、JavaScriptなどプロトタイプベースの観点は見られない。