オブジェクト指向は難しすぎ

このエントリーをはてなブックマークに追加
944仕様書無しさん:04/11/08 21:19:30
XPの本なんか読んでると業務系でのOO適用が間違いとは
考えにくいな。
問題は、改革をしてより効率的な開発プロセスを導入しよう
という発想のない人間が業務系に多すぎる事だろう。
良く言えば保守的、悪く言えば(というより真実)怠け者が多い。
945仕様書無しさん:04/11/08 21:19:37
>>942
以前誰かがかいてたけど、例えば、アナリシス・パターンで考えろということか?

946仕様書無しさん:04/11/08 21:28:29
せっかく有意義な流れになってんのに。
煽り合戦やめてこっちに混ざろうぜ。

>>939
DOAうんぬんは、全くその通りですね。
分析方法としてはやっぱり落ち着く。
ガチガチのOOAだと本読んだりすると
おおーかっちょえーとは思うけど
実装レベルで、一体どうすりゃいいの、となる。
OODB使いますなんて提案出来ないもんなあ。

>>942
胸のつかえがとれた感じ。

でも抽象も多態も、業務系でも
そう極端な例でなくて使うけどなあ。
947仕様書無しさん:04/11/08 21:32:20
>>944
うちの会社とその周りの会社がおかしいだけかも知れないけど、
技術者を流れ作業で弁当に具を詰めてるパートのおばちゃんか何かと同列に見てるふしがある。
要するに、「新しい開発プロセスを導入したいと思っています。理由は……」ときちんと説明しても、
「君達は金を稼ぐ訳じゃないんだから黙って今まで通りやれ」と言われる。
猛烈にやる気が削がれる。何度言っても駄目だからもう諦めた。
会社変えた方がいいかな。
948仕様書無しさん:04/11/08 21:32:23
>>944
開発プロセスの話と分析・設計技術の話がごっちゃになると
わけわかんなくなりそう。

でも気持ちは判る。
949仕様書無しさん:04/11/08 21:38:34
Torqueとかなかなか便利そうじゃん。
.NETにもこういうクラスってないのかな?
950仕様書無しさん:04/11/08 21:47:40
>>948
開発プロセスの問題で仕様変更頻発→コード変更が必要→OOなら変更部分を減らせる鴨。
根から絶つなら、開発プロセスに手を付けるべきなんだろうな。 
でも、開発プロセスの問題って、結局要求定義の問題になりそうな気がする。
やることが決まれば、最適な手順って決まっちゃうし。
で、仕様変更が少なくなるような要求定義→UMLとなるのかな。
でも、客は抽象度の高い話に付いてこれないから難しいよな。
951仕様書無しさん:04/11/08 21:47:58
>>942
OO不要論を唱えている奴っていたっけ?
OOは万能ではない って唱えている奴はいるけど。
952仕様書無しさん:04/11/08 21:55:32
OODは必要ないが、C++などのOOPL使えばプログラミングが楽になるんじゃ?
その程度でいいっしょ。
953929:04/11/08 21:56:40
>>926
Linux(Unix)やWindowsはメモリに関して非常に高度な割り当てを行ってる。
PCで開発するにはフラグメンテーションは殆ど気にする必要はないよ。
他のOS等では連続領域を先に確保しておくマネージャの導入をすればいい。
もちろんPCで組む場合も使える技術だ。

>>939
所詮はデータの塊ですね。
クラス図よりER図があった方がありがたい世界です。
ゲーム系もデータを表示しているだけなんですけどね・・・w
954926:04/11/08 22:10:21
>>929
その連続領域ってのでやってました。
PC以外のゲーム開発だとほぼデフォルトですよね・・・
ガベコレはないし、メモリ状況を正確に測れる事はシビアなメモリ環境では有利ですが、
その仕組みだと、好きなときに任意のサイズのオブジェクトをnewしたり、
いらなくなったのをdeleteするのって難しくないですか?
955仕様書無しさん:04/11/08 22:40:10
>>954
へたれすぎ。
お前にゃOOはムリポ
956929:04/11/08 22:48:46
>>954
スレ違いだが、汎用のnewやmallocを使わないで、既に割り当ててある
メモリを好きなサイズ分取得できる仕掛けを作る。
あまり洗練されていない(と私は思う)が、GameProgrammingGemsの
1.9フレームベースのメモリ割り当てを参照されてはどうか?
957仕様書無しさん:04/11/08 22:59:48
>>954
>好きなときに任意のサイズのオブジェクトをnew
と、
>メモリ状況を正確に測れる事
は、本気でシビアな環境下では、別にオブジェクト指向とか関係なく
両立困難だと想うんだが。

設計上の工夫でオブジェクトをnewするタイミングやそのオブジェクトの
サイズを限定する事でシビアなメモリ要件を満たすというのはありうるし、
オブジェクト指向はその「設計上の工夫」の助けになるだろう。
また、C++の機能をフルに使えるなら、new演算子の再定義ってのも
バランスの良い落し所を得るためのツールとなる。
958926:04/11/08 23:05:49
もちろん汎用のnew、mallocなんか使わないです。
GEMSは見てないですが、たぶん、あるクラスのインスタンスの最大数は
10個だからインスタンスサイズ10個分のメモリブロックを作って、
クラスのnewをオーバーロードして、そこから割り当てる
というようなやり方だと思うんですが・・・
959926:04/11/08 23:12:05
>>957
そうそう、バランスの良い落としどころを得ることになるんですよ。
でも、それはメモリがたくさんあって、new、deleteがいつでもできて
虫食いが多少出来ようが、ちゃんとコレクションされて
メモリオーバーには絶対ならないような環境と比べると、
設計の幅が狭まってしまうと思うんですよね。
リソースがシビアでもOOPはできる。けど、やっぱりリソースが有り余ってる
環境に比べたら設計の限界が出てくるってことを言いたかったんですよ。
960仕様書無しさん:04/11/08 23:39:40
日記はちらしの裏に書いてくださいね。
961仕様書無しさん:04/11/08 23:51:43
俺の周りでは、クライアントがブラウザだったら、ほぼJAVAだな。
WEB系なら有無をいわさずJAVAって感じだね。
業務アプリと同程度のものでもJAVA。
set、getメソッドうぜえって感じ。
962在日外国人参政権反対:04/11/09 00:10:31
>947
この業界でやってくんなら会社換わるなりしたほうがいいんじゃないでしょうか。
963仕様書無しさん:04/11/09 00:23:31
なんか、極端だよ。
業務系の話をしたかと思うと、次はゲームのメモリ管理なんて。
質問するやつも答えるヤツも、流れを無視していいのか?
964仕様書無しさん:04/11/09 00:39:39
               |        /,/´   .i'/     ノ/  ヾt、
                  !i !    ,.: ----- :...,_,......!.,,__ _,.. ::--' ´= :..,,_ 'j'ヽ
                t !   /´::::::::::::::::::::::::::ヾ,~``'ヽ::::::::::::::::::::::::::::::`'':::..,t,
                ヾ  i:::: : : : :..   :::::::::!j  t`:::::: :: : : : : : : :::::::::::::::::':,
                 ':,  i::: : : : :::: : : : : : :ノ,:  ゝ ミ: : : : : :::: : : : : :::::::::::!
                    ヽ .'、...;;;;;;;;;;;;;..... ,.イ ,'    ヽ : ..:::::: ::.... : : ::::::丿
               __,...r-‐ヽ:ゝ.,,_:::::::,..r'´.  ;'      `: 、::::::::::::::: : ::ノ!
              / !       ヽ`~t    /         `'- =::- ''´ ノ
              / |       ).:-+--‐‐k.、          ゝk,.....イ/
               / . i    ./='''"_,,'y.',   "''`ヽ、::      ゝ :.,,~,.ノ´
            /   .!  ._/,,,,../'--'  ':.、   -='::,=--     ヽ ,,.._,..イ    バカだからさ。
            .!  /''"~~   ~`"'t--.,,\    .....'.;       :: ~' : . ,,__
           ,r ' !/         !...,,丿__\  __,,..ノ      .:::,..r ' : : :
          .i /     ,......k-'' ‐-‐ '´  `~T~k, . . ;'    _,..:::''´ : : ,.. r:''"
          ,|.(´ _,,,,,.... -'"-=`',,k___    ,r '"~~`y''/‐‐ '''": : :,. r:::''": : : :
         / /''"´         ~~`ヽ, ::/ : : : : .ノ.;:' ,..r:'ヽ,,/.,,......,_
965仕様書無しさん:04/11/09 00:40:09
         _ _               _ _
        /::. ソ . :;;ヽ            /::. ソ . :;;ヽ
        /::.     ..:::;;;ヽ          /::.     ..:::;;;ヽ
        /::.      ..::;;;;ヽ         /::.      ..::;;;;ヽ
      /::.        ..::::;;;;i       /::.        ..::::;;;;i
      (::.        ..::;;;丿       (::.        ..::;;;丿
       >::...___..::::;;;イ         >::...___..::::;;;イ
       !ヾ. ̄⌒__ ̄彡|          !ヾ. ̄⌒__ ̄彡|
        iミ:::ミC= ≡..::: )          iミ:::ミC= ≡..::: )
       |:::     ″. ´/         |:::     ″. ´/  
       |::: ('    ( ::;;;|         |::: ('    ( ::;;;|
       |::: | ミ   ヽ\|          |::: | ミ   ヽ\|
       |::: 丶ヽ  ..:ヽ )         |::: 丶ヽ  ..:ヽ )
       ( \  l. |  ..:;;;;;;|         ( \  l. |  ..:;;;;;;|
       |::\∨丿 ″..:;;;;;|         |::\∨丿 ″..:;;;;;|
       |::: | ミ   ヽ\|          |::: | ミ   ヽ\|
       |::: 丶ヽ  ..:ヽ )         |::: 丶ヽ  ..:ヽ )
       ( \  l. |  ..:;;;;;;|          ( \  l. |  ..:;;;;;;|
       |::\∨丿 ″..:;;;;;|         |::\∨丿 ″..:;;;;;|
       |::: ( (  ゙ ..:;;;;;|         |::: ( (  ゙ ..:;;;;;|
       ( \  l. |  ..:;;;;;;|         ( \  l. |  ..:;;;;;;|  
       |::\∨丿 ″..:;;;;;|         |::\∨丿 ″..:;;;;;| サワッテモ 
       |::: ( (  ゙ ..:;;;;;|         |::: ( (  ゙ ..:;;;;;| イイデスカー
966仕様書無しさん:04/11/09 00:41:12
     __
    i<´   }\   , - 、
   ヽ.._\./  .ンく r-兮、 __
    ∠`ヽ.! /   ヾニEヲぐ ,ゝ->  
   /_`シ'K-───‐-、l∠ イ   さすがゴッグだ、 何ともないぜ!
   l´__,/l\、_ ̄0¨0)゙@Yヘ, -┤   
.    l'___|⌒ヾ''ー==、ーr='イ i二|      
   / .」   i   /./7r‐く  lー!      
.   f.  ヽ‐i人.∠'<   _i. l,.-ゝ.
    トiヘヘ「ト〈      `X  トレi7__|
   〉ト:トハj`! i.    /  トー┤lルj,リ
  /‐+----+‐l    iー--i---ヾ'〃
.  l_i____i__|   |___i,__i_|
967仕様書無しさん:04/11/09 00:55:30
>>963
でもまあスレタイには逢ってるから、いいんでないの?
968仕様書無しさん:04/11/09 01:04:56
>>909のような要件で、Criteriaというか検索条件クラスを作った。
複数の条件を任意にWebブラウザで取捨できる。
条件ごとに、その入力内容は異なり、OrやAndが入り混じる。
□ Foo
  〇 branchA 〇 branchB
□ Bar
  □ optionP □ optionQ
□ Baz
  〇 branchX
  〇 branchY
  〇 range  [yyyy/mm/dd]〜[yyyy/mm/dd]
□ Zot [    ]

こんなの if 〜 "xxx" + "yyy" なんてやってられない。
969仕様書無しさん:04/11/09 07:45:15
業務系のOOってあれだよ。
かっぱ巻きとかんぴょう巻きと玉子焼きしかメニューのない寿司屋みたいなもの。
たしかにそれらも寿司には違いないけどね。
970仕様書無しさん:04/11/09 12:25:15
>968
仕様追加でカラムのMAX値を取得する必要性が出てきました。

select MAX(xx) を書く必要があります。

さて、どういう風に取り込みますか?
971仕様書無しさん:04/11/09 15:10:45
 業務系のOOってさ、DBに入ってるデータから派生して
必要になるデータが少ないのと、いつでも高速にDBへ
アクセスできるって言う前提があるから、データをDB以外の
部分で管理する必要がないという理由で不要だと考えられる
わけだよな。これはDOA派の言い分になるのかな。
 でも、データへのアクセスを抽象性を持たせて階層化して
おくことで、仕様変更に柔軟に対応できるという点で意味はある
とも考えられるわけだよな。
 じゃ、業務系でOOの効果を得るには、業務系の抽象性って
いうのが、どうあるべきかって問題になるってこと、
具体的には、まずMVCの分離が行われているとすると、
次にいかにM(モデル)を階層化するかって問題なわけだ。




972仕様書無しさん:04/11/09 15:45:23
カラムってなんだよ列のことか?ろくにDB触ったことのないゲーム系はすっこんでろ。
なに、ゲームじゃない、S○NY様のプログラマだって?MDBなんかつかってるから
あちこち不具合が出るんだよ。奏じゃなくても何でもいいがOOとRDBの関係がどんなものか
二晩考えてからで直して来い。

で、取ってくる列の属性としてクエリ式を持たせるのが普通じゃないの?
検索条件と取ってくる式は別オブジェクトだから、この際まとめて考えなくてもいいと思うんだが。
973仕様書無しさん:04/11/09 17:37:47
「オブジェクト指向とはオブジェクト同士の相互作用としてシステムの振る舞いを捉える考え方である」
(wikipediaより)

業務アプリの大半は伝票や台帳がDBに替わって、鉛筆がマウスやキーボードに変わっただけだろ?
一体その中で何をオブジェクトにするねん という話。

データはDBが管理してくれるし、データの操作はSQLでできる。
データの整合性のチェックや、連携操作(カスケード式にデータを削除する機能とか)もDBがやってくれる。
なんだ結局全部DBがやってくれるんじゃん。

分析はオブジェクト指向分析でもいいが、そのアウトプットはクラス図やシーケンス図じゃなくて、
DBのテーブル設計やデータフロー。
あとは「はい、コーダーさん、このトランザクションが発生したらこのテーブルとこのテーブルを更新してね。
こっちのコーダーさんはこの画面でこのボタンが押されたら、このテーブルからデータ取ってきて
ここに表示してね」でも十分な場合が多い。


オブジェクト指向が世に出て数十年、さまざまな入門書/解説書が溢れ、特定の分野の現場ではすでに
常識になっているのに業務アプリの分野ではさほど普及しておらず、まったく理解していない人も
多いのが何よりの答え。
適用することによるメリットがよくわからないから「オブジェクト指向は難しい」となってしまう。

それを使わなくてもそれほど不自由のない状況で新しい道具を与えられても、無理して使い方を覚えようと
する人はあまりいない。

974仕様書無しさん:04/11/09 17:56:04
だから糞レベルのSョが威張り散らす世界になるわけなんだ。
975仕様書無しさん:04/11/09 18:01:00
http://www.unisys.co.jp/dotnet/pdf/shinwa.pdf

オブジェクト指向は決して万能ではありません。メリットもあればデメリットもあります。
それにもかかわらずオブジェクト指向技術が神話化され、利用すること自体が「目的」
となってしまっているプロジェクトもあるようです。
オブジェクト指向を盲目的に信じるのではなく・・・
976仕様書無しさん:04/11/09 18:10:35
>>972
>カラムってなんだよ列のことか?
碌に ORACLE も触ったことがないわけですね。
977仕様書無しさん:04/11/09 18:18:23
業務系は確かに、複雑な非線形方程式を解くと言うより、
多連立一次方程式を如何に効率よく解くかというのに似てるよな。
高尚な思想なんてなしに、ごりごりと代入法だけで解くヤツもいると。
 でも、OOのスレなんだから、とりあえずOOを適応することを考えて、
そのメリットとデメリットについて語るべきだろうな。
UML2がでてきたのも、この業務系の単調さを考慮してのことなんだろうかね。
978仕様書無しさん:04/11/09 18:35:29
.NETのDataSetって結局DOAだよな
979仕様書無しさん:04/11/09 19:29:19
>>978
そうだよな。パフォーマンス要件からDataAdapterしか使わなかったりするけどな。
DataSetもバインディングも日本向けの仕様じゃないよな。
980仕様書無しさん:04/11/09 19:49:18
「OOは万能」そう考えていた時期が私にもありました。
それが妄想だったと認めるのはつらいですが、これもOOが認知され成熟した結果だと受け止めています。
今の私にできることは,かつての私と同じように目が見えなくなってしまっている人をケアしてあげることだと思っています。
981仕様書無しさん:04/11/09 23:45:38
>>1
超遅レスでスマソが、OOはコード量減るよね?
982仕様書無しさん:04/11/10 00:14:00
>981
OOで減るのではなく、継承により減る。
OOで設計をした結果ではなく、OO言語の恩恵によるだけ

OOで設計したからって、Cで書いたらおんなじだろ
むしろ増えそう
983仕様書無しさん:04/11/10 00:20:24
さらに言えば、機能の継承を連発すればもっと減る。
けど、それはオブジェクト指向プログラミングではない。

機能の継承と内包の継承の差を理解してるかしてないか
ここがオブジェクト指向の入り口
984仕様書無しさん:04/11/10 00:26:41
>>982
>>983
言いたくないけど、言いたいこともわからないし、日本語もおかしい。
もうちょっと頭の中でまとめて書け。
985仕様書無しさん:04/11/10 00:28:20
けど、
内包の継承と機能の継承が相反するものではない。

内包の継承の結果、機能が継承されるし、
何も考えず機能の継承をした結果、内包になっていることもある
986仕様書無しさん:04/11/10 00:29:06
>984
お前がわかってないだけだよ
987仕様書無しさん:04/11/10 00:35:20
コード量の話から、いきなりis-aとhas-aの関係の講釈を垂れ始める理由が分からん。
988仕様書無しさん:04/11/10 00:44:14
>>986
ほんとにそう思ってるなら重傷だ。
厨房、工房なら寝ろ。素人で意見を求めたいなら、そういう
文体で書け。

一応、今回だけ注釈入れといてやる。
>OOで減るのではなく、継承により減る。
>OOで設計をした結果ではなく、OO言語の恩恵によるだけ
設計がヘタレてればどんな言語でも、似たような関数やクラスが
多数現れ、コードが嵩張る。

>OOで設計したからって、Cで書いたらおんなじだろ
例えば、ポインタを使うことでC++で書けるコードは、
僅かな変更でCのコードに直せる。

>さらに言えば、機能の継承を連発すればもっと減る。
無駄にクラスを増やせばコードが伸びるのは自明。

>機能の継承と内包の継承の差を理解してるかしてないか
>ここがオブジェクト指向の入り口
なんでそんな話になるのかわからん。そもそも表現がおかしい。
機能の継承?has-aは継承とはいわん。
989仕様書無しさん:04/11/10 01:00:07
内包の継承ってなに?
集約 or コンポジットのこと?
990仕様書無しさん:04/11/10 01:26:44
OOのコード量が構造化よりも減る事が感覚的にわからないなら、
それはきっとクラスを使いこなせていないんですよ。
991仕様書無しさん:04/11/10 01:49:19
ヘタレ設計のくせにOOな言語でコードが減るのは、
単にフレームワークがクラスライブラリとして既に提供されてるから。ライブラリが見えない部分で使われてるだけのこと。
 それが言語仕様と別の話なのがわからない>>986は、適性なしだな。
992仕様書無しさん:04/11/10 01:57:25
>>989
違うよ
機能、内包、外延でぐぐってみ
993仕様書無しさん
このスレっていい感じだけど次スレあるの?