T_NAKAの阿房ブログ

アクセスカウンタ

zoom RSS オブジェクト指向プログラミング(1)

<<   作成日時 : 2016/02/05 00:01   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

コンピュータサイエンスとプログラミング入門(Part2)の七回目の授業:"15. Abstract Data Types, Classes and Methods(抽象データ型、クラスとメソッド)"の話題です。

「オブジェクト指向プログラミング」というのは苦手です。ここは少しずつ学んでいくことにします。
まず簡単なプログラムから見ていきます。前提としては最初に \(import.math\) が書かれています。
画像

リストで表現されたベクトルの和を求めるプログラムでしょうか。

次は「クラス」を使った表現の仕方の簡単な例だと思います。
画像

まず、
 「クラス - オブジェクトのインスタンスを作成するテンプレート(クラスの外観を作るテンプレート)」
であり、\(class cartesianPoint:\) で \(cartesianPoint\) というクラスを定義します。
\(pass\) という2つめのキーワードは \(body\) が空だった場合の \(Python\) での言い方ですね。
 \(cp1 = cartesianPoint()\)
で、 \(cartesianPoint\) というクラスタイプの \(cp1\) というインスタンスを定義しました。
 \(cp2 = cartesianPoint()\)
で同様に、 \(cartesianPoint\) というクラスタイプの \(cp2\) というインスタンスを定義しました。
ここで、 \(cp1\) と \(cp2\) は同タイプのインスタンスですが、それぞれ別のものです。さらに、インスタンスは内部属性(internal attributes)を持つことになります。例えば、
 \(cp1.x = 1.0\)
で、1つのインスタンスである \(cp1\) の内部に変数名 \(x\) とそれに関連する値を与えたことになります。
講義では
 「今のところはこう考えてください。クラスの定義を呼び出すと、それが動作して、インスタンスに相当するメモリの具体的な場所を割り当てる、というものです。」
と説明されていましたが、ちょっと分かり難いですね。

さて、クラスを書き換えてみましょう。
画像

\(cPoint\) という名前のクラスです。
ここで、\(\underline{\;\;\;\;}\mathrm{init}\underline{\;\;\;\;}
\) 関数が、引数に適用されてインスタンスを作成します。この場合デカルト座標の \((x,y)\) がそのまま引き渡されると同時に極座標 \((r,\theta)\) に変換されて、内部変数に格納されます。

講義では
「実際にはそれは、どこかのオブジェクトです。内部には、これらの内部定義を持っています。
クラスの定義を呼び出すと、\(init\) が呼び出されます。
\(init\) は、そのインスタンスへのポインタを作成します。
アクセスが必要となるのでそれを呼び出し、インスタンスのポインタとして \(self\) に渡します。
つまり、メモリ内のその部分にアクセスし、いまメモリ内のその部分で、このようにして、ご覧の通り、\(self.x\) を \(x\) の値に定義します。
どういうことでしょう? 
\(self\) がどこを指しているかを探し、構造内に変数名 \(x\) を作成し、それに関連付けられた値を作成します。」
と説明されています。

このインスタンスの内部データにアクセスするためには、ここでは例えば \(cartesianメソッド\) を使います。
つまり、 \(p1.cartesian()\) の戻り値で \(p1.x\) と \(p1.y\) にアクセスすることになります。

講義では   
"Methods - can access the values of the specific instance."
と説明されています。


ここで、アンダーバー2つで囲まれているメソッドについて講義で言っていたことを記しておきます。

\(\underline{\;\;\;\;}\mathrm{init}\underline{\;\;\;\;}\;-creates\;instance\)

\(\underline{\;\;\;\;}\mathrm{str}\underline{\;\;\;\;}\;-printed\;representation\)

\(\underline{\;\;\;\;}\mathrm{cmp}\underline{\;\;\;\;}\;-comparision\)

\(\underline{\;\;\;\;}\mathrm{eq}\underline{\;\;\;\;}\;-same\)


今日はこの辺で。。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
オブジェクト指向プログラミング(1) T_NAKAの阿房ブログ/BIGLOBEウェブリブログ
文字サイズ:       閉じる