設計によるセレンディピティ

"The most powerful force in the universe is compound interest."

オブジェクト指向プログラミングの3大要素について

オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―

オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―

オブジェクト指向技術とは

ソフトウェア開発を楽に行う為の総合的な技術

オブジェクト指向プログラミングの3大要素

  • class
  • polymorphism
  • inheritance (継承)

3つの仕組みは,
重複した無駄なロジックを排除し,
必要な機能を整理整頓する仕組みをプログラムに提供する.


class

分類,種類といった同種のモノの集まり,という意味 classはサブルーチンと変数をまとめるもの. 関連性の強いサブルーチン(関数)とグローバル変数を一つにまとめて粒度の大きいソフトウェア部品を作る仕組み.
この仕組みを使うことで,バラバラに存在していたサブルーチンと変数をまとめて整理整頓できる.

classと対になる要素にinstance instanceは,具体的なもの,実例を意味し,実行時に確保されるメモリ領域のこと.

class = 種類 instance = 具体的なもの というわけ.
1つのclassから実行時にたくさんのinstanceを作る仕組みが, 数学の集合論における集合と要素によく似ている.

プログラムが動くときには,定義したclassからinstanceが作られて,それらが相互作用し合いながらソフトウェアとしての機能を実現する.

polymorphism

色々な形に変わる,と言った意味を持つ言葉で,日本語では,多態性,多層性などと訳されることもある.
類似したclassに対するmessageの送り方を共通にする仕組み,と言える.
相手が具体的にどのclassのinstanceであるか,を意識せずにmessageを送れる仕組み,といっても良い.
polymorphismはmessageを送る側が楽をする為の仕掛け

inheritance 継承

classの共通点と相違点を体系的に整理する仕組み
inheritanceは,全体集合と部分集合に相当
オブジェクト指向では,
全体集合 = superset
部分集合 = subset
(これは集合論において,superset,subsetと呼ぶの同様)

オブジェクト指向と現実世界の違い その1

現実世界では,先に具体的なものがあり,それを様々な基準で分類する.
オブジェクト指向の世界では,1種類のclassからinstanceが作られる.
作られたinstanceは複数のclassに帰属することができず,時間が経っても別のclassに所属替えすることができない.


オブジェクト指向は,純粋にプログラミング言語の仕組みとして理解する必要がある.
そのためには現実世界と対比する説明を,たとえ話と割り切ることが混乱しないコツ

第三章

サブルーチンの独立性を高める方法は,呼び出し側(メインルーチン)とサブルーチンで共有する情報を少なくすること. ここで共有する情報とは, 変数に格納されるデータを指す. そして,複数のサブルーチンが共有するこうした変数のことをグローバル変数と呼ぶ.


オブジェクト指向には 抽象的な「汎用の整理術」と 地に足のついた「プログラミング技術」 というまったく異なる2つの側面がある.