基本情報技術者試験のソフトウェア設計技法を初心者向けに解説します。
プロセス中心設計、データ中心設計、構造化設計、オブジェクト指向設計、ドメイン駆動設計(DDD)の特徴や違いを図解付きで分かりやすく説明します。
ソフトウェア設計技法とは
ソフトウェアを分かりやすく整理し、保守しやすい構造にするために、さまざまな設計技法があります。
- プロセス中心設計
- データ中心設計
- 構造化設計
- オブジェクト指向設計
- ドメイン駆動設計(DDD)
プロセス中心設計
プロセス中心設計とは、データよりも処理の流れ(プロセス)を中心にシステムを設計する手法です。
プロセス中心設計の特徴
- 業務の手順を DFD などの図を用いて定義し、 それに合わせて システムの挙動を決定する
- データ構造は業務プロセスに合わせて作成ができる。
- 手続き型プログラミングとの相性が良い
処理の流れは基本的に「入力 → 処理 → 出力」 となるので、これをベースに流れを分解するのが一般的です。
プロセス中心設計のサンプル
ネットショッピングサイトの商品購入を例に、プロセスを分解します。
この設計例では「商品選択 → カート管理 → 注文確定 → 決済処理」に分解し、入力データ、処理内容、出力データを整理しています。

プロセス中心設計のメリットとデメリット
プロセス中心設計のメリットとデメリットは下表のとおりです。
| メリット | デメリット |
|---|---|
| ・処理の流れが理解しやすい ・業務手順をそのままシステム化しやすい | ・データ構造の変更に弱い ・システムが大規模になると管理が難しくなる |
データ中心設計
データ中心設計とは、処理の流れではなく、データの構造や関係を中心にシステムを設計する手法です。
データ中心設計の特徴
- 一般的にER図(エンティティ関連図)を中心に設計
- データを共有資源と見なし、一元管理できる
データ中心設計のサンプル
ショッピングサイトを例に説明します。
前工程で作成したE-R図をもとに設計をします。
この例では下図のE-R図を使用します。

次のようにエンティティに対するデータ項目を決めます。
下図はシンプルにデータ項目だけですが、データ型や桁数なども定義し、テーブル設計をするのが理想です。

どんなデータがあるのかが見えるようになったので、次のそのデータがどう変わるかを考えます。

構造化設計
構造化設計とは
構造化設計とは、システムの機能を小さな単位に分割し、階層的に整理しながら設計する手法です。
システムが大規模になると、一度に全体を設計することは難しくなるので、システム全体を複数の機能に分割し、それぞれの役割を明確にしながら設計します。
構造化設計では、次のやり方でシステムを整理します。
- 機能分割
- 階層化設計
- 構造化チャート
機能分割とは
機能分割とは、システム全体の機能をより小さな機能に分解することです。
例えばネットショップの場合は、次のように機能を分割します。
注文管理機能
├ 商品検索
├ カート管理
├ 注文登録
└ 決済処理
階層化設計とは
階層化設計とは、機能分割した機能を親子関係で整理する設計方法です。
例えばネットショップの場合は、次のように分割した機能を階層化します。
ネットショップ
├ 会員管理
│ ├ 会員登録
│ └ 会員情報変更
├ 商品管理
│ ├ 商品登録
│ └ 商品検索
└ 注文管理
├ 注文登録
└ 注文取消
構造化チャートとは
構造化チャートは、システムを構成する機能や、プログラムレベルのモジュールを階層構造表す図です。

- モジュールの論理を構造化する
- 論理の階層化を表現できる
- GOTOを表現する方法がない(プログラムの処理順序が複雑になり、コードの解析や修正が困難になるスパゲッティコード化の防止)
オブジェクト指向設計
オブジェクト指向とは
オブジェクト指向設計とは、システムを「モノ(オブジェクト)」の集まりとして考えて設計する手法です。
従来の構造化設計では処理の流れを中心に設計しましたが、オブジェクト指向設計ではデータと処理をまとめたオブジェクトを中心に設計します。
クラスとインスタンス
クラスとは、オブジェクトの設計図やテンプレートと表現されます。
そして、インスタンスとは、クラスを基に作成された実体(オブジェクト)のことです。
例えばショッピングサイトの商品はクラスで、「Tシャツ」などはインスタンスです。

プロパティとメソッド
クラスにはプロパティ(属性)とメソッド(動作)があります。
プロパティは「データ(名詞)」、メソッドは「処理(動詞)」として考えると直感的に理解できます。

カプセル化
カプセル化とは、オブジェクトの独立性を高めるために、クラスのプロパティやメソッドを外部から隠す仕組みです。
例えば下の商品クラスは、プロパティ「更新前在庫数」がありますが、これは外部から参照したり更新したりすることはできません。
プロパティ「更新前在庫数」は、「購入」と「購入取り消し」の内部メソッドからのみ使用可能としています。

継承
継承とは、既存のクラスの特徴を引き継いで新しいクラスを作る仕組みです。

ポリモーフィズム(多相性)
ポリモーフィズム(多相性)とは、同じ操作でもオブジェクトによって異なる動作を行える性質です。
下の例のメソッド「送料計算」は、商品種別や距離によって計算方法が異なります。

このように、同じ命令なのに、相手によって動きが変わるのがポリモーフィズム(多相性)です。
ドメイン駆動設計(DDD)
DDDとは
DDD(Domain-Driven Design:ドメイン駆動設計)とは、業務を中心にソフトウェアを設計する手法です。名前になっている「ドメイン」は業務のことです。
ドメインとは
ドメインはシステムが対象とする業務領域や、問題解決しようとしている領域のことです。
<ショッピングサイトのドメインの例>
商品管理
├商品の入荷
└商品の購入
ドメインモデルとは
ドメインモデルとは、ドメインを図やクラスで表現したモデルで、問題解決するための方法も記述したものになります。

ドメイン駆動設計(DDD)とデータ中心設計との違い
データ中心設計では、データの構造を中心に設計を行います。まずE-R図などを作成してデータの関連性を整理し、そのデータを効率よく管理できるようにテーブル設計を行います。
一方、DDDでは業務知識(ドメイン)を中心に設計を行います。データの構造だけでなく、「どのような業務ルールがあるか」「どのような振る舞いを行うか」を重視してモデル化します。
腕試し(理解テスト)
腕試し(理解テスト)に挑戦する場合はこちらをクリック。


コメント