オブジェクト指向と仏教と
処理の流れ(特に繰り返しや条件分岐)を、関数・サブルーチンを実体化することで、それらの関係性に書き換えると、プログラム記述が簡潔になるのが、オブジェクト指向の肝です。> @sugaki: 結構大ざっぱです(爆 QT @wagonthe3rd 再起型プログラミングはピンと来ますか?
2011-02-09 04:29:00概念的には間違っていないように感じました。プログラミングでは、多分サブルーチンが呼び出せる言語なら同様に記述可能だと思うのですが、それらの形式をルール化し、それ以外の記述が出来ないようにしたのが構造化言語、という認識で大丈夫でしょうか… QT @wagonthe3rd
2011-02-09 04:34:57再帰的プログラミングを非対応の言語でも一応繰り返しや条件分岐に展開して記述は可能ですが、面倒ですよね。オブジェクト指向も同じです。> @sugaki: 概念的には間違っていないように感じました。プログラミングでは、多分サブルーチンが呼び出せる言語なら同様に記述可能だと思うのですが
2011-02-09 04:49:32ありがとうございます。なんか、概念的に理解出来てないのかと思って不安だったんです。認識的には記述をしやすくしたサブルーチンの明示的置き換えと考えればよさそうですね QT @wagonthe3rd
2011-02-09 04:54:37@wagonthe3rd @sugaki サブルーチンが便利なのは同じ手続きを使い回すとき。構造化の関数は中の変数の独立性を高めてより使いまわし安く。オブジェクト志向のオブジェクトは中の関数の独立性を高めて、多態や継承って技術で中身を交換しても使いませるように…かな?
2011-02-09 05:04:22なるほどぉ。中身を交換…というのは、サブルーチンでいう変数の受け渡しに当たると考えればよいのでしょうか(知ってるモノで対比できないと理解出来ないダメ脳(遠い目) QT @a_alpha_m wagonthe3rd 多態や継承って技術で中身を交換しても使いませるように…
2011-02-09 05:10:31@sugaki オブジェクト指向はその名の通りコードを物に例える考え方で、例えば「ステアリング」(ハンドル)というオブジェクトがあったとして、利用者はそれを左右に回すと進行方向が左右に変わる、ということだけを知っていればいいのです。実際に動くのは車でも船でも飛行機でもいい。
2011-02-09 05:20:34@sugaki 利用者はただハンドルを回すだけだけど、回されたハンドルのほうは、自分の機構に合わせて、内部で方向を変化させる動作を起こす。と。(利用者が呼ぶ関数(メソッド)は同じでも、オブジェクトの内部で呼ばれる内部関数はオブジェクト毎に別々の物が動作する)
2011-02-09 05:25:19@a_alpha_m どうも、その概念と実際のコード記述、そうでない方法との関連性が宙に浮いてしまっているのですよね(遠い目) 変数を受けとらずに値を返すサブルーチンってそういうものかなぁとぼんやり思っている感じなのです(苦笑) ‡離脱中‡
2011-02-09 05:24:24@sugaki んー。コード的な感じで言うなら、 非構造化言語では、変数Aは一つしか持てないから、メインでAを使っている時に、サブルーチンの中でAを使うと値が壊れてしまう。 構造化言語では、関数の中と外の変数は独立しているため、関数の中でAを使っても影響はない。
2011-02-09 05:32:43ほうほう、それはわかります。それが実現されているのが構造化対応しているという事でしょうか QT @a_alpha_m 非構造化言語では、変数Aは一つしか持てないから、メインでAを使っている時に、サブルーチンの中でAを使うと値が壊れてしまう(略)
2011-02-09 05:34:45@sugaki です。構造化言語では、関数が呼び出されるたびに、独立した空間に変数が作られるため、再帰的な関数呼び出しが可能になります。関数fn()の中で、自分自身であるfn()を呼び出すと、自分と、新しく呼んだfn()ではそれぞれが独立した変数を持つことになります。
2011-02-09 05:42:58あーなるほど、確かにそれはPHPでもそうなりますね…確か。サブルーチンも同様ですよね QT @a_alpha_m です。構造化言語では、関数が呼び出されるたびに、独立した空間に変数が作られるため、再帰的な関数呼び出しが可能になります(略)
2011-02-09 05:47:10@sugaki 構造化言語では一つのソースには、関数left()は一つしか持てないので、複数のleft()を定義しようとするとエラーになる。 オブジェクト志向のオブジェクトの中と外では、関数(メソッド)が独立しているため、同じ名前で別々の機能を持った複数のleft()が定義できる
2011-02-09 05:35:38う、そこになると頭が混乱…(爆 同名の変数が使えるのと同じ原理でしょうか QT @a_alpha_m 構造化言語では一つのソースには、関数left()は一つしか持てないので(略)同じ名前で別々の機能を持った複数のleft()が定義できる
2011-02-09 05:41:32@sugaki 原理的には同じです。関数が呼ばれるたびに関すに含まれる変数が独立して作られるのと同じように、オブジェクトが作られるたびに、オブジェクトに含まれる変数と関数が独立して作られます(正確には同じ機能の関数はメモリは共有してるけど)
2011-02-09 05:49:18なんとなくわかりました。私の持ってた概念は多分大きくは間違っていない模様です。ありがとうございます QT @a_alpha_m 原理的には同じです。関数が呼ばれるたびに関すに含まれる変数が独立して作られるのと同じように
2011-02-09 05:53:50@a_alpha_m 関数って、言語が持ってるものも関数と言いますよね。それはあるパラメータを渡すと一定の処理をして値を返してきます。これもオブジェクトと言えるのでしょうか ‡離脱中‡
2011-02-09 05:31:38@sugaki ああ。非構造化言語の関数と、構造化言語の関数は名前は同じだけど全く違うものだと思ったほうが早いかも。BAISCとかの言語が持ってる関数は、ただの返り値を持った”命令文”ですね。
2011-02-09 05:38:11むむむむ…(爆) PHPとかでもBASICと同様でしょうか QT @a_alpha_m ああ。非構造化言語の関数と、構造化言語の関数は名前は同じだけど全く違うものだと思ったほうが早いかも。BAISCとかの言語が持ってる関数は、ただの返り値を持った”命令文”ですね。
2011-02-09 05:42:34@sugaki PHPをよく知らないので、ちらっと見たところ、サブルーチン(関数)とあったり、オブジェクト指向としての機能もある、とか書いてありますねw
2011-02-09 05:51:04@sugaki スクリプト系の言語は、学者が考えた論理設計重視の言語というより、実際に使う人が考えた言語が多いので、論理的に正しいかどうか、よりも実際に使う上で便利かどうかが優先されますからねw どちらのほうがいいというものではなくw
2011-02-09 06:01:17@a_alpha_m なるほど!そういう生い立ち的なものもありますか!私自身本当に似非日曜プログラマーレベルの知識と経験しかなくて、そこらへんも疎いのですよね(遠い目) ‡離脱中‡
2011-02-09 06:09:09@sugaki 私も素人ですよw C言語とかの硬い規則の言語に慣れていると、初めてPerlを触ったときに、あまりの記述法のいい加減さ(柔軟さ)におどろきましたw C言語自体もハッカー文化の産物ではあるんですが…w
2011-02-09 06:13:36