トップページ⇒tech
1001コメント396KB

オブジェクト指向の先には一体何があるんですか?

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2009/01/28(水) 02:21:42
何が見えてるんですか?
0232デフォルトの名無しさん2010/03/19(金) 21:30:22
>>231
意味がないところ
別にオブジェクト単位にしたところで工数など1hたりとも減らすことはできない
0233デフォルトの名無しさん2010/03/20(土) 00:36:58
>>230
対象物をすべてオブジェクトって概念で抽象化しようとするのに無理があるところw
0234デフォルトの名無しさん2010/03/20(土) 15:26:43
とりあえず、仕様を記述するための規格化された優秀な言語が欲しいな。
実装は後回しでもいいから、人間の意図の表現とプログラミング言語の間を埋める、
表現の手段が欲しい。
0235デフォルトの名無しさん2010/03/20(土) 15:56:31
Prologじゃだめなの?
0236デフォルトの名無しさん2010/03/20(土) 20:22:15
>>232-233が何か重大な勘違いをしている気がする件。

オブジェクト指向は一次的な工数を減らすためにやるものではないし、
ましてや、対象を全てオブジェクト化することを目的としてやるものでもないぞ?
0237デフォルトの名無しさん2010/03/20(土) 20:46:16
>>236
じゃあ、なんのためにやるの?
成果を数字で表してくんない?
0238デフォルトの名無しさん2010/03/20(土) 21:05:38
>>237
なかなかきちんとまとまった説明はないけど、例えばこれとか参考になるんじゃないかな。
http://itpro.nikkeibp.co.jp/article/COLUMN/20060921/248617/

要求の変化に伴う保守性や再利用性、なんてのはなかなか数値化できんわな。

個人的な経験から言えば、OOの基本的な概念を軽く押さえたら、
次はデザインパターンの勉強をするのが理解の早道だと思う。
0239デフォルトの名無しさん2010/03/21(日) 00:16:39
>>237
まぁ、グローバル変数をオブジェクトに押し込んでみました、ってだけの技術やからね…
成果なんて出ないと思うよ
0240デフォルトの名無しさん2010/03/21(日) 00:45:10
>>239が何を言っているのか分からない
0241デフォルトの名無しさん2010/03/21(日) 00:45:57
わかんないんです(><)
0242デフォルトの名無しさん2010/03/21(日) 00:46:32
>>238
結局、何が言いたいのかまったくわからない
自分の言葉で単刀直入に結論から言ってよ
0243デフォルトの名無しさん2010/03/21(日) 01:18:48
>>242
俺の理解では、

オブジェクト指向の目的:
・複雑な要件を「まとまり」単位で整理することで、人間の手に負えるようにする
・「まとまり」同士を疎結合に保つことで、要求の変化に柔軟に対応できるようにする
(・多人数開発において、個々のコードの影響範囲を限定することでバグの作りこみを減らす)

「まとまり」につく名前は「オブジェクト」だったり、そうでなかったりするけど、基本は同じ。
0244デフォルトの名無しさん2010/03/21(日) 02:11:13
>>243
つまり数字ではでてこないのね
気がするだけレベルなのがな
0245デフォルトの名無しさん2010/03/21(日) 02:33:13
>>244
どういう種類の数字?

こうした原則に則って粛々とやっていけば、目に見えて保守しやすいコードがアウトプットできるし、
仕様変更に伴う工数も大幅に短縮できるはずだが。

つうか、見ての通り、きちんとコーディングする上でごくごく当たり前の方法論でしかないわけで、
『「工数○○日短縮」って数字で示されないとやる気が起きない』とかいう話になること自体が不思議。
0246デフォルトの名無しさん2010/03/21(日) 02:41:06
>>245
>仕様変更に伴う工数も大幅に短縮できるはずだが。
だったら数字をだせよ
0247デフォルトの名無しさん2010/03/21(日) 02:43:21
>>245
逆に考えよう
それが自分のただの思い込みだったら?
ぶっちゃけC++とC言語とで比べてまったく同じ処理をするソースを書いたことないでしょ?
0248デフォルトの名無しさん2010/03/21(日) 02:56:25
>>246
そりゃ、書いてるコードや仕様変更の内容による。

>>247
異なる言語で同じ処理を「試しに」書けてしまうような規模の開発でやったら、
そりゃ、「効果が薄いわりに冗長なコーディングを強要される」と感じるに決まっている。

個人的な経験で言えば、数千NCSS程度のコードでも、こういうことをきちんとやるだけで
保守性にかなり差が出てくると思う。
0249デフォルトの名無しさん2010/03/21(日) 03:01:26
>>248
>保守性にかなり差が出てくると思う。
「思う」以上のこと言えないよね?
0250デフォルトの名無しさん2010/03/21(日) 03:03:51
>>249
実体験と書いてあるわけだが。
0251デフォルトの名無しさん2010/03/21(日) 03:05:24
>>250
だったら「思う」じゃなくて事実を書けばいいじゃん
0252デフォルトの名無しさん2010/03/21(日) 03:11:45
>>251
揚げ足取りがやりたいならよそでやってくれ。
0253デフォルトの名無しさん2010/03/21(日) 03:19:46
>>252
どこが上げ足とってんだよw

工数を大幅に短縮できるっていうからそれはどうして?って聞いてるのに
これこれこういう理由で具体的にこう減らせる
って話をしなきゃいけないのに「思う」とかそんなあいまいなレスつけるからだろ
知らなきゃレスしなきゃいいだろ
0254デフォルトの名無しさん2010/03/21(日) 03:28:33
>>253
実体験に基づいて、実際にオブジェクト指向を採用することによる効果が出てくるコード規模について、
推測を交えて話したら、君の中では俺が全てについて憶測で話していることになるの?
0255デフォルトの名無しさん2010/03/21(日) 04:15:50
>>254
だから知らないなら無理してレスしなくていいって
別に俺の問題に対する答えをもってるわけじゃないんでしょ?
0256デフォルトの名無しさん2010/03/21(日) 04:30:53
>>255
えーっと、君の問題って何だっけ?
0257デフォルトの名無しさん2010/03/21(日) 04:31:57
>>255
一人でコード書くなら差はあまり感じられないかもしれない

オブジェクト指向は、クラスのカプセル化と
小規模なクラス群からの継承やコンポジションで開発を進めていく
クラス型の選択で仕様変更を楽にできるメリットや
複数人で開発するにあたり、機能を細かく開発したり、拡張部分を楽に開発可能だし
カプセル可により、他人が安全に機能を運用できるメリットもある

特筆すべきなのは、直感的にソースがよめるため可読性が高くなること
部品を集めて組み立てるかのように、機能の選択で構築するから分かりやすい

言い換えると、中途半端なオブジェクト指向が一番読みづらい
スパゲティコードとなんら変わらないものになる
0258デフォルトの名無しさん2010/03/21(日) 04:39:17
>>257
だから具体的な答えをもってないのになんでレスするの?
無理しなくていいよ
0259デフォルトの名無しさん2010/03/21(日) 04:44:18
>>258
可読性の向上や、想定していない使用方法からくるバグとデバッグ時間
コードの修正による再コンパイル時間
諸々の理由からくる余計な時間が省けるだけ

元より開発能力の高い人だけの少人数開発で
再開発しない単発の開発なら
おそらく工数は変わらないか
余計な時間がかかるかもしれない

まあ本当に開発能力が高いなら微々たる時間だろうけど
0260デフォルトの名無しさん2010/03/21(日) 04:52:08
>>259
>可読性の向上や、想定していない使用方法からくるバグとデバッグ時間
向上してるかどうかなんてわかんないんでしょ?
0261デフォルトの名無しさん2010/03/21(日) 04:52:22
>>258
お前の言っている数値ってなんだ?
基準は相対基準か絶対基準か?

工数は普通相対基準で計るもの
相手が工数が減ったと言っているから充分だが

相手に、何の数値を求めている?
何も分かっていないで言ってないか?
お前馬鹿だろう
0262デフォルトの名無しさん2010/03/21(日) 04:59:09
>>261
あー、わからないならレスしなくていいって
そこからいってなにをすれば証明にいたるのかわからない奴相手にしたくないから
0263デフォルトの名無しさん2010/03/21(日) 05:00:16
>>260
可読性がってこと?
まあそうだね
数値化はできないな

だけど、開発規模がでかくなればでかくなるほど
自分が作成していないコードが増えることになる
そのとき、ヘッダ名(クラス名)と
外部に公開されたメソッド(publicなメンバ関数名)さえ分かれば
何をする部品なのかすぐわかる

コメント残せばいいじゃんと思うかもしれないが
他人が作ったコードと、他人が書いたコメントが一致してるかどうかなんてはっきりいって信用できん

後はUMLの設計図、クラス図さえあれば
どのクラスと関係を持ってるのかがわかればより早いよ
0264デフォルトの名無しさん2010/03/21(日) 05:04:00
>>263
ごちゃごちゃ無駄なこと書いてるけど結局可読性が上がってる云々とは関係ないじゃないか
だからわからないのに無理してレスするなよ
0265デフォルトの名無しさん2010/03/21(日) 05:06:40
>>264
ひとつひとつのメソッドを全て読むのと、名前だけの確認で終わるのどっちが早いのかはわからない?
0266デフォルトの名無しさん2010/03/21(日) 05:11:03
>>265
なんで全然関係ない話をするの?
0267デフォルトの名無しさん2010/03/21(日) 05:13:17
>>266
可読性の話の続きなんだが
0268デフォルトの名無しさん2010/03/21(日) 05:14:33
もしかして、プログラミングしたことないのか?
理屈だけで覚えようとしてるなら用語もわからないかもしれないな
0269デフォルトの名無しさん2010/03/21(日) 05:17:44
>>267
それがC言語からC++に変わって(オブジェクト指向という意味で)のメリットなの?
君、自分がまったく関係ない話してるの気がついてる?
0270デフォルトの名無しさん2010/03/21(日) 05:19:25
人には具体的な答えを求めて
自分は片言の日本語でやりとり
一つでもおかしな点があると思い込んだら全否定
質問して知識の物乞いしてんのに殿様気取り
普通ならぶん殴られてもおかしくないから直せよ
0271デフォルトの名無しさん2010/03/21(日) 05:21:12
>>270
だから別に知らないならレスしなくていいって言ってるじゃん
0272デフォルトの名無しさん2010/03/21(日) 05:35:05
>>269
外部にみせていいメソッドだけ公開できるのはC++からだろ
カプセル化ができないと全てのメソッドを公開しないといけない
だから全部読むはめになる
どこもずれていない

あといつからCとC++の話になった?
構造指向とオブジェクト指向は両極にある概念じゃない
C++の概念はCの概念を内包する
Cの考え方はわかっているのだろ?
それならオブジェクト指向が延長線上にあるのもわかっているはず
わからないなら、アセンブラからCに変わって発達した
構造化プログラミングのメリットを269なりに述べてみ

あと、はっきり言って認めた部分もあるだろ
理屈がわかるならわかっているはずだ
そうでなければただの荒らし
もうレスは返さない
02732562010/03/21(日) 05:43:24
>>257
代わりに答えてくれてありがとう。
どうも、彼は単に自分の知らない概念を全否定したいだけの人だったみたいだね。
時間を無駄にしてしまった。
0274デフォルトの名無しさん2010/03/21(日) 05:46:36
あと開発速度でいえば、CとC++なら二分の一以下になる
コンテナ操作が標準であるし、templateで静的動作(コンパイル時動作)が可能になる
煩雑な型の作成すら汎用化できるため
今まで個別に作っていたクラスを一つのファイルで書ける

正直、これは説明しようにも長くなりすぎるから割愛する
0275デフォルトの名無しさん2010/03/21(日) 05:47:26
>>272-273
なんでさっきから知らないのに無理やりレスするの?
いいって言ってるのに押し付けるのやめてよ
0276デフォルトの名無しさん2010/03/21(日) 05:48:16
>>273
はっきり言えば、あなたの言い方が
多分オブジェクト指向を理解していると言いづらかったから横槍いれたんです
もっと勉強してください
0277デフォルトの名無しさん2010/03/21(日) 05:50:10
>>276
そんなこといって結局メリットに関してなんも具体的な説明できないじゃん
だから知らないならレスしなくていいって言ってたのにやけにつっかかるなぁ
0278デフォルトの名無しさん2010/03/21(日) 06:00:07
>>277
再コンパイル時間については?
可読性の向上については?
反論ないようだね

これ以上レスしないから安心していいよ

悪質なあなたの反論を掻い潜ることができたと言うことは
私の理屈は間違いないということだ
なお続けようとするあなたに同情すらしてやらないよ
理論もプログラミングも私より劣っている人に説明できて
理解を簡潔にまとめることができた
0279デフォルトの名無しさん2010/03/21(日) 06:26:18
>>278
あれが具体的?
頭おかしいんじゃないか?
工数はいくつ減らせるの?
普段仕事してて1hだって根拠を求められるのに
なんで言語に対してはそういい加減なの?

ちょっとわけありでいい加減なことやってる場合じゃないから
あなたみたいな人普通に邪魔なんだけど
0280デフォルトの名無しさん2010/03/21(日) 06:30:10
それと何度もいうけど
知らないなら無理やりレスするのやめてもらえます?
まったく同じ仕様のものをC言語とC++とで比較した経験すらおそらくあなたないですよね?
0281デフォルトの名無しさん2010/03/21(日) 06:33:43
>>280
知らないならレスしなくていいよ
0282デフォルトの名無しさん2010/03/21(日) 06:45:02
>>279
工数?
1/2以下
0283デフォルトの名無しさん2010/03/21(日) 11:11:28
一つの単位で機能を管理・提供できる点がoopじゃないのん。
cのstructじゃ処理(関数)を外側で指定(関数ポインタへの代入)しなくちゃならないんだし。

waveのinとoutの低レベルな関数はcでべた書きで用意して、
waveファイル, waveinストリーム, waveoutストリームってな感じで、
簡単に扱えるようにしたclassはc++で用意してってやると、
利便性も拡張性も供給できて、高レベルも低レベルも両方同じコードで提供できる。

詰まる所、需要と供給の話程度かと。
0284デフォルトの名無しさん2010/03/21(日) 13:37:34
>>279
まぁ、貴方のように、既にデスマってしまった人を救済する銀の弾丸ではないかもね。
そもそも、そういう事態に陥らないための方法論がオブジェクト指向。

あるいは、レガシーコードをどうにかしたいって話だったら、こういう本を読んでみると良いんじゃないかな。
http://www.amazon.co.jp/dp/4798116831
http://www.amazon.co.jp/dp/4048676881
0285デフォルトの名無しさん2010/03/21(日) 23:42:59
>>283
てか「処理」と「データ」をオブジェクトの名の下に一元管理できるのは大きな要素だと思う
0286デフォルトの名無しさん2010/03/22(月) 16:33:30
>>285
処理とデータを関連づけるのはいいが
一緒にするのはダメなオブジェクト指向の典型だ
0287デフォルトの名無しさん2010/03/22(月) 17:03:59
>>286
おまえ、手続き抽象ぐらいは理解した上で書いているのか?
0288デフォルトの名無しさん2010/03/22(月) 17:57:47
>>287
否定してるわけじゃない
インターフェースとデータは分けて管理するのは当然だろ
0289デフォルトの名無しさん2010/03/22(月) 18:56:51
>>288
それって細かい実装技術でしょ?
それが設計にまで影響しちゃうのってないじゃん
なんかこのスレに相応しくない話してない?
インターフェースクラスが本質の設計に影響を与えるのってないでしょ?
0290デフォルトの名無しさん2010/03/22(月) 18:57:49
インターフェースクラス??
0291デフォルトの名無しさん2010/03/22(月) 19:05:19
>>290
どっちでもいっしょでしょ?
0292デフォルトの名無しさん2010/03/22(月) 19:06:11
>>291
え?w 何と何が?w
0293デフォルトの名無しさん2010/03/22(月) 19:06:42
>>292
上げ足取りたくてレスしたの?
死ねよ
0294デフォルトの名無しさん2010/03/22(月) 19:09:19
>>293
どうせ二行費やすなら>>292答えろよw

とかいいつつゴメンね、ぐぐったら"インターフェースクラス"なるものの正体が分かったわ。
0295デフォルトの名無しさん2010/03/22(月) 19:10:19
>>294
まあ、インターフェースが設計に影響与えるのはおかしいでそ?
なのでこの話はここでおしまい
0296デフォルトの名無しさん2010/03/22(月) 19:13:58
>>295
なんか誤解していたら申し訳ないので伝えておく。
俺がここまでにレスしたのは>>290 >>292 >> 294だけ。
「インターフェースクラス」っていう謎の用語に怯えただけ。

話の続きは>>288さんとでもやってんろ。
0297デフォルトの名無しさん2010/03/22(月) 20:37:29
>>295
だいたいの設計には必要無いかもな

でもひとつのデータに複数種類のアクセス方法(インターフェース)が必要な場合どうする
まさか一つのクラスにまとめるわけないだろ

インターフェースの管理についても設計すべき時なんてプログラムやってたらいくらでもあるだろ
0298デフォルトの名無しさん2010/03/22(月) 20:38:36
>>297
ないよ
ないから君の話にはこれ以外のレスしない
おわり
0299デフォルトの名無しさん2010/03/22(月) 20:39:12
そんなに実例みたくばboost読んでみろよ
0300デフォルトの名無しさん2010/03/22(月) 20:41:30
boostのインターフェース設計がまさか設計無しに作られてるとか低能な言い訳しないでね
0301デフォルトの名無しさん2010/03/22(月) 20:44:55
ごめん
Cがどうとか言ってた基地外か
boost読めないから無理だったね
0302デフォルトの名無しさん2010/03/22(月) 22:51:31
あたかもboostがいいようにいうけどまったくいいことないと思うよ
0303デフォルトの名無しさん2010/03/23(火) 01:29:06
いい悪いの話ではない
話題をそらすなよ
0304デフォルトの名無しさん2010/03/23(火) 01:34:20
>>297
javaだとインターフェースクラスを直接作れるね
C++だと、メンバ変数のない純粋仮想関数だけのクラスだと思えばよし
0305デフォルトの名無しさん2010/03/25(木) 01:10:49
マルチエージェント指向
0306デフォルトの名無しさん2010/03/27(土) 01:07:56
>>303
なら、boostはどんな説明をするために話題に出したの?
こんなのオブジェクト設計なんてしてねーただのオナニーライブラリじゃん
0307デフォルトの名無しさん2010/03/27(土) 15:22:24
>>306
論派したいんだろうけど、話題反らしたり無知披露したりで屑認定されてるよ
0308デフォルトの名無しさん2010/03/27(土) 15:34:49
>>306
頭悪いんですね…
0309デフォルトの名無しさん2010/03/27(土) 18:14:44
オブジェクト指向?なにそれ、おいしいの?
オブジェクトなんて構造体でしょ?なんでそんなに有り難がる必要があるだろう
ましてや構造体でシステム設計とか意味不明
0310デフォルトの名無しさん2010/03/28(日) 01:59:40
>>309
勉強して批判しようね屑
0311デフォルトの名無しさん2010/03/28(日) 13:46:27
熟練のプログラマって意外とオブジェクト指向で作らないんだよね。
考えが古いのかな?
実はあまり必要ないとか?
0312デフォルトの名無しさん2010/03/28(日) 14:05:40
>>311
意味ねーし
オブジェクト指向になって具体的にいいことって出せる奴いねーもん
0313デフォルトの名無しさん2010/03/28(日) 14:12:51
>>312
Stringクラスも不要?
0314デフォルトの名無しさん2010/03/28(日) 14:17:16
>>313
仮に似たような機能C言語で作ったらいらないな
0315デフォルトの名無しさん2010/03/28(日) 14:25:46
>>314
文字列の長さ順にソートするような場合どうする?
strlenを毎回呼ぶつもり?
0316デフォルトの名無しさん2010/03/28(日) 15:15:18
>>315
それはC++でないと作れない機能ですか?
ってことだな
同じ労力だと思うぜ
0317デフォルトの名無しさん2010/03/28(日) 15:47:16
>>316
ってことだな? 思うぜ?

>>315に具体的に答えることは不可能?
「仮に似たような機能C言語で作ったら」と言ってたのに。
0318デフォルトの名無しさん2010/03/28(日) 15:52:23
>>317
は?
それって何か問題あるの?
っていうか話の主旨をどこにしたいの?
俺は別にライブラリの出来不出来の話をしたいわけじゃないんだけど?
0319デフォルトの名無しさん2010/03/28(日) 15:53:45
>>318
ライブラリの出来不出来の話などするつもりはない。
0320デフォルトの名無しさん2010/03/28(日) 15:55:30
>>319
じゃ、何が言いたいんだよ
さっきから
0321デフォルトの名無しさん2010/03/28(日) 15:56:47
>>320
「文字列の長さ順にソートするような場合どうする?
strlenを毎回呼ぶつもり?」
0322デフォルトの名無しさん2010/03/28(日) 16:16:25
stringクラスと、そのsize()メソッドがあるから、
そのインスタンスsに対しs.size()とサイズを取得できる。

char *に対してはstrlenを毎回呼び出す必要があるか、
呼び出さないためには値をキャッシュする変数を別途用意する必要があり、
それらの生成破棄など、管理する手間が別途発生してしまう。
また、キャッシュのための変数の中身は、
strlenの結果と同一であるように注意を払う必要も出てしまう。
これは非常に煩わしい。

一方、stringクラスのsize()メソッドを使う場合は、
サイズの再計測もさせないように実装しうるし、
それゆえ、別途キャッシュするような変数も、
その変数との同一性への心配も不要になる。

オブジェクト指向になって具体的にいいことのひとつだと思う。
0323デフォルトの名無しさん2010/03/28(日) 17:02:42
>>322
っていうC言語の関数を用意したら?
でお仕舞いな話を出されてもねw
0324デフォルトの名無しさん2010/03/28(日) 17:16:18
>>323
そんな手間をかけるくらいなら、
俺はstring#sizeを使って単に、
bool sizegreater(const std::string &a, const std::string &b) {
return a.size() > b.size();
}
こう書いて、sort(v.begin(), v.end(), sizegreater);に渡す。

> っていうC言語の関

ご苦労様ですw
0325デフォルトの名無しさん2010/03/28(日) 17:18:23
>>324
だから君が言ってるのはライブラリの有無の話でしょ?
最近、こんな馬鹿が金もらってプログラム組んでるからな
0326デフォルトの名無しさん2010/03/28(日) 17:20:11
#include <string>
#include <vector>
bool sizegreater(const std::string &a, const std::string &b) {
return a.size() > b.size();
}
int main() {
using namespace std;
vector<string> v;
sort(v.begin(), v.end(), sizegreater);
return 0;
}
毎回strlenを呼ばずにCで同等のことをするのは大変。
大変じゃないというのならサクッと示してほしいところ。
0327デフォルトの名無しさん2010/03/28(日) 17:21:37
>>326
>毎回strlenを呼ばずにCで同等のことをするのは大変
大変(笑)
0328デフォルトの名無しさん2010/03/28(日) 17:22:30
>>325
すでに>>322で書いたように、stringに対してs.size()が呼べるからこそ、
>>315の問題の部分は、return a.size() > b.size(); と書ける。

オブジェクト指向じゃないとこうならない。
0329デフォルトの名無しさん2010/03/28(日) 17:25:55
>>328
バーカw
しゃべるたびに頭になにも入ってないのがバレバレだなw
0330デフォルトの名無しさん2010/03/28(日) 17:26:39
オブジェクト指向不要論みたいなのを掲げて煽ってるヤツって釣りじゃねーの?
本当に不要とか思ってるのなら単なる馬鹿で相手にするだけ時間の無駄だと思うんだが。
0331デフォルトの名無しさん2010/03/28(日) 17:27:57
文字列の長さでソートする時、strlenを毎回呼び出さないですむ方法が、
Cでスマートに表現できるのなら俺は>>329をバカと呼んだりはしないよ。
■ このスレッドは過去ログ倉庫に格納されています