アカウント名:
パスワード:
行為主体が物ではなく人間(コンピュータ)なのだから、「AがBと何々する」より「私がAとBを何々する」と言う記述が人間には自然でしょう。よってオブジェクト指向的記述はいまいちだと思われます。
サブジェクトじゃなくてオブジェクトだよ。「AがBと何々する」と言うと理解がそもそもおかしい。「Aに対してBを利用して何々する」と言うのがより正確。
A.add(B)
だったら「Aに対してBを加える」ということ。分かりにくいのは、その結果をAに代入するのか、値を返すのかがこの表現からは分からないということだ。その辺りは、
(add A B)
(add! A B)
のように書ける言語であれば、(少なくともそういう言語を使っている人には)より明確だ。それでいて、これもまた、オブジェクト指向的表現である。関数呼び出しに関しては、第一引数を書く場所の違いに過ぎない
では、何がオブジェクト指向的じゃないかと言ったら、
(addRealReal A B)(addRealComplex A B)(addComplexReal A B)(addComplexComplex A B)
と言うように使い分ける必要がある場合。オブジェクト指向的表現なら「実数もしくは複素数を足して、実数もしくは複素数を得る」ために、その型なんて意識しなく無いだろ?「実数」も「複素数」も単なる「数」として扱える方が理解が楽なんだよ。
一方で、複素数なんか扱いたくないのにどこかで紛れ込んでいても気が付きにくいという欠点もある。また、「数」として文字列クラスも扱えるような場合だと、文字列クラスのインスタンスを意図せずぶち込んでデバグに悩まされるかも知れない。少なくともC++であれば、その辺りの問題に対処した書き方もできるわけだが、書き方がいろいろあるしC++は自由度が高いから、書く人によって別言語のようになってしまうようなことも頻繁にある。
もっとも、個人的にはマクロを多用したCのコードを見ることが多いので、Cの方がひどいとは思う。
じゃあ、Cに関数テンプレートだけ持ってくればいいんじゃないの?あれって、オブジェクト志向とは関係ないよね?
冗談は冗談と分かるように書いて欲しいな。
違います。自分のコンパイル時間を使って、他人の余暇を作るための壮大な装置です。
実行時にしかAとBの型がわからないんだから、テンプレートでは無理だよ。テンプレートを使えば、
add(A, B)
で済むけど、AとBがダウンキャストされている必要がある。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
※ただしPHPを除く -- あるAdmin
行為主体 (スコア:0)
行為主体が物ではなく人間(コンピュータ)なのだから、
「AがBと何々する」
より
「私がAとBを何々する」
と言う記述が人間には自然でしょう。
よってオブジェクト指向的記述はいまいちだと思われます。
Re:行為主体 (スコア:0)
サブジェクトじゃなくてオブジェクトだよ。「AがBと何々する」と言うと理解がそもそもおかしい。「Aに対してBを利用して何々する」と言うのがより正確。
だったら「Aに対してBを加える」ということ。分かりにくいのは、その結果をAに代入するのか、値を返すのかがこの表現からは分からないということだ。その辺りは、
のように書ける言語であれば、(少なくともそういう言語を使っている人には)より明確だ。それでいて、これもまた、オブジェクト指向的表現である。関数呼び出しに関しては、第一引数を書く場所の違いに過ぎない
では、何がオブジェクト指向的じゃないかと言ったら、
と言うように使い分ける必要がある場合。オブジェクト指向的表現なら「実数もしくは複素数を足して、実数もしくは複素数を得る」ために、その型なんて意識しなく無いだろ?「実数」も「複素数」も単なる「数」として扱える方が理解が楽なんだよ。
一方で、複素数なんか扱いたくないのにどこかで紛れ込んでいても気が付きにくいという欠点もある。また、「数」として文字列クラスも扱えるような場合だと、文字列クラスのインスタンスを意図せずぶち込んでデバグに悩まされるかも知れない。少なくともC++であれば、その辺りの問題に対処した書き方もできるわけだが、書き方がいろいろあるしC++は自由度が高いから、書く人によって別言語のようになってしまうようなことも頻繁にある。
もっとも、個人的にはマクロを多用したCのコードを見ることが多いので、Cの方がひどいとは思う。
Re: (スコア:0)
じゃあ、Cに関数テンプレートだけ持ってくればいいんじゃないの?あれって、オブジェクト志向とは関係ないよね?
Re: (スコア:0)
Re: (スコア:0)
冗談は冗談と分かるように書いて欲しいな。
Re: (スコア:0)
違います。
自分のコンパイル時間を使って、他人の余暇を作るための壮大な装置です。
Re: (スコア:0)
実行時にしかAとBの型がわからないんだから、テンプレートでは無理だよ。テンプレートを使えば、
で済むけど、AとBがダウンキャストされている必要がある。