- オブジェクト指向は愚かな考え。この世は計算式 ★3©2ch.net
610 :デフォルトの名無しさん[sage]:2016/08/04(木) 09:31:36.26 ID:0aO0sFCL - デザパタの実装はいろいろあっていいし、言語によって簡単に書けたりそもそも必要なかったりもする。
「オブジェクト指向における再利用のためのデザインパターン」←GoFのデザパタ提唱本ね。念のため。 プログラミング言語の選択は重要である。なぜなら、どの言語を使うかによってどのような観点でデ ザインパターンをまとめるかが違ってくるからである。我々のパターンはSmalltalk/C+十レベルの言 語形態を想定している。その選択によって、容易に実現できることとできないことが決まる。たとえば、 もし、我々が手続き型言語を想定していれば、Inheritance(継承)、Encapsuladon(カプセル化)、 Polymorphism(ポリモルフィズム)といったデザインパターンを組み入れたであろう。また、我々のパタ ーンの中には、あまリー般的でない言語によって直接サポートされているものもある。たとえば、CLOS はマルチメソッドを有しているので、Visitorパターン(P.53)のようなパターンは必要性がなくなるの である。実際のところ、SmalltalkとC十+の間にも違いがあり、どちらの言語を使うとより簡単に表現 できるかは、パターンによっても違ってくる(例としては、Iteratorパターン(P.275)を参照)。
|
- オブジェクト指向は愚かな考え。この世は計算式 ★3©2ch.net
613 :デフォルトの名無しさん[sage]:2016/08/04(木) 09:34:24.97 ID:0aO0sFCL - >>610
あ。引用部分は自炊本の OCR のコピペなんで、タイポは脳内補完ねがいます。
|
- オブジェクト指向は愚かな考え。この世は計算式 ★3©2ch.net
614 :デフォルトの名無しさん[sage]:2016/08/04(木) 09:35:44.09 ID:0aO0sFCL - >>612
GoF も「Smalltalk では簡単に記述できるものもある」とは言っているけど、 ぜんぶがぜんぶとは言っていないよね。
|
- オブジェクト指向は愚かな考え。この世は計算式 ★3©2ch.net
618 :デフォルトの名無しさん[sage]:2016/08/04(木) 10:14:03.24 ID:0aO0sFCL - > だから、GoFはSmalltalkなら簡単に記述できる構造や機能を
> JavaやC++の表現力で解決する妥協案を集めたものなの。 Smalltalkを好意的にとらえて持ち上げてくれるのは、狭い視野で意味なし認定しちゃう人たちよりは ファンとしてはありがたいけど、これはさすがにオーバーエスティメートだし、 もうちょっとSmalltalkならではのアドバンテージを学んでから、適切な持ち上げ方をしてほしい…
|
- オブジェクト指向は愚かな考え。この世は計算式 ★3©2ch.net
620 :デフォルトの名無しさん[sage]:2016/08/04(木) 11:37:47.99 ID:0aO0sFCL - >>619
もしそうだとしても、少なくとも>>591は「GoFの(デコレーター)」と明記すべきですよね
|
- オブジェクト指向は愚かな考え。この世は計算式 ★3©2ch.net
626 :デフォルトの名無しさん[sage]:2016/08/04(木) 13:16:23.28 ID:0aO0sFCL - >>624
だとするとちょっと分からないのですが、 あなたの言う「Smalltalkなら簡単に記述できる構造や機能」で実現された デコレーターパターン(GoFの定義如何に関わらない)というのを提示してもらうことはできますか? Smalltalk は書けないということでしたら、端的に方針だけ示してもらえればこちらで書きますので。 そもそも Smalltalk ではデコレーターパターンが不要(なので、実装はナンセンス)とのお考えでしたら 代替として Smalltalk 組み込みのどういう構造や機能を使うかを示してもらえればさいわいです。
|
- オブジェクト指向は愚かな考え。この世は計算式 ★3©2ch.net
628 :デフォルトの名無しさん[sage]:2016/08/04(木) 14:13:24.61 ID:0aO0sFCL - >>627
自分にはウィキペのデコレーターにあるJavaの例の要求仕様は満たしているように見えるけど。 具体的にはどこが不満?
|
- オブジェクト指向は愚かな考え。この世は計算式 ★3©2ch.net
631 :デフォルトの名無しさん[sage]:2016/08/04(木) 16:18:58.29 ID:0aO0sFCL - >>629
これでいい? http://ideone.com/WGTiOD
|
- オブジェクト指向は愚かな考え。この世は計算式 ★3©2ch.net
633 :デフォルトの名無しさん[sage]:2016/08/04(木) 17:09:10.90 ID:0aO0sFCL - >>632
> なんか実装手段が違ってきてますが・・・。 本質部分は変えてないでしょ 変えたのも、クラスを直にいじるか、モジュールをprependするかくらいなもので > closureを使えばデコレータパターン同等のことができる >>540,545,546 の流れで、件のコードにそれ以外の意図を思いつくなら逆に聞きたい
|
- オブジェクト指向は愚かな考え。この世は計算式 ★3©2ch.net
636 :デフォルトの名無しさん[sage]:2016/08/04(木) 18:33:42.23 ID:0aO0sFCL - >>634
> 一方、>>546のコードだとそうはいかない。 単純に、ideone.com/WW8gva はデコレートをテストにハードコードしているからそうなるってだけで http://ideone.com/HOkUN1 というふうに書いておけば、デコレーターの振る舞いを変えたければ それを定義した decorate_price.rb だけを変えれば、decorate_price_test.rb は変更不要でしょう。
|
- オブジェクト指向は愚かな考え。この世は計算式 ★3©2ch.net
637 :デフォルトの名無しさん[sage]:2016/08/04(木) 18:57:12.60 ID:0aO0sFCL - >>635
なるほど。たしかにおっしゃるとおりです。的外れなことを言ってすみません。
|
- オブジェクト指向は愚かな考え。この世は計算式 ★3©2ch.net
639 :デフォルトの名無しさん[sage]:2016/08/04(木) 19:27:18.45 ID:0aO0sFCL - >>638
Smalltalk と C++ との比較で? それならもちろん Smalltalk です。 (同書P.289より) Smalltalkではiteratorを明示的に定義する必要はない。標準的なコレクションクラス(Bag、 Set、Dictionary、OrderedCollection、Stringなど)で、内部iteratorのメソッドdo:を定義してい るからである。do:はブロック(つまり、closure)を引数としてとる。 (標準的なコレクションクラスの例になぜか名前がありませんが当然Arrayも含みます。念のため。)
|
- オブジェクト指向は愚かな考え。この世は計算式 ★3©2ch.net
643 :デフォルトの名無しさん[sage]:2016/08/04(木) 20:37:49.54 ID:0aO0sFCL - >>640
Smalltalkが特別ってことにはならないという点については同意します。 ただ、クロージャーを引数にとる内部イテレーターはとても簡潔な記述を可能にするので C++がSTLを介してイテレーターが組み込みであっても、記述の負担の軽さはSmalltalk方式の方が優位かとも とはいえ、C++のコードがどんな感じになるかははずかしながら当方ちょっと予想が付きかねますので、 もし可能でしたら、C++のSTLを使って書いてSmalltalkのと比較をさせてもらうことはできますか? あいにくウィキペにはIteratorの例はないので、こちらの比較的シンプルなJavaの例を http://qiita.com/jonichonpa/items/208dc2361414f93efacf Smalltalkで書いてみました http://ideone.com/oplhQu もちろんSmalltalk方式を採用した言語(たとえばRuby)なら、Smalltalkと同程度にシンプルに書くことはできます そんなわけでRuby版も念のため http://ideone.com/xlQZqc
|