Python.use(better) #OOP への扉を開く:継承に警鐘を鳴らす

記事一覧 Python.use(better)《Python3.1》

OOP への扉を開く:継承に警鐘を鳴らす

《著》真樹育未、小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第1版♪1988/05/23 ● 第2版♪2001/01/29 ● 第3版♪2009/12/15

オブジェクト指向プログラミング〔OOP〕の基本概念の理解を深めます。
※ JPython1.1/Jython2.2 で作成した例題を、Python3.1 で再構成しました。

継承に警鐘を鳴らす

episode
2006-06-05 《1》継承に警鐘を鳴らす(その壱)
継承には(1)構造継承(2)機能継承(3)プロトコル継承があって、さらに、機能継承は(2a)親子関係にあるクラス間の継承(2b)親子関係にないクラス間の継承(2c)クラスとインスタンス間の継承に分類されます。ともすると、Java/C# などでは、狭義の(2a)に関心が寄せられがちです。しかし、純粋な OOP の世界では、その限りではありません。
2006-03-06 《2》継承に警鐘を鳴らす(その弐)
継承は「ホワイトボックス」型の再利用とも呼ばれ、継承元のクラスの存在が露呈するので、クラスを実現する方法(継承)を逆手に取って「情報隠蔽の原則」を無視した操作が許されます。委譲は「ブラックボックス」型の再利用とも呼ばれ、委譲先のクラスの存在を隠蔽するので、委譲先のクラスとは独立した管理が可能になり「情報隠蔽の原則」を無視した操作を許しません。特殊メソッド __getattribute__ を利用すると、クラスの実現方法(継承元の list)に依存する部分を制限して、不当な操作を回避できます。
2006-03-07 《3》継承に警鐘を鳴らす(その参)
継承の概念を実現するのに、クラスを利用する方法があります。クラスも「呼び出し可能オブジェクト」なので、演算子 () を利用できます。特殊属性 __class__ を参照すると、そのインスタンスオブジェクトが属する、クラスオブジェクトが得られます。特殊属性 __dict__ を参照すると、メソッド辞書オブジェクトが得られます。関数も「オブジェクト」なので、固有の識別情報を持ちます。特殊属性 __func__ を参照すると、そのメソッドオブジェクトが保持する、関数オブジェクトが得られます。メソッド呼び出しには、実行時に確定するオブジェクトの存在が不可欠で「束縛メソッド」と「非束縛メソッド」とに分類されます。
2006-03-08 《4》継承に警鐘を鳴らす(その肆)
継承の概念を実現するのに、親子関係にあるクラスをどのように表現するかを紹介します。新しいクラスを定義するときに、既存のクラスと親子関係を結ぶ意義について考察します。クラスも「呼び出し可能オブジェクト」なので、演算子 () を利用できます。特殊属性 __bases__ を参照すると、その親クラスを列挙したタプルが得られます。演算子 in を利用すると、指定したキーがメソッド辞書に含まれるかが分かります。メソッド呼び出しには、実行時に確定するオブジェクトの存在が不可欠で「束縛メソッド」と「非束縛メソッド」とに分類されます。
2006-03-09 《5》継承に警鐘を鳴らす(その伍)
継承の概念を実現するのに、親子関係にあるクラスをどのように表現するかを紹介します。新しいクラスを定義するときに、親クラスのメソッドを再定義する意義について考察します。クラスも「呼び出し可能オブジェクト」なので、演算子 () を利用できます。演算子 in を利用すると、指定したキーがメソッド辞書に含まれるかが分かります。特殊属性 __func__ を参照すると、そのメソッドオブジェクトが保持する、関数オブジェクトが得られます。特殊属性 __code__ を参照すると、その関数定義に即した、コードオブジェクトが得られます。
□□□□□□

》こちらに移動中です《
TOP


関連記事

Last updated♪2009/12/25