2016/09/30 13:00 python オブジェクト指向 ( Object Oriented ) [前回] モジュールの一般化 (手続の集合とデータの対を作る) => Class Class から Instance を作る事ができ、これが、Object になっている # Object : 「手続とデータが対になったもの」==「モジュール」 # Object は、Class と独立に存在可能 # Object を Class から作った方が、色々と便利(後述) # Class から作った Object を Class の Instance と呼ぶ !!! Class から作る Instance が Object であり、 !!! その Object を使うから、「Object Oriented」というのは誤り !!! # 形だけ真似ても、思想が解らなければ意味がない 「Object Oriented」の思想 2 つの立場がある (1) 昔(手続指向) 機能 ::= (アルゴリズム + データ操作) + データ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ プログラム(手続,関数) 例 : DB を操作して、Web Page を作る Web Page を作る部分がアルゴリズム DB の参照は、SQL を利用したプログラム データは、DB(Table) の中身 プログラムが主で、データが従 !!! 名前は、プログラムに付く sort のプログラム 複数のデータ集まりを、大きい順に並べる事 a) データ操作 大きい順 並べるかえる b) 全体を、降順にする手続き quick sort / babble sort / etc.. 本来、a) と b) は独立 \sort アルゴリズム | quick | babble | .. データ | | | ------------------+-------+--------+-- 配列 | | | ------------------+-------+--------+-- List | | | ------------------+-------+--------+-- ... | | | 手続指向 : (アルゴリズム + データ操作) + データ自身 ^^^^^^^^^^^^^^^^^^^^^^^^^ : 名前 => 同じアルゴリズムを異るデータ毎に実装する必要がある アルゴリズムの再利用ができない !! 同じアルゴリズムで作られた(対象となるデータ型の異る)複数の手続が、異る名前で、作られる。 今(オブジェクト指向) 機能 ::= アルゴリズム + (データ操作 + データ) ^^^^^^^^^^^^^^^^^^^^ オブジェクト データ操作とデータがカプセル化 !!! 「カプセル化」内部の違いを I/F が(カプセルとして)吸収し、 !!! 同じように操作できるようにする事 !!! -> 異るデータ(構造)に、同じ操作ができるようになる アルゴリズムが、データから、独立できる -> 名前はアルゴリズムに付き、組み合わあせが可能になる この結果、「名前」は、「実装」ではなく「I/F」に付く様になる (2) シミュレーションによるプログラミング 「プログラムは、現実の世界のシミュレーションである」と言い切る 「現実の世界にある『物』(のシミュレーション)」と、 この『物』を「オブジェクト」と呼び 「それらの関係(のシミュレーション)」で、問題を解く。 「オブジェクト」の関係でプログラムを作るので、 「オブジェクト」指向 「交通量シミュレーション」 交差点(十字路)がある。 そこに、信号がありがあり、それを制御して、交通整理をしたい 車は、ランダンムにやってきて、どれだけ渋滞したかを考える p-001.py 全てのデータに、プログラム内で、明示的に、個々に指示をだしている p-002.py (未完成) 個々のデータは、カプセル化されたオブジェクトになっており、個々に、勝手に動く プログラムは、個々のオブジェクトに tick を送るだけ # tick を送る = 時間を進める オブジェクト指向 1. 再利用の立場から # 最適化/特殊化してしまうと、再利用できない 2. 考え易さの立場から 現実の物の性質を実現する(クラスやオブジェクト)事により、 コントロールの部分が極小化されて、分かり易くなる