[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 05/14 13:02 / Filesize : 255 KB / Number-of Response : 780
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【激突】関数型言語 VS オブジェクト指向言語2



1 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/07(土) 21:26:47.61 ]
一般的には、オブジェクト指向型言語が優勢でが
一部には関数型言語を崇拝している人もいます

どちらが上なのか、この際はっきりさせましょう

前スレ toro.2ch.net/test/read.cgi/tech/1331328955/

83 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 21:30:52.01 ]
>>80
全部受け入れられている言語だと思うが・・・
言語なんて金になるかどうかで受け入れるかどうかが決まるもんだよ
関数型言語で金になる話が無いだけ
と言うわけで関数型言語でスマフォアプリ作れる環境を(ry


84 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 21:32:33.29 ]
>>82
犬とか猫を
どうやって関数型言語で表現するの?

85 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 21:35:40.55 ]
>>83
これを本気でいうからなぁ

86 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 21:54:02.37 ]
>>84
犬とか猫を
どうやってオブジェクト指向言語で表現するの?

まさか class Dog のインスタンスが犬なの?www

87 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 21:54:21.43 ]
>>83
言いたい事は分かったが、なんでUMLで分析しないの?
金銭の概念をオブジェクト指向分析すればいいのに、なぜ犬と猫なんだ?

88 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 21:57:00.90 ]
>>86
型と値の区別ついてるかな?

89 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 21:58:20.34 ]
>>88
もちろん
だからクラスではなくインスタンスだって言ってるだろ

90 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 22:08:10.34 ]
>>84
え、表現できてるでしょ?
むしろ、DogもCatもAnimalsに属してるのであって、オブジェクト指向のDogとCatがAnimalの子って言う関係の方が不自然だよ
そして、SnakeやLionが増えても、Animals型である限り、同じ関数が使えるし、せいぜい1つの機能に付き、一つの関数書き換えで済む(泣き声変えるために、いちいちクラスごとにvoiceメソッドを書く必要も無い)
OOPLでもジェネリックやテンプレートで型ごとにメソッド書くでしょ?
でもそれって、OOPLの利点じゃないと言うか、むしろ関数型言語の方が強力
voiceメソッドがAnimalクラスや、その子クラスにあるのは良いけど、animalCategoryメソッドをAnimalクラスが保持するのは不自然。そうなると、関数型では存在しない第3のクラスを作る必要が出てくる(Categoryクラスみたいな?)
関数型言語のデータはデータ。関数は関数。という関係の方が、シンプルに思える


91 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 22:08:18.46 ]
争いは、同じレベルの者同士でしか発生しないのAA



92 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 22:12:10.32 ]
>>90
それって、関数型言語でオブジェクト指向やってるだけですよね?

93 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 22:19:51.16 ]
>>82
一応さ、型クラス使った方が良いと思うので貼っとくね
Animalに動物足すたびに代数データ型を変更するのはアレなんで


class Animal a where
  voice :: a -> String

data Dog = Dog deriving (Eq, Show)
instance Animal Dog where
  voice _ = "wan wan!"

data Cat = Cat deriving (Eq, Show)
instance Animal Cat where
  voice _ = "nya- nya-!"

taro = (Dog, "taro", 7)
mii = (Cat, "mii", 3)

94 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 22:35:52.14 ]
>>87
いや、プロじゃないんでUML触ったこと無い
名前しか知らん

プロの視点で関数型言語とオブジェクト指向言語の生産性の比較とかやって欲しいところ

素人視点(=感覚的)では、LLとの比較でも、rubyやpythonは記憶力勝負(多くのメソッドを記憶してれば効率的。むしろ、何もメソッド知らない状態だとほぼ何も出来ない)
Haskellは少ない知識で割と素人でも何とかなる(既存の関数知ってる方が効率的なのはLLと変わらないが、何も知らない状態での開発効率に雲泥の差がある)

初学者へのモチベーション維持と言う意味では、関数型言語の方が向いてると思う
そして、最終的な生産効率はLLと変わらないか若干劣る(読みやすさ重視だとほぼ差がなくなる)

昔、length関数をrubyでどう書くの?と言う質問に対して、メソッドとクロージャ駆使して短いコードが返ってきた
素人じゃとても書けないと思った
Haskellなら基本的な再帰関数の作り方覚えるだけで作れるものが、LLだとそれなりの知識を必要とするのだと感じた瞬間だった


95 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 22:43:11.49 ]
>>73
Haskellばかり話題に登るのでMLに触れておくと、
MLにはモジュール(関数とデータの集合)というものがあり、
さらにモジュールを引数に取ってモジュールを返す関数(Functor)がある

これはOOPでいうとクラスからクラスへの関数を定義できるようなもの
カプセル化?差分プログラミング?全部余裕ですよ

96 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 22:48:52.63 ]
別に完全否定してるわけじゃないのにできますよって
余計なこと考えるだけのメリットが聞きたいのに

97 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 22:56:12.60 ]
メソッドをどのクラスに入れるか迷うようなことは無くなるね

例えば文字列のリストのjoinを
",".join(strlist) とするか
strlist.join(",") にするかみたいなね

98 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 23:05:31.47 ]
>>92
・・・・え?
オブジェクト指向設計って事?
意識したこと無いけど、これがそうなのか・・・

まあ、関数型言語は色んな角度の視点を許容する感覚はあるかな
何だろう。破壊的な代入が出来ない分、そのものの性質を見ようとする体質に自然となるような・・・

Haskell でリストの要素を swap する 9 つの方法
jutememo.blogspot.jp/2011/04/haskell-swap-9.html

>>70のlengthも視点の角度が違うだけで等価なものだしプログラミングHaskellの付録Aに書いてるlengthの定義もまた違う視点

length = foldl (\n _ -> n + 1) 0 -- 初期値0とリストの先頭要素を受け取るが、初期値に+1を繰り返すだけ、リストが空になったら蓄積変数(初期値0のもので、リストが空になるまでひたすら+1されてた変数)を返す

仕様の表現の仕方に色んな表現があるけど、OOPLや手続き型は表現自体を制限されてる感じ
だから、そのまま仕様をコードに落とせないと感じるのかも・・・




99 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 23:08:49.08 ]
OOも知らないで語ってたのかw

100 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 23:11:21.47 ]
ライムゲームを関数型で設計したら間違いなく不便

101 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 23:16:53.03 ]
すっぱそうだな



102 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 23:23:09.41 ]
>>99
でも、ぶっちゃけOOの定義定まってないだろ、このスレで
下手すりゃデータと関数を一纏めにしたらOO、くらいの勢いだぞ

103 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 23:32:16.09 ]
>>95
HaskellでもFancterやArrow使うと表現が広がるってのは良く見かけます
自分もMonadoやFancter・Arrowを自作できると楽しみが広がりそうで楽しみに学習続けてます
(でも現時点でさえ、Rubyでどう書くの?って処理もHaskellで書けてるのですでに関数型言語マンセーですが)

短く書けても、そもそも知識がないんじゃ書けないなら意味がない(と言うのは言い過ぎだが、学習コストが高い)
と言うのが私の持論です


104 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 23:42:25.23 ]
>>100
んなこたー無い
そもそも、ライフゲームはプログラミングHaskellで載ってる
入門書でライフゲーム書かせるOOPLの入門書って何があるよ
ちゃんと読めばdo表記やIOモナドの洗練されてる事が分かる



105 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 23:42:42.99 ]
最小公倍数は間違いなくあるだろ。
OOはオブジェクトを起点としたプログラミング(設計)
関数型ならλ計算を起点としたプログラミング

OO側は最小公倍数を前提してるものが多いのに対し
関数型は言語サポートでそれもできるというレスが多い(Haskeller以外のことね)

俺は関数型のメリットは副作用の排除の明示にあると思ってるから
OOベースの言語に相当の機能追加すればいいんじゃないのっていうスタンス
状態をベースにしないということはモナドで状態を表現して状態を引数
実際D言語はpureキーワードあるけどね

細部の状態を追い出すのは本末転倒(メリットが少ない)だと思うし
GUIやOSを見れば分かるように大枠から状態ベースをやめるのは直感的じゃないと思う。
状態を排除する方向じゃなくコーディングレベルで状態を追い出せる記述力を持たせる。

106 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 23:44:50.01 ]
>>104
もちろん読んでるから知ってるし自分で書いたよ
あれ書いててあれば作りやすいというならば完全に平行線だし
おれの感想は「うそつき」だね

ちなみにライフゲームはOOで書く必要ない。
「状態」をオブジェクト分割する必要性がほぼ無いから

107 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 23:51:09.92 ]
ちなみに>>104が言ってるのはこれね
www.cs.nott.ac.uk/~gmh/life.lhs

108 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:02:29.16 ]
しかも「無理があると思える対話型プログラムを自然に書く」
というお題の章に乗ってるんだけどな。
つまり書けますよといっているだけでよりメリットがあるとは言っていない。

109 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:06:55.06 ]
「無理がある」がかかってるのは「対話的プログラミング」の
部分であってライフゲームじゃない

そしてHaskellでもIO使えば無理じゃないことを学ぼう、という
内容になってるのはちゃんと読んだなら知ってるな

110 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:08:26.13 ]
いやだからメリットが無いでしょって言ってるんだがなぜそこに触れないw
間違いなく手続きでシンプルにかけるんだが

111 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:11:56.68 ]
>>105
それを言うなら、手続き型ベースに、OOと関数型が乗っかる、だ。
だって、関数型OO言語は嫌なんだろ?



112 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:13:17.49 ]
ちなみに関数型でメリットがまったく無いとは思ってない。
状態を引数に追い出すことにより副作用がなくなるというのは
分かりやすくなる場面が必ずある。

ただ今のところD言語のpureキーワード以上のメリットはあまり感じられない。

113 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:17:31.33 ]
>>105
オブジェクトを起点としたプログラミングって何?
ていうか、オブジェクトって何?

関数型言語では関数は第一級オブジェクトなんですが、その場合
関数を起点にしたらその時点でオブジェクト指向なんですかね?
それとも「第一級オブジェクト」でいうところのオブジェクトとは違う
別のオブジェクトの定義があるんですかね?

114 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:17:48.26 ]
>>111
うーん別にそれでもいいが、
歴史的にはC言語のグローバル連発からC++のオブジェクト分割って流れだし
設計の面でもフローチャートよりオブジェクト指向分析のほうが大枠だし。

粒度で見ればオブジェクト指向>手続き/関数型が自然な解釈だと思うよ。

115 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:28:37.22 ]
>>113
そこの見分け方は「メモリ」です。

>関数を起点にしたらその時点でオブジェクト指向なんですかね?
オブジェクト指向として捉えれば正しいとみることもできるけど
(関数オブジェクトや関数ポインタをオブジェクトとして解釈する)
それは関数型の視点ではない。

関数型特有の視点は一級オブジェクトを「引数」にできるという視点であって
ここでの関数を起点というのはそういう意味。
これが納得いかないのならOOPLにも関数型言語にも両方のフレーバーはあるねというだけ。

別にオブジェクト指向のメリットを取り入れている関数型言語を全否定しないし
関数型の考え方を利用しているOOPも否定しない。

116 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:32:33.68 ]
>>113
あーはいはい。俺が変わりに答えるよ。
オブジェクトは日本語で「対象」とか「目的語」とかに訳されるね。
そんで何に対しての「対象/目的」かというと、それは述語、つまり、関数。
だから、
func1( a, b ); の func1 はオブジェクトとして扱われてない。
func2( func1 ); のfunc1 はオブジェクトはオブジェクトとして扱われてる。
つーわけで、引数に取れる=第一級オブジェクトってわけ。

>関数型言語では関数は第一級オブジェクトなんですが
引数に取れる訳だから、第一級オブジェクトで間違いないが、「指向」はしてない。
引数によって関数の呼び出し先がスイッチして始めてOO。
な、OOってつまらねーだろ。

117 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:38:32.38 ]
>>116
それでは f x を x の型で(型クラスで)スイッチしたらOOなんですね
ただ型を集合で括っただけでオブジェクトを指向した記憶は無いんですが

確かにつまらないというか、ただの多態ですね

118 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:40:07.49 ]
今北。前スレの行番号+カンマ化のやつ、SmalltalkのリクエストがあったのでSqueakで。

| fs |
fs := {
   [| n | n := 0. [:str | (n := n +1) asString, ' ', str]] value.
   [:str | str, ',']
}.

FileStream fileNamed: 'text.txt' do: [:file |
   [file atEnd] whileFalse: [
      Transcript show: (fs inject: file nextLine into: [:line :f | f value: line])]]

119 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:41:46.80 ]
OO=多態のレッテル貼りで話題ずらし

120 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:43:14.06 ]
>>117
そそ。
関数型言語でも、型システムがあったりして、
引数の型によって呼び出し先がスイッチするんなら、OOってことになるな。
だから、関数型言語のOOってのも普通にあるわな。(知ってるだろうけど)

121 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:47:13.80 ]
>>119
違うのですか?
違うなら説明してもらわないと分かりませんよ



122 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:48:34.65 ]
>>121
すでにループだと思うんだけど>>105

123 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:50:51.79 ]
あ、それと f x y z で x と y と z の型でスイッチするときに
OOPで良くある x.f y z という表記は分かり難くないですか?
なんで x だけ f の前に来てるんですか?

124 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:54:44.64 ]
>>122
だからオブジェクトを起点にしてるとだけ言われても分かりませんよ
なんとなくの気分の問題なんですか?

125 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:56:04.83 ]
>>124
正直それで分からないときついと思うんだけど。
オブジェクト指向分析とかイメージできる?

126 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:01:54.50 ]
オブジェクトを起点にしたか否かなんて
設計者の心の中にしか無いのではないですか?
設計/分析されたものだけを見てオブジェクト指向か否か判定できるのですか?

127 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:03:10.45 ]
いや、>>92を見ると判定はできるようですね
その基準を教えてください

128 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:06:40.85 ]
>>126
それは正しいとも言えるし正しく無いとも言える。
設計者本人がどう設計したかを100%証明することはできないという意味では正しいが
OOPLで書かれたコードをみてどう設計したかったを推測することは可能。

正直君のレスは哲学レベルの話でソフトウェア工学の話じゃない。

129 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:09:01.03 ]
>>128
ソフトウェア工学の話じゃないのは>>115の説明ですよ
>>116の話は分かりますよ?ソフトウェアの機能について言及してますからね

130 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:10:37.96 ]
>>129
じゃあどこが理解できないか説明してもらえるかな
あまりに共通言語なさそうだから説明は無理かもしれないけど。

131 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:11:06.70 ]
>正直君のレスは哲学レベルの話でソフトウェア工学の話じゃない。

お前のことだろw 自分で >>105 読み直してみろよw



132 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:11:39.42 ]
>>131
どこがか指摘してね

133 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:18:56.56 ]
>>130
「起点にする」を正しく定義してください
それはソフトウェアの機能として定義できますか?
プログラマの心理状態として定義するのですか?
それとも哲学的な何かとして定義するのですか?

134 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:20:45.64 ]
>>133
えーと正直あほらしいです。
Wikipediaで気分に近い文章を引用してみます。

>ソフトウェア工学において、ソフトウェア (システム) を相互作用するオブジェクトの集まりとしてモデル化 (オブジェクト指向モデリング) する、オブジェクト指向に基づくソフトウェア開発の方法である。
ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E5%88%86%E6%9E%90%E8%A8%AD%E8%A8%88

135 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:24:59.21 ]
>>134
その定義は大分>>105>>115と違いませんか?

それはともかく、それでは関数がオブジェクトの関数型言語では
関数が相互作用してるのでオブジェクト指向ですね

136 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:29:44.35 ]
こう言っては何ですが、議論に負けないために
より一般的な、より抽象度の高い何かとして
オブジェクト指向を定義しようとするあまり
ナンセンスの域に到達してると思いますよ

137 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:32:10.63 ]
主語も述語も不明なレス

138 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:33:20.29 ]
>>137
自己言及文ですか?

139 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:57:40.04 ]
結局のところオブジェクト指向で
システム開発は行われるんだよ。
たとえ関数型言語を使ったとしてもね。

だって考えるでしょ?
関数型言語で多態を実装するにはどうしようか?とか。

140 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 02:02:55.92 ]
ルールを厳密に適用すれば何でもOOになってしまうので、
結局OOか否かは本人の胸先三寸で決まる

伊達にオブジェクト"指向"を名乗ってないな
他にないもんな"指向"なんて付いてるの

141 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 02:05:04.00 ]
アスペクト指向さんがアップを始めました



142 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 02:17:29.46 ]
>>139
オブジェクト指向言語で使うのは inclusion polymorphism

関数型言語でよく使うのは parametric polymorphism で、
あと Haskell なら ad-hoc polymorphism も使う(type class)

さて、parametric polymorphism や ad-hoc polymorphism を使ったところで
オブジェクト指向と言えるのかい?

143 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 02:30:41.89 ]
JavaのGenericsやC++のtemplateやオーバーロードがOOの機能ではないって言うんならそうなんじゃね?

144 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 02:49:26.49 ]
OOPにある機能は皆OOの機能なら
クロージャも関数も変数も条件分岐もループも再帰も
全部OOの機能だね、すげぇ

145 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 03:27:47.51 ]
>OOPにある機能は皆OOの機能なら

そうは言ってないだろ。
GenericsやtemplateやオーバーロードをOOの機能と認めないなら、
parametric polymorphism や ad-hoc polymorphism を使ったところで
オブジェクト指向といえないし、
逆に、GenericsやtemplateやオーバーロードをOOの機能と認めるのなら、
parametric polymorphism や ad-hoc polymorphism を使ったら
オブジェクト指向といえる。

146 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 06:17:57.25 ]
>>139
考えねぇよ
リストとかが多態なだけで、自分はあくまでリスト型を受け取って何かを返す関数作ってるだけ



147 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 08:13:50.81 ]
>>145
JavaやC++よりもMLにparametric polymporhismが入った年のほうが早くね?
それなのにオブジェクト指向が起源になっちゃうの?

148 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 08:22:12.21 ]
リストに対する(多相な)map

map f [] = []
map f (x:xs) = f x : map f xs

を定義しただけでOOとは、OOの範囲はすごいなぁw

149 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 08:40:02.66 ]
lispのプログラムの特徴を「全てリスト」とするなら、OOは「全てOO」なんだよ

150 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 14:11:18.89 ]
誰も起源なんて書いてないんじゃね?

151 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 17:38:02.23 ]
parametric polymorphism と ad-hoc polymorphism がOOの機能なら
モナドは両方使って定義されてるからOOの機能だな



152 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 18:07:22.23 ]
>>149
「全てobject oriented」って何だよ意味分からん
「全てオブジェクト」って言いたいのか?
だとしても、Javaのようにブロックすらオブジェクトでない言語も
OOPを名乗ってるから事実と異なる

153 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 18:25:42.02 ]
parametric polymorphism と ad-hoc polymorphismがOOの機能なら
モナドは両方使って定義されてるから、モナドにはOOが使われている、が正解。

154 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 18:28:02.27 ]
圏論にはOOが使われている(キリッ

155 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 18:31:10.09 ]
>>154
あちらさんの言葉で言うところで、だよ。

156 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 19:09:26.44 ]
JavaはGenericsが入る前からオブジェクト指向言語を名乗ってた
=> parametric polymorhism は OOPL の必要条件じゃない

オーバーロードが無いRubyがオブジェクト指向言語を名乗ってる
=> ad-hoc polymorhism は OOPL の必要条件じゃない

157 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 20:40:19.99 ]
手続き"型"言語、関数"型"言語
そして、オブジェクト”指向”言語

名前からして比較するべきものじゃないんだよ。
オブジェクト指向は、指向って書いてあるとおり考え方。

手続き型言語を使ってオブジェクト指向が出来るように
関数型言語を使ってもオブジェクト指向が出来る。

ではオブジェクト指向言語とは何か?
答えは、オブジェクト指向を素直に表現するのに
便利な構文を持っている言語

だから必須条件なんてものは存在しない。
オブジェクト指向を代表する機能が一つでもあれば
それはオブジェクト指向言語

158 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 20:49:59.98 ]
まあ極端な話すれば、C言語はオブジェクト指向じゃないけど、C89でもOOP自体はできるわけだし

159 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 20:55:14.86 ]
今どきOOを手放しで絶賛する椰子は、今までコンピューターサイエンスが発展してきた流れとか知らないんだろうな
Simula,Smalltalkから1985年ころのflavorまでの流れ、その後C++1.0がcfrontとして登場しオブジェクト指向が一旦退化、
C++はその後複雑化の一途を辿っていること。
また、当初アプレットのためにC++を単純化したようなJavaが登場ししばらくはぱっとしなかったこと。
その後2000年ころのITバブルを機会にtomcat,WSDL,UDDIと合わせてWEBサービスで使われるようになり、
Java自体がが中庸のプログラマ向け言語としてソフトウエア開発分野の裾野へ普及していったこと、
素人向けの誤ったのOO本が入門者に誤解を与えいま変なOO感が普及し弊害が目に付くようになったこと、
それとは別の流れとして、haskellのparottなどでの成功を契機に関数型の利点の認識が広まってきたこと…
時代の節目かな。

160 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 20:57:58.20 ]
>>159
OO感→OO観

161 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 20:57:59.82 ]
基本的な流れとして手続き型も、関数型も
オブジェクト指向を取り入れる方向で進化してるよね。



162 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 20:59:11.07 ]
>>159
parottはなかろう…

163 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 21:00:32.51 ]
オブジェクト指向言語は
関数型言語の利点を取り入れ、

関数型言語はそれだけではアプリを作りにくと
現実的な選択肢としてオブジェクト指向を取り入れる。

164 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 21:01:15.18 ]
>>159
最近楽しいなと思うのは10年くらい前に産声を上げたオデスキーのScalaがここ近年
実用に使われるようになってきたこととか、Clojureというもう一つの選択肢がでてきたこととかetc

165 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 21:02:41.73 ]
>>162
あ、いや成功したのはparottでは(まだ)なく、parottの実装でhaskellが注目されたこと

166 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 21:03:54.88 ]
絶賛というか、今のOOPは単なる常識でしかない
関数型もまた、珍しい技術から単なる常識になりつつある
ただそれだけのことだろ

167 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 21:05:12.46 ]
メソッドをメッセージと捉えるのは、その多くの場合の使われ型から無理を感じる

168 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 21:06:16.77 ]
なれればどうってこと無い

169 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 22:21:19.77 ]
OOも関数型も単なる一機能なんだから、
それをもって〜言語って言い張るのは無理があるんだよ。

170 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 22:52:21.84 ]
>>169
でも、マルチスレッドや分散処理の論文は関数型や論理型の推奨する永続データモデルばかりだよ?
シングルスレッドならともかく、マルチスレッド意識したら純粋関数型や論理型じゃないと厳しい時代になってくると思うんだけど


171 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 22:53:59.95 ]
>>170
今は普通にマルチスレッドの機能は
オブジェクト指向言語に搭載されてる。



172 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 23:20:47.45 ]
ストラウストラップのOOのキモは「抽象データ型にクラスを使うアイデア」。
ref. www2.research.att.com/~bs/whatis.pdf

ケイのOOのキモは「処理系のみならず、その受け皿であるナンチャッテOS、工程まで
ひっくるめたあらゆることで徹底した動的性」。
ref. metatoys.org/oxymoron/oxymoron.html

関数型のキモは「非破壊操作とそれがもたらす参照透明性」。

型推論とかメッセージとかパターンマッチとかはオマケです。偉い人には(ry

173 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 23:31:04.63 ]
>>170
分散したいならデータも共有しないのが基本なので
永続データの共有を推奨するのはおかしいと思う

174 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 23:41:08.58 ]
>>170
あんま最近は追いかけてないから知らないけど、
汎用手続き型+トランザクショナルメモリの研究はもう止めちゃったのかね。
デッドロックのみならず、例外処理もしやすくなるから期待していたんだけど。
トランザクションで思い出したけど、SQLは宣言的言語と言われてたはずだったんだけど、
今どきはストアドプロシージャとかも使うらしいね。

175 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 23:44:18.47 ]
結局欲しいのは副作用の管理

176 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 06:49:32.37 ]
>>161>>163
オブジェクト指向の何を取り入れたの?
Haskellのどの機能がオブジェクト指向由来なのか教えてくれ

177 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 06:55:00.27 ]
OOで見るべきところがあるのはメッセージング(徹底的な動的性)とtraitsのみ
他はゴミ

178 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 07:27:14.51 ]
OCaml のことを言ってるんじゃないのか?

あとジェネリックプログラミングとかは、中途半端に型があるオブジェクト指向系の
言語でやるより、がっちり型のある関数型言語でやったほうがいいし、ST モナド
使えば、本物の「状態のカプセル化」ができる。
関数型ではオブジェクト指向なんてできない、というのは初心者が陥りがちなデマ。

179 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 07:47:00.64 ]
そういや、関数型でOOPLでいう継承ってどんな形になるの?

180 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 08:04:22.67 ]
>>179
継承っぽいやつ>>93
プロトタイプOOっぽいやつ>>25

OCamlは普通にクラスも継承もあるので省略

181 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 08:24:34.70 ]
>>179
OCamlで高階ファンクター
F はモジュール X,Y を引数にして新しいモジュールを返す

module type S = sig end
module type T = sig end

module F (X : S) (Y : T) =
struct
  include X
  include Y
end



182 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 09:21:46.15 ]
やろうと思えばCでもできること
自然に書けるかなんだけどな

183 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 12:05:42.06 ]
不自然なものを自然にしたいという需要は確かにあるね
科学的に有害か無害かは関係なく、自然か不自然かだけで商売になる






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<255KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef