トップページ⇒tech
854コメント333KB

オブジェクト指向は戦場では必要無し その3

■ このスレッドは過去ログ倉庫に格納されています
0001うつつつつNGNG
前スレがめでたく止まったようなので、その3
引き続きOO厨とアンチOO厨の血で知を笑う戦いきぼ。

その1 http://pc.2ch.net/test/read.cgi/tech/1011997945/
その2 http://pc.2ch.net/test/read.cgi/tech/1013266554/

0133デフォルトの名無しさんNGNG
「 」が OO 用語とかいったところで、どうせその用語を理解してないだろう事は
想像がつくわけで(w
0134デフォルトの名無しさんNGNG
多分、関数ポインタが無いって騒いでる人は、
内部イテレータとかを簡潔に書きたいんだろう。
こういうのはコールバックを除けば構文の問題なんだよね。
0135デフォルトの名無しさんNGNG
>>134
ここまでの流れからすると、少なくとも「 」はそういう主張はしてないと
思うが。

ま、それはさておき、内部イテレータとかを簡潔に書きたければ、
コールバックのためには関数を作らなければならずしかも関数のネストが
できないCに比べれば、無名クラスでクロージャもどきができるJavaの方が
簡潔じゃないかな。
0136 NGNG
回数で言うとコールバックとインタプリタ内のコールで困った
ことが多かったな。
(イテレータはあんまり使わない。)
0137 NGNG
それに、経験上だけど、クラスーインターフェースよりか
関数ー関数ポインタの方が再利用率が高かった。
分割単位が小さければ小さい程応用範囲が広いのが原因だと思う。
0138デフォルトの名無しさんNGNG
この期に及んで、まだコテハンを使いつづける「 」って一体…

Kusakabe 並みの面の皮の厚さだな(w
0139 デフォルトの名無しさん NGNG
内部イテレータを簡潔に書くのと関数ポインタとどう関係あるの?
普通によく分からないのだが…
0140デフォルトの名無しさんNGNG
>138
Kusakabeタンは衝撃だったよね。
0141デフォルトの名無しさんNGNG
>>131
> たとえば?
カプセル化=情報隠蔽
メソッド≒関数
クラス⊃構造体
0142デフォルトの名無しさんNGNG
>>141
それを見ると日本人にとってはいいニュースに聞こえるね。
怪しい漢語からカタカナ語への切り替えにちょうどいいタイミングだったと思われ。

でも多態とか新たな似非中国語を産んだか…。
0143デフォルトの名無しさんNGNG
>>136-137
馬鹿が己の経験論を自身たっぷり述べるほど、傍で
見ていて間抜けな話はないと思う。
0144 NGNG
文句があるなら、こんな底の方で吼えてないで堂々と上げましょう。
また、反論があるなら論理的に願います。
0145 NGNG
と思ったけど、例の粘着君は御断りだよ。
0146デフォルトの名無しさんNGNG
>>141
C++ の実装に依存してる考えだね
0147デフォルトの名無しさんNGNG
>>146
きっと C++ やって OOP やった気になってるんでしょう。
0148デフォルトの名無しさんNGNG
ここにも被害者が一人...
0149デフォルトの名無しさんNGNG
粘着でもやっぱり、粘着は嫌いらしい・・・
0150デフォルトの名無しさんNGNG
>>143
ここは、そんな痛々しい「 」を眺めて愉しむスレです。

素直に間違ってたといえば良いのに、いい加減な知識にいい加減な言い繕いを
重ねてるから遊び道具にされちゃうんだよね(w
0151デフォルトの名無しさんNGNG
>>150
「 」は明らかな間違いを延々と主張していながら、その間違いを認めてすら
いないわけだからね。

しかもいまだに関数ポインタがどうのこうのと言い続けている。

粘着もここまで来ると、おもちゃにするより、正直、寒いな。

2ちゃんならどうでもいいけど、たとえばこんな奴と電車で乗り合わせたり
したときのことを想像するとね…
0152デフォルトの名無しさんNGNG
カプセル化を情報隠蔽とするのはどうかと思う。
隠すのが主目的ではないから。
どこかにも書いてあったが透明カプセルだってある。
0153131NGNG
>カプセル化=情報隠蔽

そもそもOOの普及以前には「情報隠蔽」という概念はあまり一般的ではなかったと
思うんだが。

とはいえ、OOでなくても(たとえばCとか使っても)大規模なプログラムなら
なんらかの方法で情報隠蔽を図るから、情報隠蔽は別にOOに特有の概念では
ないわな。

>メソッド≒関数
>クラス⊃構造体

このふたつについては、少なくとも「似て非なるもの」なんだから、別の名前を
割り当ててもいいんじゃなかろうか。

とはいえ、たかが「メソッド呼び出し」を、「メッセージ送出」と呼ぶのはやめて
欲しいが。このスレにいるアンチOOは、そういうわけのわからない言い回しに
翻弄されてアンチになっちゃったような気がする。

てなわけで、アンチOO連中もかわいそうな被害者なんだから、あんまりいじめ
ないでいてあげようよ。(w

もちろん、「 」は例外でいいけど。
0154131NGNG
>>146
>C++ の実装に依存してる考えだね

かもしれんが、そう考えて何か不都合が?

Smalltalkerを相手にするのに比べたら、C++のスタンスはずっと
「実利的」だと思うがな。

C++の仕様を全部理解しようと思うと大変だけど、OOの「サワリ」を
つかむには C → C++という流れはむしろ悪くないと思う。

0155131じゃなかったNGNG
ごめん、俺、131じゃなくて >>132 だった。>>141の引用見て誤爆。

それはそれとして、

>>139
C++(STL)やJavaのイテレータは使用者側が++したりnext()呼んだりするけれど、
これが「外部イテレータ」。「内部イテレータ」ってのは、使用者側はそういう
ところに手を出せず、逆に、イテレータによって決められた処理が駆動される
ことになる。Rubyのイテレータはこっち。

で、こういうのを、CやJavaで実現しようとすると、関数ポインタなり
インタフェースなりを使うことになる(要はコールバックだからね)。
0156デフォルトの名無しさんNGNG
メンバ関数をメソッドと呼ぶのはやめて欲しい。
Javaがそう定義しちゃったみたいだから、我慢してるけど。
0157デフォルトの名無しさんNGNG
>>155
内部イテレータは、C++ だと

 関数オブジェクトを for_each などの traverse アルゴリズムに渡す

というのが近いのかな。
0158155=135NGNG
>>157
ですな。あとはVisitorパターンとか。
# 「Javaの格言」にちょっとだけ説明がある。

んで、そういうときに、Javaだと無名クラスが使えるから、わざわざ
外に関数を定義しなければならないCより簡潔なんじゃない? というのが
>>135 の意図。

0159デフォルトの名無しさんNGNG
>>158
話が逸れるけど、C++ で無名関数オブジェクトを定義できるようにするライブラリを
書いてる人がいるみたい。boost.org の ML で Review Request が出てた。

(Boost Lambda Library, 略称 BLL だそーだ)
0160デフォルトの名無しさんNGNG
>>153

同意。

OOの利点で語られることの殆どはOOをサポートしない環境でも
結構頻繁に使われるよね。

Netscapeなんて構造体のメンバにに関数ポインタを入れといて
メソッド的な使い方する方法を多用してたし、
これだって一種の多態だね。

別にOOの概念全部を必ず使わないとならないわでないのだから
そこは設計次第でしょ。

OOならできてOOでないとできないことなんて無いんだから・・・

0161デフォルトの名無しさんNGNG
やヴぇ・・・
ageちまった。

スマソ
0162デフォルトの名無しさんNGNG
>>160
> OOならできてOOでないとできないことなんて無いんだから・・・
まぁそうだが、OO で設計したら素直に OOPL 使え、とは思うけど。

インターフェースの多重継承なんかは、OOPL の力を借りないとやってられん
でしょ(関数呼び出しのたびに this 相当のポインタの offset を再計算、とか自
前でやってたら死ぬ)
0163160NGNG
>>162

確かに多重継承はOOPL使ったほうが合理的だと思う。
できる/できない
で語ったのはちと良くなかった

っていうか
Cで多重継承(と似たようなこと)をやるのが痛い
それこそOOのためにコードを書かされる
0164デフォルトの名無しさんNGNG
OOが便利に使えるところならOO使えばいいし、そのためには
(使えるなら)OOPL使えばいいよね。

でも、犬::鳴く、猫::鳴く 的な説明でOOを語る奴はやっぱうざいし。

打ち合わせのときなどに、「その設計はOO的じゃないですよ」なんて
言う奴って結構いないか?
0165デフォルトの名無しさんNGNG
>>164 色んな意見があるよね OOPLは便利に使うし使えるけどOOは嫌いとか

「その設計はOO的じゃないですよ」って言う奴はたいてい設計出来ない奴だから無視するのが吉
「こういう設計を提案します」って言う奴を信用しろ
0166デフォルトの名無しさんNGNG
結局オブジェクト指向ってプログラマがTechに走らないようにする縛りなんだな。
縛りの法則なんてプログラム出来なくたって覚えられる。
だがそんな状態の人が出来ることはせいぜい設計時のダメ出しぐらいで、
代替案なんてありゃしないから邪魔なだけなんだよな。
0167デフォルトの名無しさんNGNG
>>166
> 結局オブジェクト指向ってプログラマがTechに走らないようにする縛りなんだな。
そうなの?
0168デフォルトの名無しさんNGNG
この場合のTech=ひとりよがりのトリッキーな方法
0169デフォルトの名無しさんNGNG
>>168
それにしても、オブジェクト指向を導入すればトリッキーなコードがなくなるかと
言えば、全然関係ないと思うけど。とくに C++ なんかはキャスト使えばなんでも
アリアリだし、

 private なメンバにアクセスしたい
 → friend にしちゃえ (まだマシ)
 → 継承しちゃえ(ダメダメ)
 → #define private public (最悪)

とかあるわけだし。
0170デフォルトの名無しさんNGNG
その辺は XP の出番だろうな。
トリッキーなコードを書いたらペアプロでダメだしされるだろう。
0171糞NGNG
吉川英治 歴史時代文庫17
宮本 武蔵4

p48
無知はいつでも、有知よりも優越する。相手の知識を、テンと
して無視し去ってしまう場合に、無知が絶対につよい。生半可
な有知は誇る無知へ向かって、施すに術(すべ)がないという格
好になってしまう。
0172デフォルトの名無しさんNGNG
知らないふりをするのと、知らないのを比べたら
知らないほうがいいっていうことかな?

関係ないけど、有知って言葉を辞書で調べたら
「有知無知三十里」って言葉が出てきた。
0173デフォルトの名無しさんNGNG
無知の知
ムチムチ (;´Д`)ハァハァ
0174デフォルトの名無しさんNGNG
>>172 >>173
無知はDQNと言っているらしい。
0175 NGNG
ああ、このような名スレがこんなに沈んでるなんて・・・。
sage誘導してるのがいるなー。
てことでage!
0176デフォルトの名無しさんNGNG
>>175
名スレと思うならほっとけYO
0177戦場では役に立たないと武蔵様も・・・NGNG
-------------------------------------------------------
が武蔵には、間髪のまに、処する方法が立っていた。
兵法によらず、すべての理は、それを理論するのは平常の事で、
実際にあたる場合は、いつも瞬間の決断を要するのであるから、
それは理論立てて考えてすることではない、ひとつの「勘」であった。
平常の理論は「勘」の繊維をなしてはいるが、その知性は緩慢であるから、
事実の急場には間に合わない知性であり、ために、敗れることが往々にある。
--------------------------------------------------------------
(吉川英治 宮元武蔵 吉川英治文庫 8巻96ページより引用)
0178デフォルトの名無しさんNGNG
ワケワカラソ
0179デフォルトの名無しさんNGNG
往々って辞書引くと「ときどき物事が起こるさま」って書いてあるね。
0180デフォルトの名無しさんNGNG
>>177の説明
理論だけでは戦場には役に立たない。
戦場には”勘”というのが重要。
その”勘”を養うには繊維となっている理論が重要であるが
それだけではまだ足りない。

つまり、戦場で勝つには”勘”を作っている理論とそれ以外(実践?)を
身に付けろってこと。

ちなみに、文章をよく読むと分かるが、平常の理論は事実の急場には間に
合わないと書いてあるが役に立たないとは書いてないので勘違いしないように。
0181デフォルトの名無しさんNGNG
負けたら即死な戦場では、「往々」は、一度でおしまいってことだ。
0182デフォルトの名無しさんNGNG
「本当の空とは知識や体験を経て達する迷いなき境地であり、空の心に善はあっても悪はない。
『知恵』と『道理』、そして人としての『道』があって初めて心は空となる…」宮本武蔵
0183デフォルトの名無しさんNGNG
え〜と、何やらありがたいような、
板違いなような、デムパなような…
0184デフォルトの名無しさんNGNG
なんだ、武蔵って兵法の理論書き残してるじゃん。
やっぱ理論の重要さを分かっているんだね。
さすが武蔵。
0185デフォルトの名無しさんNGNG
>>175
このスレは

悲惨な「 」を晒すスレ

なんだけど、本人はわかってないと見える (w

で、関数ポインタはどうなったのかね?
0186デフォルトの名無しさんNGNG
だいたい、「 」って、前スレで

ファイル分け >>>>>>> クラス

なんて、わけのわからない主張してたんだよな。
もともと直交している概念を比較してどうするよ。

思うに「 」って、根本的に「インスタンス」がわかってないんじゃないかな。

こいつは(恐ろしいことに)携帯Javaのプログラマだそうだが、こいつの書く
プログラムはstaticの塊なんじゃないかと想像してみる。
0187デフォルトの名無しさんNGNG
> こいつは(恐ろしいことに)携帯Javaのプログラマだそうだが
どうせ妄想でしょ(w
0188デフォルトの名無しさんNGNG
えーと、「 」が晒しあげられる経緯を読んでないんだが
>>186を見る限りとんでもないアフォだと見受けられる。
つーか、携帯ってi-modeだろ?
あれはOOなんて言ってたらメモリが足りないだろ。
8ビットマイコンのBASICプログラムみたいな感覚じゃないのか?
0189デフォルトの名無しさんNGNG
>>188
> あれはOOなんて言ってたらメモリが足りないだろ。
OO だと消費メモリが増えるという根拠は?
0190デフォルトの名無しさんNGNG
OOPLの仕組み知らんの?
0191デフォルトの名無しさんNGNG
なんでもかんでも一つのクラスに突っ込んじゃうほうがメモリ効率がいいとか、
変数はstaticにしといた方がメモりを食わないとか。
0192デフォルトの名無しさんNGNG
>>190
もちろん、代表的な Java VM に関する論文とか Inside the C++ Object Model
ぐらいは読んでますが。
0193デフォルトの名無しさんNGNG
>>192
それで?
0194デフォルトの名無しさんNGNG
>>193
繰り返しになるけど
> あれはOOなんて言ってたらメモリが足りないだろ
は根拠がない、もしくは何か勘違いしてると思ったので、根拠を聞いてみた。
0195デフォルトの名無しさんNGNG
根拠もなにも、10kだぜ?
俺は勘違いしてるか?
0196デフォルトの名無しさんNGNG
>>195
- メモリが足りない
- OO だからメモリが足りない

言ってることが別ってことでしょ。
0197デフォルトの名無しさんNGNG
>>196
下らんことでつっかかるな。
そんなん説明するのはめんどくさい。
0198デフォルトの名無しさんNGNG
下らんというか、このスレの趣旨ってそーゆーことじゃなかったのか? ま、俺は
何でもいいけど。
0199デフォルトの名無しさんNGNG
メモリが足りない= メモリが足りる為に最大限の努力をしなければいけない
そオブジェクト指向は基本的に、おぶ

つまり、途中で出た話のように OO言語を有効に使っていてもOOではないのと同じで
言語の機能は最大に利用しなければいけないけど、注目点は違うという事だ
0200デフォルトの名無しさんNGNG
>>199
日本語で書いてくれよ
0201199NGNG
あれ? 文字化けしてる?

まあそんな書き直すほどの事じゃないけど
 ようするに、
それよりも優先すべき事があるんだから
そっちをoriented 出来ないって単純な話だよ
0202デフォルトの名無しさんNGNG
>>201
> あれ? 文字化けしてる?
うん。

> そオブジェクト指向は基本的に、おぶ
> つまり、
こんな感じになってるので、何が「つまり」なのか謎。

> それよりも優先すべき事があるんだから
優先も何も、そもそも OO とメモリ使用効率が相反するのかって話じゃなかったの?
0203 NGNG
携帯Javaでクラスを作れないのはその世界では常識。
空のクラス1個宣言するだけで700バイト消費するんで使えません。

10K以内に納めるテクニック
http://www.atmarkit.co.jp/fmobile/rensai/doja07/doja07.html
プログラムの基本は「非オブジェクト指向」で
0204デフォルトの名無しさんNGNG
結局ちょっとしたプログラムにOOを適用する奴なんざぁ、
意味が無いことなんだよな。
0205デフォルトの名無しさんNGNG
>>204
なにから話がつながって「結局」なのか謎だが。

まぁ数千行程度の小規模なプログラムなら OO だろうが手続き型だろうが、設計
なんざしなくても作れるっつー気はするけど。
0206デフォルトの名無しさんNGNG
ハッキリ言って世界中の70%のプログラムにOOはイランと思う。
0207 NGNG
>>205
OOPLでは最初にちゃんと見通しを立てて設計しておかないと、
小規模でも行き詰まります。
0208デフォルトの名無しさんNGNG
>>207
OO じゃなくて OOPL なのか?
0209デフォルトの名無しさんNGNG
手続き型でも同じです。
0210 NGNG
手続き型なら部分変更で済む場合が多い。
0211デフォルトの名無しさんNGNG
OOなら部分変更で済む場合が多い。
0212デフォルトの名無しさんNGNG
>>207
俺、数千行どころか数万行でも最初に設計なしに作れるよ。 と言ったらどうする?

もちろんユーザから必要な帳簿のイメージのFAXは貰うけどさ
使うのは主にDelphiかVC++で、つまりはOOPLだけど
別にオブジェクト指向してるわけじゃない。
0213デフォルトの名無しさんNGNG
ハッキリ言って世界中のプログラムの70%にOOは必要だと思う
0214デフォルトの名無しさんNGNG
>>213
でも世の中のプログラマの70%は、一生OOを理解できない
脳みその持ち主だと思う。
0215デフォルトの名無しさんNGNG
それをプログラマとよんじゃぁいけない。
0216デフォルトの名無しさんNGNG
>>212 それは単に設計が早いだけと申し上げておきます
0217デフォルトの名無しさんNGNG
多態があればOOは必要ない
0218 NGNG
VC++は除外>>212
0219デフォルトの名無しさんNGNG
OOとか言っても実際、かりそめのクラス作ってるやつばっかりだと思う。
0220旅の始まりの人NGNG
クラスとして静的に定義しなければいけないものと、
パラメータとして実行時に動的に決めるものとの設計時の
切り分けがよく分かりません。後々後悔する事が多いっす。
完成してみたら、存在意義のない間抜けなクラスがあったり
無茶なパラメタライズがあったり。

どうやって設計段階で判断するんでしょうか?
0221デフォルトの名無しさんNGNG
同時進行だ
設計とコーティングは。
そしてリファクタリングを繰り返す。
そうしないと良いプログラムはできない
0222旅の始まりの人NGNG
リファクタリングですかー。

変更管理が面倒くさくないですか?
下位レイヤを変更したりすると、上位でそれ使ってるところを
みんな修正する羽目になるし。
0223とあるダメ社員NGNG
>>212

C言語ばかり使用していて、やっとOOの勉強を始めたばかりですので幼稚な
質問かもしれません。

|212 名前:デフォルトの名無しさん :02/02/28 23:32
|>>207
|俺、数千行どころか数万行でも最初に設計なしに作れるよ。 と言ったらどうする?
|もちろんユーザから必要な帳簿のイメージのFAXは貰うけどさ

まじめなお話で数千行(数万って…凄いなぁ)もあるプログラムを設計書も作成しな
いで、作れるというのは信じ難いです。
ま、白髪三千丈の類の冗談なんでしょうけど。

ちょうど220の人が書いているようにクラスを考えてみたりする必要もあるわけで
すよね、OOなら。
まして、合計で数千もの手続きを経なければならない機能を作り上げるのに、どうし
たら設計が手軽ですむのか、ちょっと教えて欲しいです。

個別のノウハウとか、そういうものを書いてみてください、といっている訳ではな
くて一般論で構わないので。

どうして、こういう物凄い発言が出来るのか知りたいのです。
0224デフォルトの名無しさんNGNG
>>222
その労力を極力軽減するのが OO だ。

ということらしいぞ。
0225デフォルトの名無しさんNGNG
>>223
212は1行もコード書いたことない妄想野郎だからさ
0226 NGNG
横レスだが、

DBからデータ拾ってきて表示して変更してセーブするだけで、
画面数がやたらに多いのだと軽く逝くけどね・・・。

0227旅の始まりの人NGNG
>>224
本当かなあ…後々静的定義と動的定義を交換するような修正は、
レイヤ間のインターフェイスを変えずに実装だけ変えて済ます
なんてことは不可能だと思うんだけど…
0228デフォルトの名無しさんNGNG
COBOL -> COBOOL

(・∀・)イイ!!
0229デフォルトの名無しさんNGNG
>>227
固定概念を取り払えよ
0230旅の始まりの人NGNG
>>226
そういうのは、1画面分の処理を通せば、後はコピペ(OOPなら実装継承?)
でちょいちょいと変更したのをいっぱい作っていけばいいだけですもんね。

私も、そういうのは設計なしで3万行というのを今書いてるところですよ。
コアだけちゃんと作れば、後は単調な作業が続くんですよねー。
0231たびの始まりの人NGNG
>>229
なにか目のさめるようなアイデアが書いてあるWebページとか本とか
知りませんか?
0232とあるダメ社員NGNG
>>230
うーん。どうにもよくわからないです。もうちょっと教えて欲しいです。

|そういうのは、1画面分の処理を通せば、後はコピペ(OOPなら実装継承?)
|でちょいちょいと変更したのをいっぱい作っていけばいいだけですもんね。
|私も、そういうのは設計なしで3万行というのを今書いてるところですよ。

あの、そういう作り方って、本当にやってらっしゃるのですか?。
似たような処理ばかりで、トータル3万行も?

継承したら、3万行にもなるわけないような気がするのですが、素人の考えなのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています