オブジェクト指向プログラミングで悩むのは、システムの実装として、クラス/オブジェクトをどのように分けて実装するかと言うことです。
現在ではオブジェクト指向開発のプロセスは沢山の方法論が提唱されており、一般化された手法です。その射程はソフトウェアのライフサイクル全体にまで及んでいます。最初のシステム化要件を、オブジェクト指向分析 (OOA: Obejct Oriented Analysis) で分析し、これを基に設計段階でオブジェクト指向設計 (OOD: Object Oriented Design) し、開発実施段階でオブジェクト指向プログラミング (OOP: Object Oriented Programming) するわけです。こうすることで、大勢が関わる大規模システム開発において、開発効率の向上、漏れのない要件の実装が実現されると云われています。
ソフトウェアの危機が叫ばれた1960年ごろに、ソフトウェア開発手法が活発に研究され、それまでのプリミティブな開発から、構造化開発、データ中心開発 (DOA: Data Oriented Aproach) が提唱され、オブジェクト指向開発に至りました。これは、バッチ処理から、リアルタイムトランザクション処理への移行と、開発規模の急激な増大、取り扱いデータの複雑化などによって、開発効率を高めることが要求された結果です。
オブジェクト開発プロセスとしては、 OOSE, BOOCH, OMT, Coad & Yordon などのプロセスが有名で、現在では表記法は UML: Unified Modeling Language、プロセスでは RUP: Rational Unified Process に統一されています。
UML: Unified Modeling Language と呼ばれる分析/設計のためのダイアグラム記述は、クラス図、ユースケース図、コラボレーション図、シークエンス図などのダイアグラムを記述する決まりであり、直感的に把握しやすいことが設計思想になった規格です。開発部門と利用部門のコミュニケーション、分析/設計局面と開発実施局面のギャップを少なくするように工夫されています。
RUP: Rational Unified Process の特徴は、 "UseCase Driven", "Architecture Centric", "Iterative & Incremental" であると言われています。要求/分析と設計/実装/テストの各成果物は、ユーズケース図に基づいて作成されます。システムは論理的/物理的な構造、管理の構造をアーキテクチャを基盤として、効果的かつ統一的に把握されます。そして、実際の作業としては、フェーズごとにワークフローを繰り返すことで、漏れの無い要件の実装が期待できます。
要件定義では、最初に漠然としたビジネス要件が存在し、これを UML のユースケース図を用いて明確な輪郭を持ったモデルにします。この要件モデルを基にして、分析局面では物理的/非機能的な要件を無視して理想的なモデルを作成します。この分析モデルは、 UML のクラス図やコラボレーション図で記述します。更に、設計局面で現実に実現できるシステムを設計します。この設計モデルでは、直ぐにコーディングできるような形に分析クラスを詳細化し、アプリケーションの動作を明確にする為にシーケンス図やコラボレーション図を作成します。また、配置図やコンポーネント図で物理的/非機能的な要件も実装できるように明確に設計しておきます。開発実施局面では、この設計モデルに基づいて実際にコーディングし、インフラを整えます。
DOA までは、局面をまたいだ手戻りによって Delivery-Cost-Quality が悪化することを避けるのが最大の課題であり、そのためにマイル・ストーンを定義し、局面間の切断は明らかでした。
一方、オブジェクト指向開発では分析と設計の区別は曖昧であり、設計と開発実施の局面は更に接近しています。システム化要件を確実に実装する為に手戻りを推奨します。各々のフェーズでワークフローを繰り返すことで、徐々にシステム規模や実装要件を拡大していきます。これはソフトウェアのコンポーネント化が進んだ結果、ソフトウェアの再利用化が容易になった成果と言えます。この再利用化を設計段階で更に効率的にするために、デザインパターンと言う概念が提唱されました。
デザインパターン(設計パターン)は、1987年の論文が最初だと言われています。これは Model-View-Controle (MVC) のフレームワークから、実践的に抽出されたパターンのことです。これをカタログ化することで、典型的な問題に対して、典型的な解決策を示します。証明/実証済みの成果物が再利用できるわけです。このような部分は、今まで職人的な、個人の天才/経験に負っていたので、開発効率/生産性向上という観点では画期的なことでした。
その後、分析、実装のモデル化でもパターンを利用しようと考えられ、現在では Anarysys Pattern, Design Pattern, Programming Pattern のパターンカタログが用意されています。 OOA では Anarysys Pattern のカタログから再利用できるパターンを利用し、 OOD では Design Pattern、 OOP では Programming Pattern が利用されます。
デザインパターン、 UML、オブジェクト指向開発に関する書籍が多く出版されているので参照されると良いでしょう。古い本では UML が利用されていなかったり、想定された言語が Java では無かったりするので、確認してから購入しましょう。