クラスを見つけるのがオブジェクト指向設計#
オブジェクト指向にはクラスが必要です。オブジェクト指向的に設計しようとすることはクラスを見つけることに他なりません。AクラスとBクラスが異なるクラスとして必要な理由は何?#
クラスを見つけるというのはつまりクラスを定義することですが、では、AクラスとBクラスという2つの異なるクラスが必要になる時の理由は何でしょうか?- 処理が異なる
- 責務が異なる
- データ構造が異なる
クラスの根本は、
- データ構造(構造体)とそれを扱う処理(関数orメソッド)を一体化させたもの
データ構造というのは属性(プロパティ)の集まりのことで、それら属性の値を読んだり編集したりするために処理は存在します。
次の図はOracleのJava入門のページに書いてあるものです。出典: What Is an Object?

![]() |
この図からも解るように、
- データ構造を持たないクラスはそもそもクラスとして機能しない
クラスの成り立ち#
手続き型の時代から、オブジェクト指向のクラスがどのようにして生まれたのかを見ていきます。手続き型の言語においても共通するデータ構造(構造体)を最初に決めます。

次に処理(関数)を作成し、処理と処理がデータ構造を受け渡す形で ロジックを組み立てます。

ところが似たような処理があちこちに意図せず作成されてしまいます。

これを避けるために処理を共通化して共通関数を作成し、共通関数のみを 利用するような開発ルールを設けます。しかし仕組みとしての強制力がないため、 似たような関数が複数生まれる危険性は変わりません。

この危険性を取り除いたのがオブジェクト指向でのクラスです。データ構造が 共通関数を持つように仕組みとして強要します。

クラスの中核はデータ構造#
上記で見たように、クラスの最初に必要なのは- 共通化されたデータ構造
共通関数というものを開発したことのある人は解ると思いますが、
- 関数(処理)を共通化するためには受け渡されるパラメータをまず共通化する
つまり手続き型の言語においても、
- 処理を共通化する前にデータ構造を共通化
- 共通化されたデータ構造が処理も持てる
- そのクラスを基にした個体(インスタンスあるいはオブジェクト)をメモリ上に複数生成
まとめ#
- クラスを規定するのは処理ではなくデータ構造
コラム#
「クラスとはデータ構造のこと」と社内の若手プログラマー達に教えています。正確に言うと「データ構造と処理を一体化したもの」なんですが、クラスを見分ける際に最初にやることはデータ構造を考えることなので上記のように繰り返し言っています。 にもかかわらず彼らは処理に目が行ってしまい、手続き型の考えにすぐなってしまいます。
これが人間の本能なのかは判りませんが、プログラマーはそれに陥りやすいと思って設計者は設計する必要があるようです。 つまり曖昧な言葉による表現は避け、きちんとしたクラス図を書いて依頼し、プログラマー任せの製造は避けるべきだと考えています。
またプログラマー達がコードのみで考える状態から脱却するため、早いうちからクラス図の読み書きを修得するよう指導することも重要です。
次: 責務はクラスではない
添付ファイルの追加
ログイン済のユーザのみが添付ファイルをアップロード出来ます。
添付ファイル一覧
Kind | Attachment Name | Size | Version | Date Modified | Author | Change note |
---|---|---|---|---|---|---|
png |
class_history01.png | 10.0 kB | 1 | 27-1-2011 00:07 | ytp | |
png |
class_history02.png | 16.5 kB | 1 | 27-1-2011 00:19 | ytp | |
png |
class_history03.png | 38.4 kB | 1 | 27-1-2011 00:19 | ytp | |
png |
class_history04.png | 20.1 kB | 1 | 27-1-2011 00:19 | ytp | |
png |
class_history05.png | 25.0 kB | 1 | 27-1-2011 00:19 | ytp |
«
This page (revision-22) was last changed on 18-6-2014 13:36 by ytp