オブジェクト指向は愚かな考え。この世は計算式 ★3©2ch.net

2016/01/05(火) 02:10:25.72ID:hJUQcrkl
オブジェクト指向は愚かな考え。排便メソッドを実装した人間クラスから美少女クラスが作れない。
https://twitter.com/ProgrammingMono/status/665702678006140928

研究グループは、血管新生注において血管が伸長する際の血管内皮細胞注運動を制御するしくみを、生物学と数理モデル・
コンピュータシミュレーションを融合させた先端的な研究手法により明らかにしました。

生物は、最小の機能単位である細胞が寄り集まった多細胞体です。しかし、細胞の集まりが、組織や器官といった
秩序ある形態や構造をつくり機能するしくみはほとんど分かっていません。中でも血管は、体中の全組織に十分な
酸素や栄養源を効率よく供給するため、組織や組織の間に入り込み、血管外の環境との相互作用により、巧妙な
枝分かれ構造をとっています。

これまでに本研究グループは、新しく血管がつくられる(血管新生)際の細胞の動きに着目し、特に血管内皮細胞の
動きをリアルタイムで可視化し、定量的に捉えることを可能にしてきました。

今回さらに、血管の伸長を制御するしくみについて、細胞が自発的に自らを制御して動く過程(自律的過程)と、
隣接した細胞から適宜影響を受けて動く過程(協調的過程)がうまく共存することで、全体の動きが巧みに統制
されていることを世界に先駆けて実証しました。

興味深いことに、血管内皮細胞が前後したり、お互いに追い抜きあったりという血管新生で見られる複雑な細胞集団の
動きを制御している中枢部分は、細胞一つ一つの動き(スピードと方向性)の「確率的な変化」として十分説明できる
ことをコンピュータシミュレーションで実証しました。
http://www.jst.go.jp/pr/announce/20151120-2/#YOUGO3

前スレ
オブジェクト指向は愚かな考え。この世は計算式 ★2
http://peace.2ch.net/test/read.cgi/tech/1450153388/
2016/08/01(月) 20:14:16.64ID:NIKdUbwx
Squeak Smalltalk だと、こんな感じか?

Object subclass: #人間
  instanceVariableNames: 'もろもろ'
  classVariableNames: ''
  poolDictionaries: ''
  category: '美少女-排便'.

人間 compile: '排便 ^#便'.

Trait named: #美少女 uses: #() category: '美少女-排便'.

美少女 compile: '排便 self notify: ''トイレには行きません''. ^#プリン'.

おまえら := 人間 new.
おまえら 排便. "=> #便 "

橋本環奈 := 人間 new.
橋本環奈 assureUniClass class uses: 美少女.

橋本環奈 排便. "Warning: トイレには行きません => #プリン"
2016/08/01(月) 20:39:01.26ID:E1waX2Jm
>>531
> SmalltalkやSelfで書けば圧倒的に簡潔かつ明瞭に記述できる。

例えば、どのパターンが簡潔明瞭に記述できるの?
一番簡単なパターンでいいので書いてみて。

考えるのが面倒なら俺が出題しても良い?
Singletonは個人的につまらないので
そうだね、DecoratorはSmalltalkやSelfで書いたらどうなる?
2016/08/02(火) 00:07:55.94ID:6KXXOitA
>>534
試しにウィキペの Decorator パターン
https://ja.m.wikipedia.org/wiki/Decorator_パターン

にある例を Smalltalk で書いてみた
http://ideone.com/Y1WAxY

けど、圧倒的に簡潔になった感じはしないな
>>531 ならどんなふうに書く?
536デフォルトの名無しさん
垢版 |
2016/08/02(火) 00:11:39.50ID:xLK/JaT/
シングルトンなんて言語に最初から組み込んでおけ(Scala信者並感)
2016/08/02(火) 00:40:29.48ID:Aujbapgh
>>532
そもそもきみは継承関係=オブジェクト指向でしか発想してないから
クソ邪魔くさい継承取っ払ってモジュール自由に組み外しできるタイプの
オブジェクト指向の話にまったくついてこれてないからずっと嗤われてるわけで。
2016/08/02(火) 00:44:39.63ID:flPsn8Jo
>>535
別にDecoratorじゃなくていいんだけどね。
圧倒的に簡潔かつ明瞭に記述できるっていってるから
そのコードを見たいだけ。
2016/08/02(火) 05:55:14.53ID:wOSsX6OQ
デコレータパターンはそもそも静的に型がつけられることからくるクラス階層への制約を誤魔化すための小手先の技術でしかない。
型が完全に動的なSmalltalkやSelfではデコレータパターン自体が不要。
2016/08/02(火) 10:26:45.37ID:KjBiyzhL
型が動的だと>>535の例のようなコードはどうなるの?
2016/08/02(火) 10:29:15.63ID:YMxtX/GD
そそ
例えばアセンブリや機械語は制約がないからデコレータパターンとか要らないでしょ
それと同じでSmalltalkには何も必要ないよ
2016/08/02(火) 13:11:20.31ID:KCBRtMku
全然違うのだが。デコレータもSmallTalkも理解してないとみた。
2016/08/02(火) 13:40:40.79ID:C0zGukRC
アセンブリというかC言語だとこんな感じか。出来るには出来るけどちょっとねえ
http://codepad.org/XgRtJlQb
2016/08/02(火) 15:34:07.46ID:lROFhaXh
なにも知らなくても語れる。
それが Smalltalk のいいところらしい。
人間の悲しさがほの見えるな・・・
2016/08/02(火) 16:01:47.58ID:wOSsX6OQ
>>540
Smalltalkはよくわからないけど、
DoublePriceとかWholesalePriceとかいうクラスを増やすより、
元値から実売価格を計算するクロージャを持たせるんじゃないかなあ。
SmalltalkのPluggableMVCとかもクロージャで柔軟な変換を実装しているし。
2016/08/02(火) 16:53:22.92ID:I0xQlCpI
>>545
> 元値から実売価格を計算するクロージャを持たせるんじゃないかなあ。

こんなんでどうですかね?
http://ideone.com/d8iLSE

ついでにRuby版も書いてみた
http://ideone.com/WW8gva
2016/08/02(火) 17:16:35.65ID:I0xQlCpI
>>543
これだと Java 版でいうところの getValue() する前に
毎回、二倍にして 利益80乗せて、また二倍にしてもう一度 利益200乗せて…とかって
いちいち書かないと 840を返せないから、結果は合っているけど要求仕様を満たしていないような気がする
2016/08/02(火) 18:25:05.78ID:lROFhaXh
いつになったら、
人間クラスと美少女クラスの問題に辿りつけるのかね?
悲しいの〜。
2016/08/02(火) 20:24:15.92ID:wOSsX6OQ
>>548
とっくに解けてるじゃん
ばか?
2016/08/02(火) 20:30:55.27ID:lROFhaXh
どう解けてるんだよ。
人間の肛門と天使の肛門にコンポーネントするのか?
551デフォルトの名無しさん
垢版 |
2016/08/02(火) 20:41:47.88ID:UCo4tbLK
用途も分からず闇雲に現実世界をクラス化して行ったら、一生掛かっても終わらないから無駄な事すんな。
2016/08/02(火) 20:42:03.85ID:9rM4/wP9
美少女は偶像であり人間ではない
2016/08/02(火) 20:57:34.64ID:flPsn8Jo
もうそろそろいいかな?

みんな「デコレーターパターン」をどうするか?というテーマで
会話が成り立ってるよね?

つまりこういうことさ。デザインパターンっていうのは用語。
実装じゃない。

デコレーターパターンをJavaならこう書く、SmallTalkならこう書くと
いうふうに共通認識ができてる。これこそデザインパターンの有用な所。

だからコードの書き方が決まってるわけじゃないんだよ。
設計だからね。言語が決まらない状態であっても話はできる。

デザインパターンをどういうふうに書くかってのは例でしか無いんだよ。
目的を達成できるならどう書くてもいいし、デコレータパターンを
どう書いてもそれはデコレータパターンなのさ。

SmallTalkであってもデコレーターパターンっていうのは存在する。
だからこそSmallTalkでデコレータパターンをシンプルに書くことができる!と
主張できる。
2016/08/02(火) 21:16:53.04ID:LOKS06K+
>>553
なんでみんなより二歩も三歩も手前な意見を
そんな長文で書き込めるの?
2016/08/02(火) 21:20:29.76ID:flPsn8Jo
>>554
言いたいことはそれだけかw
2016/08/02(火) 21:22:05.73ID:LOKS06K+
ごめんね
2016/08/02(火) 21:24:18.11ID:e9gYPknx
Smalltalk の t を大文字で書くやつは無知か知ったかぶり
2016/08/02(火) 21:24:35.32ID:lROFhaXh
実は誰も Smalltalk なんて知らない www
2016/08/02(火) 21:27:22.36ID:flPsn8Jo
反論あるなら待ってるよw
2016/08/02(火) 21:32:29.72ID:LOKS06K+
>>557
ワロタw
561デフォルトの名無しさん
垢版 |
2016/08/02(火) 21:38:39.55ID:UCo4tbLK
言語は関係無いと言う内容の話への反論が、言語名のミスプリントの指摘とか、レベル低過ぎだろw
小学生の負け惜しみかよw
2016/08/02(火) 21:39:26.48ID:flPsn8Jo
>>561
え?それ反論だと思ってたの?
反論はまだ一つも来てませんよw
563デフォルトの名無しさん
垢版 |
2016/08/02(火) 21:40:28.47ID:UCo4tbLK
うゎw
保育園だなここはw
2016/08/02(火) 21:47:57.27ID:6KXXOitA
>>561
「プリント」とかまさに小並
2016/08/02(火) 22:08:58.16ID:e9gYPknx
>>553
>>538で「見たいだけ」って言ってるところをみると、これは反語で
>>546みたいに簡潔なのが出てくるとはこの時点では考えてなかったんじゃない?
だからデザパタは用語で実装じゃない、言語は関係ないって趣旨替えしたように読むのは穿ちすぎ?
2016/08/02(火) 22:14:56.76ID:flPsn8Jo
>>565
いやw
最初からこのために、
デコレータパターンをSmallTalkで書いたらどうなるの?って
話題を振って会話をさせたんだよ。

デコレータパターンという共通知識があり、
SmallTalkでそれを実装することができるという会話をね。

もし実装が決まっているものであれば、
SmallTalkでデコレータパターンを実装すれば
シンプルな形で実装できるんだっていう話はでてこない。
2016/08/02(火) 22:27:10.71ID:KCBRtMku
そもそもC++でデコレーターでもそんな難しくないでしょw
シングルトンの方がよっぽどややこしい。
2016/08/02(火) 22:30:18.68ID:flPsn8Jo
「シングルトン」だけで話が通じる所がデザインパターンの
便利なところだね。

さてシングルトンにもいろんな実装があるけど、
DIコンテナを使ってシングルトンに見せるっていう方法もあるよね。
これだと普通にクラスを作るだけで良くなる。
2016/08/02(火) 22:34:48.24ID:qU1dasmj
兄さん、そこでPythonですよ
ですしおすし
2016/08/02(火) 23:26:19.20ID:QqIbwu4d
Java8ならもっとHENTAIなコードが書けるぞ
http://ideone.com/DbIiD0
2016/08/02(火) 23:41:10.66ID:6KXXOitA
>>570
>>547
2016/08/02(火) 23:59:46.02ID:lROFhaXh
Smalltalk の最大の魅力は、
それが雑談に過ぎないということである。
by アラン・ケイ
2016/08/03(水) 00:45:18.40ID:qJ0ntPw4
>>570
new Price((120*2+80)*2+200) を作りたいわけではなくて
new Price(120) をデコって 840 を返させるのが Decorator
だからデコったあとに setValue(100) してから getValue() すると 760 が返るはず
http://ideone.com/Z24LFA
http://ideone.com/Diod1I
http://ideone.com/x2goNr
http://ideone.com/do6fT9
2016/08/03(水) 11:21:17.97ID:nNt8IZmK
>>566
まるでちがう。>>546はデコレータパターンじゃない。
Javaではデコレータパターンを使う問題を
デコレータパターンを使わずにより簡潔に記述した例。
2016/08/03(水) 12:45:10.82ID:XBNCNfrP
>>539
型が動的だと>>535の例のようなコードはどうなるの?
2016/08/03(水) 15:55:24.00ID:8J75MUHP
SmallTalkとか
2016/08/03(水) 17:09:10.94ID:R0iPm5qU
関数型インターフェースの方が簡潔になる
http://ideone.com/6MAwKM

>>573
setValue(100)してからgetValueしたら100返らなきゃバグってるだろ
setOriginalValueとかに修正するところだな
2016/08/03(水) 18:07:08.01ID:8J75MUHP
Wikipediaにある
> Decorator パターンの方針は、既存のオブジェクトを新しい Decorator オブジェクトでラップすることである。
がわかってない奴がいるな
2016/08/03(水) 18:17:54.35ID:qhbdc1zB
デザパタの目的とされがちであるが
常に失敗しているのが語彙の共有

いつでもつねに認識がバラバラw
2016/08/03(水) 18:21:38.71ID:8J75MUHP
>>579
ごく一部の人間が正しく理解できてないだけで、
> いつでもつねに認識がバラバラw
は言い過ぎ
2016/08/03(水) 18:45:37.19ID:9oohU77o
>>577
> 関数型インターフェースの方が簡潔になる

そんなんでいいなら Smalltalk でも簡潔に書けるけどね

http://ideone.com/RZHQ7P
2016/08/03(水) 19:57:46.85ID:N9MmOijn
Smalltalkに意味なんかないよ
登場してから30年とか40年とか経ってるのに
誰も現場で使ってない言語だからね
40年という歳月は結論を出すのに十分な時間だと思うよ
これから先もずっと使われないだろう
こんな言語についてあれこれ考えるのは時間の無駄だよ
御幣を恐れずに言うと、Smalltalkは間違っている、机上の空論
本当によくできていたなら、もうちょっとぐらい使われていてもおかしくない
少なくともRuby程度ぐらいには使われてないと話にならない
Smalltalkは実用にならないスジの悪い言語だということ
583デフォルトの名無しさん
垢版 |
2016/08/03(水) 20:22:04.47ID:M+rE/wd/
Smalltalkは言語だけじゃダメで。
windows上では使い物にならないから仕方無い。
584デフォルトの名無しさん
垢版 |
2016/08/03(水) 20:23:22.86ID:M+rE/wd/
要するに、windows自体がオブジェクト指向に向いてないんだよ。
2016/08/03(水) 20:29:26.00ID:1jcdD/Xi
結論。
誰も Smalltalk なんて知らない www
2016/08/03(水) 20:32:04.15ID:N9MmOijn
それは関係ない
なぜなら概念上の問題より運用上の問題のほうが大事だから
いくら概念的な素晴らしさを語ったところで
まともに運用できないならゴミ
使えない
2016/08/03(水) 20:45:27.46ID:YtpqVXv4
>>574
> Javaではデコレータパターンを使う問題を
> デコレータパターンを使わずにより簡潔に記述した例。

お前は勘違いしているな。

デコレータパターンを実装しなさいというお題なんだから
それがデコレータパターンなんだよ。

Javaならこういう実装でやるが、他の言語では
その実装方法が違うだけ。
2016/08/03(水) 21:24:23.35ID:TE6NppPB
>>582
まあ仮にSmalltalkが本当に誰も使ってなくて
処理系も失われたり、あるいは as-is で放置された言語だとしたら
そんなものに意味がないって意見は全くもって正しいよね
2016/08/03(水) 21:37:23.40ID:46yxFVyN
シングルトンやアイテレーターなどは時代が変わっても重要だろうけど、
デコレーターは継承関係への依存度が高いから微妙だな。
2016/08/03(水) 22:46:55.08ID:PwtoF+FA
>>583
Smalltalkは独自のGUIもそうだけれども、もうひとつ、通常のセルフホスティング
(自身で自身を記述)にとどまらず、処理系を構成する実行時オブジェクト群を
仮想イメージと呼ばれる、ある種のオブジェクトストアに永続化して次回起動時も
継続利用する運用スタイルも毛嫌いされるよね。個人的には示唆に富んでいて好きなんだけど
2016/08/04(木) 00:17:31.35ID:iDV12Qqy
>>587
いや?
クロージャで実装しているのだから、デコレータパターンによる実装ではないよ。
コード読めない子?
2016/08/04(木) 00:19:01.73ID:jTAWnEUa
> クロージャで実装しているのだから、

クロージャで "何を" 実装しているの?
2016/08/04(木) 00:24:24.39ID:ClPuKc3B
デコレータパターンを実装できてはいないんだよw

これでわかった?w
2016/08/04(木) 00:25:35.63ID:jTAWnEUa
いや、何を実装したのかを聞いたんだが?
実装したものは何?
2016/08/04(木) 00:30:18.03ID:ynLXOlFE
>>590
あのあたりはむしろメモリや記憶装置いくらでも使える現代向けというか
過去にオブジェクト指向の要素をちょっとだけ輸入してみた中途半端なオブジェクト指向言語が次々出ては滅びの興亡続けてたのは
"コンパイル後のサイズが大きいじゃないか"とかいまじゃヘソが茶を沸かすような理由がメインなわけだし。
2016/08/04(木) 00:31:24.04ID:w6fnMNqO
デコレータパターンと同等の機能をクロージャで実装した
じゃね?

同等の機能を持った違った実装があるのは当たり前じゃね?
デコレータパターンと同じような機能をもたらすけど
デコレータパターンじゃない実装は普通にあり得るんじゃね?
2016/08/04(木) 00:34:51.00ID:jTAWnEUa
>>595
パターンは機能じゃないよ。設計。
デコレータパターンという設計

この設計の実装はいろいろある。
決まっていない。

Javaだったらクラスで実装し
クロージャーでも実装できるってだけの話。
2016/08/04(木) 00:36:04.52ID:jTAWnEUa
wikipediaにすら書いてあるしw

https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3_(%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2)

デザインパターンは、よく使われる設計を一般化された形でまとめたものに過ぎない。
そのため、具体的な実装を提供するものではなく、
あくまでもコンセプトとして参照されることが意図されている。
つまり、サンプルコードは、実装例に過ぎない。
2016/08/04(木) 00:42:01.96ID:w6fnMNqO
>パターンは機能じゃないよ。設計。

それで、その設計パターンとは合致しないけど
同等の機能や目的を満たす他の設計はあり得る
ってことでしょ?
俺の言ってることと一緒だね
2016/08/04(木) 00:44:00.26ID:fESKb5E9
ID:jTAWnEUaを教育してあげる義務は我々には無い
2016/08/04(木) 00:45:06.02ID:jTAWnEUa
>>599
わざわざ複雑にしないでいいよw

やりたいことがある。
でも説明するのが面倒くさい。

じゃあ「デコレーターパターン」と呼びましょう。

これで話は通じてるじゃん。
だからこれだけの情報でコードを書くことができる。

そのデコレーターパターンを
クロージャーで実装したんでしょ?
そういえば良いんだよ。
2016/08/04(木) 00:48:34.94ID:jTAWnEUa
>>600
じゃあ一緒に勉強していきましょう(笑)

http://www.techscore.com/tech/DesignPattern/foundation/foundation1.html/#dp0-2

> 前章でも説明したとおり、デザインパターンとは、「よく出会う問題とそれにうまく対処するための設計」を
> まとめたものです。 デザインパターンを利用するメリットとして、最初にあげられるのが、
> 「再利用性の高い柔軟な設計ができる」という点です。各パターンには、多くの知恵が凝縮されています。
> これまでは、設計者の直感や経験などに依存していた設計が、デザインパターンを導入することで、
> 初心者でも先人たちが詰め込んだ「知恵」を利用した設計をすることが可能となります。
> また、先人たちの知恵を参考にすることで、設計力の向上も期待できます。
>
> 次のメリットは、「技術者どうしの意思疎通が容易になる」ことが挙げられます。
> デザインパターンを習得している技術者どうしであれば、設計について相談するとき
> 「Singleton パターンで行きましょう」とか「Strategy パターンが応用できるのではないでしょうか」と
> いうようにパターン名で設計の概要の合意を取ることが可能です。デザインパターンを
> 習得していない技術者には「こんなクラスを作って、このクラスはこんな役割を持っていて・・・。」と
> 延々と説明しなければなりません。このように、デザインパターンを学習しておくことで
> 開発者どうしの意思疎通がスムースになるのです。

あなたは何で勉強していますか?
2016/08/04(木) 01:13:23.05ID:w6fnMNqO
話をややこしくしているのはあなたです

>パターンは機能じゃないよ。設計。

↑これは君が言ったことだよね

その上で俺は、同等の機能を持った、違ったデザインなんじゃね?って言ってるわけ

機能が同じであっても、同じデザインパターンとは限らない
何故なら、デザインパターンは機能じゃないから、設計のパターンだから
↑君の言ってることと全く同じだよね

だから同じ機能だけど、違った設計パターンであり
同じデザインパターンに属さない設計は有る
ということを君は認めているということ
2016/08/04(木) 01:43:58.02ID:w6fnMNqO
デザインパターンは機能では無く、よくある設計パターンに名前を付けたもの
ってのは正に君が自分で言ったことであって
それは俺も了承している

だから同じ機能であっても、それだけで同じデザインパターンとは言えないよね
と俺は言ってるわけ
なぜならデザインパターンは機能では無いから(君の言ったことだよね)

そもそも俺とお前とのやり取りに、何のとどこおりも無い
俺は、>>596で同等の機能を別の設計で実装したんじゃないか、と言い
お前は>>597でデザインパターンの分類は機能で決まるものではなく設計で決まる、と言っている
合わせると、「同等の機能であっても同じデザインパターンであるとは限らない、設計で決まる」
という結論が得られる
2016/08/04(木) 01:56:34.90ID:tMKvO+zV
デコレータパターンの解決できる問題領域は他の(オブジェクト指向でない)方法でもっと簡潔に書ける、のはいいだろうか。

これと同じことが他のデザインパターンでもできるんじゃね?という主張だったと思うんだが。

Singletonは言語によって容易に達成できるものもあればそうでない言語もあるが、そう難しくは無いはず。
OCamlだったらmutable valueを持ったモジュール使えば同等のことが実現できる。
Adapterパターンも変更できない物がオブジェクトだったら関数1つで済むし、
モジュールだったらファンクタ使えば良い。

これを続けていけばデザインパターンがOOPの表現力の低さを解決する妥協案である、と示せる気がするが、
逆にOOPでデザパタ使うのが一番簡潔になる問題を探す方が難しいかもね。
2016/08/04(木) 03:16:53.36ID:jTAWnEUa
やっぱりデザインパターンを
実装パターンと勘違いしているとしか思えないな。

まず大前提としてデザインパターンに言語は関係ない。
だから言語は関係なく設計の話、
オブジェクト指向での設計の話を考える。

そうするとそこにデザインパターンが出てくる
ここまでで言語の話は出てこないから
当然実装の話もでてこないんだよ。
2016/08/04(木) 03:18:24.28ID:jTAWnEUa
OOPじゃなくてC言語でも当てはまる話だよね。
シングルトンやデコレータなどは。

C言語であってもオブジェクト指向で設計していれば
自然とデザインパターンは出てくる。
2016/08/04(木) 06:27:25.67ID:iDV12Qqy
>>605
だから、GoFはSmalltalkなら簡単に記述できる構造や機能を
JavaやC++の表現力で解決する妥協案を集めたものなの。

JavaやC++の表現能力や抽象度が低いことを勝手にOOPの表現能力の低さにすり替えるな。
2016/08/04(木) 09:14:32.03ID:jTAWnEUa
>>608
それはオレオレ定義ですよね。
2016/08/04(木) 09:31:36.26ID:0aO0sFCL
デザパタの実装はいろいろあっていいし、言語によって簡単に書けたりそもそも必要なかったりもする。


「オブジェクト指向における再利用のためのデザインパターン」←GoFのデザパタ提唱本ね。念のため。

プログラミング言語の選択は重要である。なぜなら、どの言語を使うかによってどのような観点でデ
ザインパターンをまとめるかが違ってくるからである。我々のパターンはSmalltalk/C+十レベルの言
語形態を想定している。その選択によって、容易に実現できることとできないことが決まる。たとえば、
もし、我々が手続き型言語を想定していれば、Inheritance(継承)、Encapsuladon(カプセル化)、
Polymorphism(ポリモルフィズム)といったデザインパターンを組み入れたであろう。また、我々のパタ
ーンの中には、あまリー般的でない言語によって直接サポートされているものもある。たとえば、CLOS
はマルチメソッドを有しているので、Visitorパターン(P.53)のようなパターンは必要性がなくなるの
である。実際のところ、SmalltalkとC十+の間にも違いがあり、どちらの言語を使うとより簡単に表現
できるかは、パターンによっても違ってくる(例としては、Iteratorパターン(P.275)を参照)。
611デフォルトの名無しさん
垢版 |
2016/08/04(木) 09:33:28.01ID:IwXa2U8x
内容を理解してないから例にある記述方法しか受け付けないんだよ。
2016/08/04(木) 09:33:48.07ID:jTAWnEUa
> だから、GoFはSmalltalkなら簡単に記述できる構造や機能を
> JavaやC++の表現力で解決する妥協案を集めたものなの。

じゃあなんでこんな本が存在するんですか?w

Rubyによるデザインパターン-Russ-Olsen/
https://www.amazon.co.jp/dp/4894712857

JavaScriptデザインパターン
https://www.oreilly.co.jp/books/9784873116181/

The Design Patterns Smalltalk Companion
https://www.amazon.com/dp/0201184621
2016/08/04(木) 09:34:24.97ID:0aO0sFCL
>>610
あ。引用部分は自炊本の OCR のコピペなんで、タイポは脳内補完ねがいます。
2016/08/04(木) 09:35:44.09ID:0aO0sFCL
>>612
GoF も「Smalltalk では簡単に記述できるものもある」とは言っているけど、
ぜんぶがぜんぶとは言っていないよね。
615デフォルトの名無しさん
垢版 |
2016/08/04(木) 09:35:54.66ID:IwXa2U8x
>>612
おまいみたいなバカに本を売り付ける為だろw
2016/08/04(木) 09:38:22.54ID:jTAWnEUa
>>615
え?捨て台詞?w
2016/08/04(木) 10:07:48.33ID:e/09ny1R
これはまさに捨て台詞で十分な一例。
2016/08/04(木) 10:14:03.24ID:0aO0sFCL
> だから、GoFはSmalltalkなら簡単に記述できる構造や機能を
> JavaやC++の表現力で解決する妥協案を集めたものなの。

Smalltalkを好意的にとらえて持ち上げてくれるのは、狭い視野で意味なし認定しちゃう人たちよりは
ファンとしてはありがたいけど、これはさすがにオーバーエスティメートだし、
もうちょっとSmalltalkならではのアドバンテージを学んでから、適切な持ち上げ方をしてほしい…
2016/08/04(木) 10:47:43.12ID:iDV12Qqy
「GoFは、」と、「デザインパターンは、」の区別がつかない人たちと技術を語るのは非常に困難である。
2016/08/04(木) 11:37:47.99ID:0aO0sFCL
>>619

もしそうだとしても、少なくとも>>591は「GoFの(デコレーター)」と明記すべきですよね
2016/08/04(木) 12:27:01.14ID:CY/jwgqy
smalltalkって簡単に色々できるんでしょ?
なんで現代でメジャーじゃないの?
622デフォルトの名無しさん
垢版 |
2016/08/04(木) 12:30:59.74ID:IwXa2U8x
日本語の方が優れてるのに、世界じゃ日本人しか使ってないだろ?
2016/08/04(木) 12:31:27.57ID:79cTVfxr
MSがVisual Smalltalkをつくらなかったから
2016/08/04(木) 12:57:32.53ID:iDV12Qqy
>>620
GoFの定義如何に関わらず、>>546はデコレータパターンの実装ではないのだが?
2016/08/04(木) 13:05:00.50ID:rDDGHvQu
はやく、
人間クラスと美少女クラスの問題に
たどり着いてくれよ。
2016/08/04(木) 13:16:23.28ID:0aO0sFCL
>>624
だとするとちょっと分からないのですが、
あなたの言う「Smalltalkなら簡単に記述できる構造や機能」で実現された
デコレーターパターン(GoFの定義如何に関わらない)というのを提示してもらうことはできますか?
Smalltalk は書けないということでしたら、端的に方針だけ示してもらえればこちらで書きますので。

そもそも Smalltalk ではデコレーターパターンが不要(なので、実装はナンセンス)とのお考えでしたら
代替として Smalltalk 組み込みのどういう構造や機能を使うかを示してもらえればさいわいです。
2016/08/04(木) 14:01:27.52ID:gwNa+xfa
つか、>>546のruby版って一体何?
デコレータパターンのつもり?
2016/08/04(木) 14:13:24.61ID:0aO0sFCL
>>627
自分にはウィキペのデコレーターにあるJavaの例の要求仕様は満たしているように見えるけど。
具体的にはどこが不満?
2016/08/04(木) 14:41:37.79ID:gwNa+xfa
>>628
あ、デコレータパターンの実装だったんだ。
同じ感じでこれ実装できる?
class Log
def output(s)
puts s
end
end

class TimeStampLog
def initialize(log)
@log = log
end

def output(s)
@log.output "#{Time.now} #{s}"
end
end

class PidLog
def initialize(log)
@log = log
@pid = Process.pid
end

def output(s)
@log.output "[#{@pid}] #{s}"
end
end
2016/08/04(木) 14:42:24.41ID:gwNa+xfa
log = TimeStampLog.new(PidLog.new(Log.new))
log.output 'aaa'
log.output 'bbb'

log2 = PidLog.new(TimeStampLog.new(Log.new))
log2.output 'aaa'
log2.output 'bbb'

結果:
[24968] 2016-08-04 14:41:58 +0900 aaa
[24968] 2016-08-04 14:41:58 +0900 bbb
2016-08-04 14:41:58 +0900 [24968] aaa
2016-08-04 14:41:58 +0900 [24968] bbb
2016/08/04(木) 16:18:58.29ID:0aO0sFCL
>>629

これでいい?

http://ideone.com/WGTiOD
2016/08/04(木) 16:59:33.41ID:gwNa+xfa
>>631
なんか実装手段が違ってきてますが・・・。

>>546のruby版はいったいどういう意図なのかが知りたいんだけど。
「rubyでclosureを使えばデコレータパターン同等のことができる」とか、そういう「意図」。
2016/08/04(木) 17:09:10.90ID:0aO0sFCL
>>632
> なんか実装手段が違ってきてますが・・・。

本質部分は変えてないでしょ
変えたのも、クラスを直にいじるか、モジュールをprependするかくらいなもので


> closureを使えばデコレータパターン同等のことができる

>>540,545,546 の流れで、件のコードにそれ以外の意図を思いつくなら逆に聞きたい
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。