貴様ら!オブジェクト指向を教えろ!!第2章
■ このスレッドは過去ログ倉庫に格納されています
0001Java太郎 ◆RxE.qPfLG2
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1047696495/l50
0153デフォルトの名無しさん
NGNGこういう人、いるね。
0154デフォルトの名無しさん
NGNG0155デフォルトの名無しさん
NGNG具象的なロジックのクラスと、もっと概念的な抽象レベルのクラスの話だよ。
自動車クラスでも、ガソリン自動車と電気自動車とじゃ、制御系はまったく違う。
エンジンやモーターやガソリンタンクやバッテリーのクラスは、
それゃちがうよ。
でも、ハンドルやアクセルと言うメソッドは、どちらの自動車でも
変わりない。
エンジンを突っ込むか電気モーターを突っ込むかは考えずに、自動車
クラスを設計・テストすることはできる。
0156デフォルトの名無しさん
NGNGと説明しても、わかんねーんだよな。
0157デフォルトの名無しさん
NGNGガソリン・エンジンにするのか、モーターの配線はどうするのか、
蒸気機関の燃料はどうするのかは関係のない話だから。
0158デフォルトの名無しさん
NGNGクラスになっちゃうからね。
0159デフォルトの名無しさん
NGNG自動車クラスっていう大きい単位のクラスを出しただけで、
それだけで設計できました、とは普通言えないよね。
抽象化のレベルにも色々あるはずで、もう少しそれをブレークダウンして
考えた方がいい場合もあるはず。
ものすごく複雑なロジックならば、それを起点にして抽象化して、
オブジェクト指向設計やってもいいと思うんだがな。
0160159
NGNG×ものすごく複雑なロジックならば、それを起点にして抽象化して、
オブジェクト指向設計やってもいいと思うんだがな。
○ものすごく複雑なロジックならば、ロジックレベルでの
オブジェクト指向設計というものがあるはずでは。
0161デフォルトの名無しさん
NGNGインターフェースと方式とをごっちゃにしちゃいけないですね。
それはそれ、これはこれで設計する。
※ それ->自動車クラス、これ->ロジック
0162デフォルトの名無しさん
NGNGうん、ロジック・レベルで OO 設計したら、ロジックを見えなくするような
クラスにラップする。
どうすればそのクラスを使えるかだけわかるようにして、そのクラスが
どうやっているかは関係がなくなるようにしておく。
0163山崎渉
NGNG( ^^ )< ぬるぽ(^^)
0164デフォルトの名無しさん
NGNGしたがって設計してもいい。
そのままだと、外部からの取り扱い、メソッドが異なってしまう。
でも、最終的には、アクセルを踏み込まれるとより速く回るというように
扱えるように、インターフェースが統一されていればいい。
そのクラスが、アクセルを踏み込むほど、より速く回転する、ということだけ
を知っていれば扱えるようにしておけばいい。
0165デフォルトの名無しさん
NGNGもしくは、最小限の変更ですむようにする。
0166動画直リン
NGNG0167デフォルトの名無しさん
NGNGmd.pushAccelPedal(10); // どうやっているかは知らない
と、
MotiveDevice md = new ElecMotor;
md.pushAccelPedal(10); // どうやっているかは知らない
とが、同じ動作をすればいい。
0168デフォルトの名無しさん
NGNGこらまた極論だなぁ
(デザイン)パターンは、あくまで技のコレクションでしかないよ。
柔道の『大外刈り』『一本背負い』とかとおんなじ。
GoFのデザインパターンは、C++を使用するときに『ライブラリで強制できないルール』を
『デザインパターンというマニュアル』でルール付けしているわけだ。
ただ、デザインパターンというマニュアルを強制する『仕様(C++言語の支援)が存在しない』
ので、良くわかっていないユーザー(プログラマ)が間違えて実装してしまうこともあるわけだ。
そりゃあ、相手が腰を引いている状態で『大外刈り』をしようとしてもうまくいくはずがない。
『技』は知っているだけではダメで、十分に練習して(経験をつんで)『身につける』ことが
とても重要だからね。
なぜか『デザインパターンを知ればすぐにプログラムの腕前が向上する』と思っている人が
多いけれど、パターンそのものはただの骨格でしかないので(しかも凄い曖昧な)、
そのままじゃ不完全なんだけどなぁ。
これはチームでのプログラムミングでも同様で、『チームプレイで』技の練習を行い
(経験を積み)身につけなくては使いこなせない。しかし使いこなせるようになると
チームのスキルが向上する->作れるプログラムの幅が広がる。
軍隊なんかその典型だよね。
で結論。デザインパターンという『考え方』は有用。しかし、デザインパターンの個々の
『技』については、(非常に限られた状況でないと)有用でないものも存在する。
そしてデザインパターンはあくまで『手段』でしかないので、有効に用いるためには
経験を積んで身につける必要がある。
といった所かな?
#GoFのデザインパターンはC++でだからオブジェクト指向を使っているけど、
#(デザイン)パターンという考え方の本質はオブジェクト指向じゃ無いと思う。
#そもそも建築用語だし。
0169デフォルトの名無しさん
NGNGその考えがいまの時代にあわんというに。
0170デフォルトの名無しさん
NGNGデザパタはただひたすらヘタクソなだけなんだが。
0171デフォルトの名無しさん
NGNG下手なら練習すればいい。
0172デフォルトの名無しさん
NGNG合うか合わないか知らないが、ガタガタ言わずにとにかく習得する
努力をしているやつからいい仕事ができるようになってくる。
0173デフォルトの名無しさん
NGNG漏れもそうおもう。会社は社員を『交換可能な部品』にしたがっているから、
職人なんてウザイだけなんだろうなぁ
デザインパターンというかたちで概念が固定化されると、今度は
ライブラリ/コンパイラ実装者がその概念を実装して扱いやすく
なるんじゃない?
BoostとかLokiみたいにさ。あるいはRubyとか……(他のは知らん)
0174デフォルトの名無しさん
NGNG0175デフォルトの名無しさん
NGNG勝手にすれば。笑
これだけはいっとくけどデザパタはオブジェクト指向ができない人が作ったものだ。
間違いなく。
0176デフォルトの名無しさん
NGNG0178デフォルトの名無しさん
NGNG0179デフォルトの名無しさん
NGNG0180デフォルトの名無しさん
NGNGなんかの記事の受け売りか。
0181デフォルトの名無しさん
NGNGああなっているんだよ。
0182デフォルトの名無しさん
NGNGちゃんとした言葉で整理したってとこは評価できる。
0183デフォルトの名無しさん
NGNG0184デフォルトの名無しさん
NGNG●えーと、こんにちは。僕は高2(今度3年さ!)のWIZARDユーザーです。
「100%採用」ということなので、これを書いています。1番初めにWIZAR
Dに出会ったのは2年前の12月でした。それ迄はコピーなんて事は考えたことも
ありませんでした。学校の帰りに友達に誘われてI・ツーに連れていかれました。
そこで見たのがこのWIZARDでした。その日僕もそこでレンタルして確か最初
にコピーしたのは「カサブランカ○愛を」だったと思います。その時、WIZAR
Dもコピーしました。僕はそれから今年の2月迄コピーユーザーでした。このコー
ナーはいつも楽しく見てましたが是非、僕も載ってみたいと思ってました。でもこ
のコーナーに載せてもらうのにはちゃんとしたユーザーじゃないとだめなんじゃな
いかなぁーと思ってついに買ってしまいました。(お金借りて迄ね!)この時僕の
頭の中にはどんどん手紙送ってバンバンレポート券をもらってレポート代を浮かせ
ばすぐにお金は返せるという考えがプカプカ浮かんでいました。ですから是非とも
レポート券下さい。他のコピーユーザーの皆さんもWIZARDを早く買いましょ
う。それとコピーユーザーのくせにこのコーナーに載ってレポート券をもらった人、
てめーのような奴ぁーWIZARDを持つ資格はねぇーんだ
よ!フォーマットしちまうか、カッターでビリビリにするか中のディスク盤を引っ
張り出してライターで焙るとか(これは生ゴミが焼けているような匂いがします)、
して神様・仏様・ウエストサイド様に今迄の悪事を白状し頭を丸めて早瀬未沙さん
に土下座して謝るしかねーな。その後もちろんWIZARDを2つ3つ買ってウエ
ストサイド様にも儲けさせるしかねぇーよ!正規の皆さんもそう思うでしょ?
0185デフォルトの名無しさん
NGNG会いを書かせて頂きました。最後ですが僕の名はTomです。この名だけは覚えて
おいて下さいね。読みずらい文章ですが(だっていつも国語と英語は2だモン!)
ここ迄読んで下さった人ありがとうございます。それと文章を打ち込んでくれた方
汚い字ですみません。(これは紙に書いているのでウエストサイドの人がパチパチ
と打ち込んでる訳さ!
ちなみにこの手紙レポート用紙に書いているんだ、だって便せん無いんだもん)で
は、皆さん、さよなら、さよなら、さよなら
Tom●
う〜んひさびさに壮烈な文章です。自分は3ヶ月前迄コピーユーザーだったこと
を宣言してるくせに堂々とコピーユーザーをけなしている・・・ほんでもって「頭
丸めろ」だって・・・Tomさんは頭丸めましたか?WIZARD2つ3つ買って
くれましたか?(つっこむ、つっこむ)これからもお手紙は下さい。それは有難い
事です。ハイ。
0186(´д`;)ハァハァ
NGNG0187デフォルトの名無しさん
NGNGはぁ?何?専門家って?いるの?そんなの。
俺じゃないんだけど、それいったの。
0188デフォルトの名無しさん
NGNG例えば 「GoF パターンのこれ」 といった各々のパターンの出来についていってるのか、
どっちなんだ?
0189デフォルトの名無しさん
NGNG考え自体駄目。
だいたいオブジェクト指向じゃないじゃん。
絶対、オブジェクト指向だけをちゃんと覚えた方が楽だって。
いらないでしょデザパタなんて。
かなり腐ったパターンもあるし、絶対、これ作った奴怪しいって。
0190デフォルトの名無しさん
NGNG0191デフォルトの名無しさん
NGNG実装経験のないカタワ馬鹿いってよし。
0192生涯一職人
NGNG0193デフォルトの名無しさん
NGNG0194デフォルトの名無しさん
NGNG議論したいなら具体例示せよ。
例えば、どのパターンのどの部分がオブジェクト指向じゃないの?
で、おまえの言っているオブジェクト指向って何?
なんか、かなーり狭い意味でのオブジェクト指向に固執しているような
気がするんだけど。
0195デフォルトの名無しさん
NGNG「腐ったパターンもあるし」ってことは、>>189が「腐ったパターン」であることを
具体的に示せるパターンもあるのだろうな。それがなんなのか、ぜひ知りたいものだ。
0196デフォルトの名無しさん
NGNG勉強不足ですか?
0197デフォルトの名無しさん
NGNG何を根拠に「5%が限度」なんて言うのだろう。
5%ってどう言うことなんだろう。
100KLineのプログラムがあると、
そのうち5KLineまでしかデザインパターンを適用できない、とか?
それは何かの調査結果とかですか?
0198デフォルトの名無しさん
NGNG指向習得は、この二つをどうやって使い分けるかに始まる。
継承は、柔軟性、可読性が低いことから、クラス同士の明らかな
親子関係がない限り、デコレーターを使う方針に落ち着く。
その二つを使い分けれれば、あとは自分で最適な使い方をケース
バイケースで使って行けばいい。
自分は、デザパタに接することなく、自分でクラスを作ったり、
人のを見たり使ったりしながら、オブジェクト指向を覚えた。
ある日、クラス作りの幅を広げようと、デザパタの本を読んで
見た。
ほとんどは、自分が名前も知らずに使ってるものだった。
一部は経験から、クラス関係が複雑過ぎ、可読性があまりに低い
ため、意識的に避けるべきクラスの使い方だった。
デザパタは、クラスの裏技コンテスト的としては、インスピレーション
を多少得れたが、全体としては有益になるものはなかった。
逆に名前付けすることによる発想の硬直化という弊害の方
が大きい気がした。
0199デフォルトの名無しさん
NGNGいえ、全くの主観です。いろいろと試してみた結果こういう考えに至りました。
はっきりとした根拠は示せません。ごめんなさい。
ごめんなさいついでに、あなたはどれくらいの範囲に適用できてますか?
0200デフォルトの名無しさん
NGNGそか...デコレータしか理解できなかったんだね。
0201198
NGNGデコレータ以外もできたよ。そんな理解するのに難しいものでも
ないし。でも、アダプタにしてもシングルトンも普段から
使ってるものだった。シングルトンはただstatic変数の無数ある
うちの一つの使い方でしかないとおもった
0202デフォルトの名無しさん
NGNG,-、/^^、,-、
/` / ヽ ´ヽ
<´ ̄` ´ ̄`>
く 認 厨 ,>
< \.. / >
く / 定 房 ヽ ,>
〈__ 人 __〉
ヽ__,.<_,、_ゝ、_ノ
0203197
NGNG「どれくらいの範囲に」なんて、考えたことも無かったよ。
たとえば、全部のクラスの基底クラスがあって、その基底クラスに
ToString()なんてメソッドがあり、どのクラスのインスタンスに対しても
ToString メッセージを送りうるとすると、
デザインパターンの適用率は100%になったりしますか?
>>202
で?
0204デフォルトの名無しさん
NGNGhas-a関係は継承で表現するの?デコレータで表現するの?
0205デフォルトの名無しさん
NGNGで、自分はどのような人にどの程度有益だと思ってるの?
0206デフォルトの名無しさん
NGNG純粋OOA、OODから作ったクラス群だけで実装できると思ってる馬鹿がいますな。
あんたが言ってるOOは、いわば戦略。デザパタは戦術のノウハウ。
階層が違うのに同列であつかって断罪するのは、馬鹿の証拠ですな。
0207デフォルトの名無しさん
NGNGおよびそれらの問題に対する解決ポイントを記述している。
そこで私達は、これらの解法を何回でも使うことができる。
同じ問題に対する解法を、何度も何度も最初から考え直さずに済むというわけだ。
0208198
NGNGis-a = 継承
っていうか、最初っから、そうした表現で表現した方がクラスの
相関はわかり易かったけど、あえて、デザパタの話してるから
デザパタ用語使ってみた。
0209プロの逝って良しの1 ◆MvRbZL6NeQ
NGNG0210デフォルトの名無しさん
NGNGというところがよく分からないけど、
俺もクラス構造の設計っていう意味だと継承にするか、委譲にするか
どちらかしかないと思っている。
あとは責務をうまく割り当てることだけに注力すればいい。
あんまりデザパタの出番はないと思う。
でも、FactoryMethod、ProtoType、Builderなんかの
生成系のパターンには結構有用なものが多いような
気がするんだけど、どうよ?
実行時にオブジェクトの構造をいつどうやって作るかって、設計では
重要だと思う。
0211デフォルトの名無しさん
NGNG俺はそれを手馴れと呼びたい。
0212デフォルトの名無しさん
NGNG0213デフォルトの名無しさん
NGNGを明文化したもの。
ソフトウェアパターンの第一のメリットは開発者に共通の「用語(ボキャブラリ)」を提供できること。
ソフトウェアパターンの最大の価値は、個々のパターンに「名前」がついていること。
つまり「ソート」、「バックトラック法」、「スタック」、「二分木」、「再起構造」など、
アルゴリズムとデータ構造に関しては共通の用語を持っているが
これよりも上流の分析や設計に関する共通用語はこれまで存在しなかった。
0214デフォルトの名無しさん
NGNG0215デフォルトの名無しさん
NGNG不特定多数の手馴れを文書化して、後からくる人にオナジ苦労を
させないようにするっていうのは、賢い知恵だと思うがな。
>>210
個人的には、MVC分離を容易にしてくれるObserverパターンが
非常に有用だとおもうなあ。
0216デフォルトの名無しさん
NGNG名前がついた途端、そのものの進化が止まる。
0217デフォルトの名無しさん
NGNG「関数Aを再起呼び出しして・・・」、「ここの部分はスタックで実装してください」という表現が
開発者同士でスムーズに受け入れられているように、「ここのイベント通知はObserverパターンで設計しよう」
といった具合に、開発者のコミュニケーションを支援することができます。
0218198
NGNGFactoryは有用だね。俺は最初COMをC++で作りながら
覚えた。JavaではCalenderクラスが抽象クラスなのに、
インスタンス生成メソッドによって、実インスタンスクラス
を意識しないで使える技で非常に有用と思った。
でも、俺は後からデザパタ本で名前を知った。
結局、使えるのと、それを名前を知ってて使うのの差ではある
と思う。ボクシングでもコンビネーションは無数にあるけど、
名前がついてるのはほんの数個でしかない。では全部名前付け
するべきかといえばそうではなくて、逆にカタログ化すること
のよって応用性や即興性がなくなっちゃう。
クラスの相関パターンに関しても、やたら滅多ら名前付けする
のは有益とは思えない。一部有益なこともあるのは事実だと思う。
でも、それいったら何でも一部有益な部分はあるからして。
0219デフォルトの名無しさん
NGNGその苦労は労働生産性に多大な影響を与えるほどのものではない。
むしろ、後からくる人が考える機会を逸することこそ問題だ。
0220デフォルトの名無しさん
NGNGしかし一方で「どうもソフトウェアパターンは好きになれない」という声も聞く。
「パターン化された」、「マニュアル化された」というコンセプトが気に障るとか
創造性が阻害されるとか、あたりまえの常識を収集して何が楽しいのか、理由はさまざま
0221デフォルトの名無しさん
NGNGしかし、コロンブスの卵のように、知っている人は簡単、確実な技術であっても、
知らない人は四苦八苦した挙句イチかバチかにしか到達できないもの
10年以上の歳月をかけて熟成されてきたModel-View-Controllerパターンを
ゼロの知識段階で数ヶ月で唸り出せるものだろうか?
0222198
NGNGいるみたい。
そうなると、オブジェクト指向におけるパターンが必須では
ないことになる。
プログラミングにおいて、アルゴリズムは必須だけど、パターン
がそうではないのは、技術者によって有用性が大きくバラツキ
があるからであろう。
それは決して熟達レベルとか作業分野ではないようだ。どちらかと
いうと個人の「発想の手順」の違いに起因しているようにみえる。
0223デフォルトの名無しさん
NGNG名前がつくからこそ、進化が進む。
名前もついていないものの議論なんかできないっしょ?
0224デフォルトの名無しさん
NGNG>ゼロの知識段階で数ヶ月で唸り出せるものだろうか?
マイクロソフトのビュー・ドキュメントとか知ってれば、十分できるでしょう。
過去の遺産を使えるのと、遺産を名前としてしってるのは全く別物でしょう。
我々が知ってるプログラミング技術は名前づけされていないが過去の
遺産を受け継いでいるのがほとんど。たとえば、Cでmallocを使って
関数内で領域を確保してそれをリターンするなんていうテクニックは皆
使ってるが、あえて名前があるわけじゃない。
0225デフォルトの名無しさん
NGNG・名前付けによって知識の共有が行える派
・名前付けが進歩を促すよ派
・直感的には思い付かないパターンも含まれているよ派
デザインパターンは役に立たない派
・名前付けによって進歩が停止する派
・当たり前の事しか表現されていない派
・わずかなコードにしか適用できない派
・そもそも考え方が駄目派
・クラスの関連が難しすぎるパターンが含まれている派
旨くまとめらんないかな。
0226デフォルトの名無しさん
NGNGしかし「今までになかったものを作り出す」、「今までに無かったアプローチで成果物を作り出す」
という創造性を発揮するには、今までに存在していたものを知らなければならない。
よっぽどの天才以外は。
料理でも代表的な食材を使って代表的な料理を作った経験が無ければ、独創的な料理は無理。
囲碁や将棋では定石から入って定石をでるといういいかたがされている
誰もが知っている基本を抑えつつ、徐々に応用へと間口を広げるべきで
要点をなおざりにして枝葉に走る愚は避けるべき
0227デフォルトの名無しさん
NGNGその「有用な概念」に名前がついていると、会話が楽なんだよね。
その名前だけで話が通じるから。
協働で開発作業をしない人には、そういうボキャブラリは意味がないの
かもしれないですねえ〜。
0228デフォルトの名無しさん
NGNG0229デフォルトの名無しさん
NGNG・・・最後の2行の例はテクニックというべきものではない
0230デフォルトの名無しさん
NGNG名前がないから、発想が自由に開放される部分もある。
0231デフォルトの名無しさん
NGNG>マイクロソフトのビュー・ドキュメントとか知ってれば、
それはMVCの実現方法の一形態をすでに「理解している」ということだな。
アホか。
0232デフォルトの名無しさん
NGNG「破離」をしたがる奴は、どの世界でも大成しないな。
0233デフォルトの名無しさん
NGNGRFCを管理してる機関みたいなのが必要な気がするな。
0234デフォルトの名無しさん
NGNG前からあるし、MSが作った概念なわけでもないことは呼んだこと
ある。おそれく、画面系インタフェイスが実現されてるシステムは
みんな多かれ少なかれ遥か前から使われているテクニック。
名前付けしなくても、遥か前から多くの人が多くの場で使っていた罠。
0235デフォルトの名無しさん
NGNG残りいくつかは、体位に無理があり過ぎた。」
0236189
NGNG高校や大学の数学でも基本さえしっかり覚えれば
数式や解法の丸暗記なんて必要ないのに隅から隅まで暗記する人がいるね。
それと同じようにデザパタを覚えることで
オブジェクト指向を理解できていないことを隠そうとしてる人がいる。
デザパタの考えが根本的に死んでることを理解するには
まずオブジェクト指向を覚えなきゃ話にならない。
0237デフォルトの名無しさん
NGNGMVC分離ってのは、その「皆が知っていた」概念に名前付けただけですよ。
罠でもなんでもないでしょが。
0238デフォルトの名無しさん
NGNGどうでもいいや。
0239デフォルトの名無しさん
NGNGだったらあなたは名前をつけては駄目だというのか?
「ソート」という名前ができたから、ソートの進化が終わったか?
「バックトラック法」、「スタック」、「二分木」、「再起構造」では?
とはいいながら、あなたがいうことも正しいのは事実です
デザインパターンができたことによって考え方がその枠からでない人も大勢いる
しかし、それに気付いたのなら、とくに恐れる必要は無いのでは?
0240デフォルトの名無しさん
NGNG分類すれば、いくつかできるだろうな。
でもあえて選手がしないのは、「こうやったらこうやって」ってな
発想で十分で、有用性を感じないからだろうな。
0241235
NGNG名前があった方が、相手に要求する時簡単だろ。
別にそんな言葉知らなくても、自然に生み出すことはできるとは言え。
0242デフォルトの名無しさん
NGNGだから、パターンは優れた設計の基礎だって
0243デフォルトの名無しさん
NGNGあんた! いいこといった!
0244デフォルトの名無しさん
NGNGデザパタは「守」の全てではない。一部をカタログ化したものにすぎない。
0245デフォルトの名無しさん
NGNGそれが全てだな。
土台と思っている人と、天井と思っている馬鹿の会話は成立しない罠。
0246デフォルトの名無しさん
NGNGちゃんと俺を生んでくれたぞ。
親父がアクロバチックな技のレパートリ持ってるとは思えん
0247デフォルトの名無しさん
NGNGパスにしたって、特別な名前のあるパスってのがある。
たとえば「センタリング」。
(つか、サッカー詳しくないから、名前付きのパスってこれしか知らないのだけど。)
ある特定のパスをセンタリングと呼ぶことによって、
その技術---相手ゴール前にいる選手に、サイドからパスを出す---に特化した
練習も、細かい工夫もできるわけだ。
0248デフォルトの名無しさん
NGNG0249デフォルトの名無しさん
NGNG他人に名前付けしてもらわないと土台が作れない馬鹿もいるな。
0250デフォルトの名無しさん
NGNG0251デフォルトの名無しさん
NGNG他の頭が良い人が作ってくれた土台だ。 それを使うことを恥には思わない。
パターンは設計の再利用だ。 むずかしくかんがえるなよ。
0252デフォルトの名無しさん
NGNG理解できないとは、やっぱりこの業界ってカタワがおおいんだなあ。
藻前ら、技術者同士のコミュニケーションどうやっているんだよ?
もしかして、そういうことはしない、ヒキーですか?
■ このスレッドは過去ログ倉庫に格納されています