オブジェクト指向・嗜好・試行・至高・歯垢・伺候

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
オブジェクト指向を激しく嗜好したり、
オブジェクト指向を何度も試行したり、
オブジェクト指向は至高のものだと考えたり、
オブジェクト指向は歯垢のように無駄だと思う人が
オブジェクト指向に伺候する人に喧嘩売ったりするスレです。


前スレ

オブジェクト指向・嗜好・試行・至高・歯垢
http://pc8.2ch.net/test/read.cgi/tech/1049778124/l50

誰も立てないので立てました。
重複していましたら、削除依頼をお願いします。
2デフォルトの名無しさん:2005/10/23(日) 19:03:22
結局ポリモいらない君は世界に1つだけのオブジェクト
3前スレ987-988:2005/10/23(日) 19:07:54
>>前スレ998
strategy くらい分かってるよヽ(`Д´)ノ
強引に全部まとめようとすると失敗しやすいってことを言っただけだよ。

っていうか、ミサイルをまとめるとか言い出したのは俺じゃないよ。・゚・(ノД`)・゚・。
4デフォルトの名無しさん:2005/10/23(日) 19:16:19
>>3
まあ、無理な一般化をするなというのには同意。
で、そんな例を持ち出して何を言いたかったのやら。

うまくポリモーフィズムを使えれば
場合によっては使われない無駄な変数を持たなくて良かったり
分散しがちな条件分岐をまとめられたりする。
5デフォルトの名無しさん:2005/10/23(日) 19:27:25
>>4
文章読んでるとなんかC言語的なメモリコスト寄りの発想だな。
ポリモいらない君じゃないけどそれってオブジェクト指向なんかな。
64:2005/10/23(日) 19:32:12
>>5
んー、そういう言い方の方がポリモいらない君には分かりやすいと思って。
C言語的メモリコストというより、データベースの正規化の話に近いかも知れない。
7デフォルトの名無しさん:2005/10/23(日) 21:46:17
>>6
オブジェクト指向とはちょっと離れるってこと?
8デフォルトの名無しさん:2005/10/23(日) 21:51:03
>>7
継承の is-a 関係により子クラスを親クラスと同一化することによって、脳内メモリを節約することが目的。
94:2005/10/23(日) 22:03:15
>>7
必ずしもそうとは言えないんじゃないかな。
どういう単位でオブジェクト(ないしクラス)を分割すればいいか、
オブジェクト同士がどういう関連を持てばいいのか、という話につながるし。
ある程度正規化されていた方がスッキリはする。良いか悪いかはケースバイケースだけど。
10デフォルトの名無しさん:2005/10/23(日) 22:04:23
>>8
継承の仕組みはわかるけど。
使い方がC言語的に見るのだけど。
118:2005/10/23(日) 22:11:47
>>10
なぜ
12デフォルトの名無しさん:2005/10/23(日) 22:30:30
>>11
だって、始めに設計ありきじゃない?
うまくまとまるかどうかは結果であって目的じゃないと思うのだけど。
134:2005/10/23(日) 22:45:33
>>12
ええと、それがC言語的なの?

> うまくまとまるかどうかは結果であって目的じゃないと思うのだけど。

現実主義的で共感しなくもないのだけど、何をもってうまくまとまるとするかに寄るし、
うまくまとめる必要を感じることはあるかな。
14デフォルトの名無しさん:2005/10/23(日) 23:33:08
>>13
じゃあ、前スレのホーミングミサイルとミサイルってどういう扱いになるの?
15792:2005/10/23(日) 23:33:56
987
おいらはパターン2(粒度を荒くする)パターンが好きですな。
荒いスケールを基本クラスにして、詳細は派生クラス群で実装。
(クラス間の処理はコールバックとかシグナルで対応)
VCLとかwxWidgetとかメジャーなGUIフレームワークはそうかな?

……ただ、こんな重たいフレームワーク作るのは大変だから、
〆切のキツい時は無理だろうな……
164:2005/10/24(月) 00:16:20
>>14
前スレ987-988の話? それともその前にやっていたやつの話?
何についてかよく分からないのではっきりとした事は言えないけど、
そのゲームには非ホーミングミサイルとホーミングミサイルしか無いの?
その他の分類は一切無いの?
非ホーミングミサイルは追跡対象が無いホーミングミサイルと考えてもいいの?
そこまで単純ならわざわざ分ける必要は無いんじゃない?

大事なのは対象となる問題領域内で一般化できそうかを判断する事。
その問題領域が曖昧だとなかなか難しいけどね。
特にゲームなんか「その方が面白いから」と言う理由で簡単に変わってしまう。
だから一度判断した事を変更していく手法(リファクタリングとか)が注目される。

っていうか何で俺に聞くんだろう。
17デフォルトの名無しさん:2005/10/24(月) 00:52:19
>>16
>っていうか何で俺に聞くんだろう。
たまたまいたからw

オブジェクト指向的な設計をしてから、一般化だと思うんだけど。
設計をした時点だとホーミングミサイルとミサイルってどういう扱いになるの?
18デフォルトの名無しさん:2005/10/24(月) 00:56:17
>>17
設計にもよるんじゃない? 答えは1つじゃないだろう。
194:2005/10/24(月) 00:57:52
>>17
どんなゲームなのか詳しく分析するのが先です(笑)
ごめん、もっと続けたいけど俺はもう寝る。
20デフォルトの名無しさん:2005/10/24(月) 02:49:35
ミサイルがスーパクラスなるか、ミサイルにセンサーオブジェクトを委譲させるか
21デフォルトの名無しさん:2005/10/25(火) 03:53:25
oOoゲームの設計について語るスレoOo
http://pc8.2ch.net/test/read.cgi/gamedev/1005576459/
22デフォルトの名無しさん:2005/10/26(水) 08:12:21
ミサイルって、、弾幕ライブラリってあるだろ?
あれ使えよ
23デフォルトの名無しさん:2005/10/27(木) 22:54:04
基底クラスSがあって、其処からの派生クラスA、B、C、Dが
あるとする
s.x()とすれば
ある条件Jの時は、A・BにメソッドX1を
非Jの時は、C・DにメソッドX2を使いたい
また、s.y()とすれば
ある条件Kの時は、A・CにメソッドY1を
非Jの時はB・DにメソッドY2を使いたい

この場合、どう暮らす設計すれば良いんだろう?
24デフォルトの名無しさん:2005/10/27(木) 22:56:25
間違えた

ある条件Kの時は、A・CにメソッドY1を
非Kの時はB・DにメソッドY2を使いたい
25デフォルトの名無しさん:2005/10/27(木) 23:04:41
>>23
Mediatorパターン?
26デフォルトの名無しさん:2005/10/27(木) 23:04:54
条件が良くわかんないが、1行目はクラス設計とは言わんのか?
1行目がやたら問題を難しくしているんだが。

ちなみに java に限定すれば S.x() と S.y() は A, B, C, D でオーバーライドされるから、S の x() が実行されるとは限らない。
C++ or C# で x(), y() を非 vertual にすれば良いんだけど。
2726:2005/10/27(木) 23:09:00
ん? 上手く読み取れて無い予感。

>A・BにメソッドX1
ってコレは a.x1() に b.x1() のことか?
A・Bのインスタンスは誰が持ってるんだ?それとも this なのか?
28デフォルトの名無しさん:2005/10/27(木) 23:30:05
メソッドX1は同じ振る舞いをします

クライアント側のコードが
S *s=S_Factory();
s.x();
の時に・・・・って感じです
29デフォルトの名無しさん:2005/10/27(木) 23:35:03
C++風だと
s->x();
ですね。
>>28はjavaとごっちゃになってる orz
30デフォルトの名無しさん:2005/10/27(木) 23:37:10
C++ か。

>S *s=S_Factory();
この S_Factory は、ABCDS のいずれかを返すの?
んで、

>s->x();
は、結局どういうときに x1, x2 に分岐するの?
31デフォルトの名無しさん:2005/10/27(木) 23:42:00
>条件が良くわかんないが、1行目はクラス設計とは言わんのか?
メソッドX/Yをどこに持たせれば良いか?
とか、もっと踏み込んで、ABCDの継承関係を見直すべきか?
とかです。
32デフォルトの名無しさん:2005/10/27(木) 23:44:14
>>31
メソッド x, y は S にあるんじゃないの?
33デフォルトの名無しさん:2005/10/27(木) 23:49:52
>この S_Factory は、ABCDS のいずれかを返すの?
YES

>は、結局どういうときに x1, x2 に分岐するの?
簡略化の為、「bool ::isk()」の 戻り値で分岐とします
34デフォルトの名無しさん:2005/10/27(木) 23:52:34
>>32
そうするならば
条件J・Kの時に、ABCDは、どうすれば良いか??って事です
35デフォルトの名無しさん:2005/10/27(木) 23:58:47
>>34
A a = new A();
a.x();

のとき、もし条件が非Jだったら何が起こるの?
そこが良くわからない。
36デフォルトの名無しさん:2005/10/28(金) 00:03:31
>>35
必ず、「S *s=S_Factory();」としたいところなんですが
> A a = new A();
> a.x();
の場合は、何も起こらない、としたいです
37デフォルトの名無しさん:2005/10/28(金) 00:29:57
んじゃもう1個質問

S *s = new A();
s->x();

かつ非Jの時には何が実行される?
……っていうか、何を想定しているのかさっぱり分からん
38デフォルトの名無しさん:2005/11/06(日) 15:17:33
>>23
途中参加で申し訳ないが派生クラスA、B、C、Dいらないんじゃないの?
要はX1、X2、Y1、Y2をJ、Kで使い分ければいいだけなんだろ?
内部クラスにするかどうかは別として、javaだと以下のような感じで行けないか。

interface Exe { public void exec(); }

public class S {
private Exe x1 = new Exe() { public void exec() { /* x1 */ } };
private Exe x2 = new Exe() { public void exec() { /* x2 */ } };
private Exe y1 = new Exe() { public void exec() { /* y1 */ } };
private Exe y2 = new Exe() { public void exec() { /* y2 */ } };

public void x() { if (J) x1,exec(); else x2.exec(); }
public void y() { if (K) y1,exec(); else y2.exec(); }
}
39デフォルトの名無しさん:2005/12/19(月) 22:34:49
CとLispとPHPを主に使っています.
最近はPHPでの仕事がほとんどです.

oopバージンな僕が,oopを正しくマスターするためには,PyかJどちら
から始めたらいいでしょうか.
アドバイスをお願いします.

友人からはSを進められたりしたんですが,
ちょっと調べてみたら変態的なのと使える場が少なそうなので,
やはり,すこしは実用性のあるPyかJをやりたいと思います.

よろしくお願いします.
40デフォルトの名無しさん:2005/12/19(月) 22:37:01
Rにしとけ
41デフォルトの名無しさん:2005/12/19(月) 22:45:50
その中ならPyかな
Rは不吉臭がする
42デフォルトの名無しさん:2005/12/19(月) 22:49:49
pyってドキュメント読みにくくね?
43デフォルトの名無しさん:2005/12/19(月) 22:58:36
C++にでもしとけ
44私もoopチェリー:2005/12/19(月) 23:10:23
Javaがいいんじゃないの?
新たに覚えるシンタックスも少ないし、書籍が豊富。
45デフォルトの名無しさん:2005/12/19(月) 23:14:42
C++なら実際にプログラムを作るときにいざとなればCの書き方へ逃げられる。
46デフォルトの名無しさん:2005/12/19(月) 23:46:03
にげるんじゃない
47デフォルトの名無しさん:2005/12/20(火) 00:02:59
書き方で逃げないとしてもライブラリを1から知りなおす必要が無いというのは悪くない。
入出力あたりはともかくとして<stdlib.h>あたりはmalloc系以外C++でも<cstdlib>と名を変えながらも重宝する。
48デフォルトの名無しさん:2005/12/20(火) 22:40:00
Rはやっぱり教祖様にぬかずくカルトだから?
49デフォルトの名無しさん:2005/12/20(火) 23:13:19
ごめん、Sって何?
Smalltalk?
50デフォルトの名無しさん:2005/12/20(火) 23:19:12
Schemeかと思ってたがよく考えたらあんまりOOじゃねえな。
>>49が正解か。
51デフォルトの名無しさん:2005/12/25(日) 20:57:23
Subjective-C

さあ突っ込めヽ( ´ー`)ノ
52デフォルトの名無しさん:2005/12/25(日) 21:00:06
いやぁ、おれS言語だとばっかり思ってました
53デフォルトの名無しさん:2005/12/29(木) 17:30:40
Rubyも海外での利用が広まっているようなので
ちょっとは風通しも良くなるんじゃないだろうか。
案外ブランチして本家抜きで開発が進んだりしてな。
54デフォルトの名無しさん:2005/12/30(金) 09:50:21
プロの方の何割ぐらいがOOPできるのでしょうか?
今はもうほとんど人ができると考えていいのでしょうか?
55デフォルトの名無しさん:2005/12/30(金) 10:18:54
>>54
分野にもよりますが、残念な事にまともにOOPできている人間はごく少数です。
OOの習得は、基礎概念を学んだ後「アジャイルソフトウェア開発の奥義」と「リファクタリング」、GOF本くらい読んでおけば
容易なはずですが、大半のプログラマは何百ページもある字ばっかりの本を読めるほど頭が良くありません。
56デフォルトの名無しさん:2005/12/30(金) 11:12:38
>>55
回答ありがとうございます。
やっぱりまだ敷居は高いんですね。
57デフォルトの名無しさん:2005/12/30(金) 18:20:53
>>56
463 名前: 仕様書無しさん 投稿日: 2005/12/29(木) 19:36:23
>>461
http://tito.fc2web.com/2ch/tech/index.html
http://tito.fc2web.com/2ch/tech/index.html#d0e2176

憂鬱なプログラマのためのオブジェクト指向開発講座 ― C++による実践的ソフトウェア構築入門
Tucker (著)
翔泳社(1998) ISBN:4-8813-5619-4

デザパタはあくまでパターンなのでオブジェクト指向の理論とは関連が薄いから
実質2ch一番人気のオブジェクト指向本となる。

別スレで同じような質問あった。
どうせなら一番人気の本教えとく。
58デフォルトの名無しさん:2005/12/30(金) 21:48:09
>>57
サンクスです。
レビュー評価いいですね。
59デフォルトの名無しさん:2005/12/31(土) 05:09:46
>>57
憂鬱本はタイトルの割にぜんぜん実践じゃない。あくまでもOOの基礎概念について説明した本。
「アジャイルソフトウェア開発の奥義」マジおすすめ。
60デフォルトの名無しさん:2006/01/10(火) 22:24:39
オブジェクト指向って一言で言ってどういうこと?
ってゼミの教授に聞かれたから、抽象って答えたんだけど間違ってた?
61デフォルトの名無しさん:2006/01/11(水) 00:14:37
俺だったら『現実世界のモデル化手法』で済ます。賛否あるだろうが。
62デフォルトの名無しさん:2006/01/11(水) 11:13:58
メッセージのやりとりにより進行するプログラミング手法

長い?
63デフォルトの名無しさん:2006/01/11(水) 12:26:40
今時のノウハウ集

てか、一言でってのが無茶な質問な気がする。
64デフォルトの名無しさん:2006/01/11(水) 12:52:32
隠蔽と操作
65デフォルトの名無しさん:2006/01/11(水) 12:56:46
情報隠蔽と情報操作
66デフォルトの名無しさん:2006/01/11(水) 16:38:55
役割分担
67デフォルトの名無しさん:2006/01/11(水) 18:59:30
概念によるプログラムの切り分け
68デフォルトの名無しさん:2006/01/11(水) 19:41:50
>>66に1票
69デフォルトの名無しさん:2006/01/15(日) 17:35:51
>>60
オブジェクト単位でわけりゃオブジェクト指向でしょ?
何をオブジェクトとするか?抽象的かどうか?
ってのはあくまで設計が上手い下手の話になるから違うんじゃない?
例えば、ただの関数一覧をオブジェクトとしてまとめてもそいつがオブジェクトと言えば
オブジェクト指向でいいんじゃね?(設計的にいいとか悪いとかはおいておいて)
70デフォルトの名無しさん:2006/01/15(日) 22:18:08
>>69
オブジェクト単位に分けるってことも現実の抽象化ってことだし
当然、設計段階での抽象化もあるし、色んなレベルでの抽象ってのが
オブジェクト指向の核となってるんじゃないかと思って「抽象」と言ったんだけど。
まぁ、屁理屈ですね…
71デフォルトの名無しさん:2006/01/16(月) 01:01:42
>60
責任の分割と明確化
>66と似ているけどちょっと違う
72デフォルトの名無しさん:2006/01/21(土) 00:16:00
>>71
>責任の分割と明確化
それは設計で「そうあるべき」って内容であって本質じゃないな。
73デフォルトの名無しさん:2006/01/21(土) 01:19:21
契約プログラミング
7471:2006/01/21(土) 02:51:57
>72
「そうあるべき」という理想も本質の一つだと思うけど? 唯一の本質とは言わんけどね。
75デフォルトの名無しさん:2006/01/27(金) 00:01:09
オブジェクト指向とはプログラマとして解脱することなり。
一度慣れるとオブジェクト指向以外でプログラム書けなくなりますね。
もっとも私がオブジェクト指向で書けるようになるまで4年もかかってしまったが。

とにかく、意味が分からなくとも説明書なり他人のコードを参照して沢山コードを書け。
そうすれば、いつかオブジェクト指向の考え方というものを理解できるであろう。
76デフォルトの名無しさん :2006/02/04(土) 01:46:24
>>60
高凝集度と疎結合
77デフォルトの名無しさん:2006/02/27(月) 02:39:53
ドメインとかビジネスオブジェクトといわれる層にはそのクラスに関連する
処理はバンバン書き込んじゃっていいの?
1つ上の、ファサードとかサービスって言われる層に、処理が集中しがちなんだが
まだまだ勉強不足なのかなぁ・・・
78デフォルトの名無しさん:2006/02/28(火) 14:07:08
>>77
>ドメインとかビジネスオブジェクトといわれる層にはそのクラスに関連する
>処理はバンバン書き込んじゃっていいの?

まず例を出せ、話はそれからだ。
79デフォルトの名無しさん:2006/03/11(土) 00:48:16
>>77
ファウラーがドメインオブジェクトにバンバン書き込めって
いってるから俺はそうしてる。
なにしろサービスよりドメインのほうがテストケース書きやすいし。
80デフォルトの名無しさん:2006/04/16(日) 14:15:56
object is poormans closer!!!!!!!!!!!!
81デフォルトの名無しさん:2006/06/13(火) 00:56:01
トラックバック:http://app.blogs.itmedia.co.jp/t/trackback/4088073

脱オブジェクト指向のススメ
ttp://blogs.itmedia.co.jp/tamaki/2006/06/post_57ab.html


このイーキャッシュの代表取締役玉木の発言がおかしいから
このスレからpin
82デフォルトの名無しさん:2006/06/25(日) 22:46:39
どうおかしいのか具体的に言ってみたまえ。
83デフォルトの名無しさん:2006/07/01(土) 00:08:16
ソフトを多機能化しようとすると構造が複雑になる。
  ↓
単純なモジュールの集合体にすればメンテが容易になる(構造化)。
  ↓
変数と、それを扱う関数をひとまとめにして独立性を高める(カプセル化)。
  ↓
モジュールの機能を賢くすれば、コードを書き換えずに再利用できる(ちょっと肥大化)。
  ↓
コードを書き換える必要がない≒コードを書き換えてはいけないという雰囲気になり、
モジュールに機能を追加したい場合はクラスを継承する(さらに肥大化)。
  ↓
プロジェクトの途中で仕様が変更になったが、それまで使っていたクラスは充分テストされており、
書き換えるとまたテストし直さなければいけないので、継承して新たなクラスを作る(たかが肥大化)。
  ↓
次期プロジェクトでも、それまで使っていたクラスを継承して実装する(されど肥大化)。
  ↓
基底クラスでバグが見つかる。
  ↓
クラスを継承してなんとか帳尻合わせをする(もうなんでもいいやって感じで肥大化)。
  ↓
こっちが立てばあっちが立たずで、また問題が発覚する。
  ↓
やっぱり基底クラスから根本的に直さなければいけないのでは?
  ↓
でもそうすると継承したクラスが全部影響受けちゃうじゃない?
  ↓
身動きがとれなくなる。
  ↓
納期が迫ってくる。
  ↓
担当者が行方不明になる。
84デフォルトの名無しさん:2006/07/01(土) 00:10:03
  ↓
代わりにボンクラ投入。
  ↓
1から仕事を教えてやる必要あり。
  ↓
コードをさんざん汚して、ボンクラ去って行く。
  ↓
ボンクラ作戦失敗。
  ↓
外注に丸投げ。
  ↓
外注が火を噴く。
  ↓
チョン企業に丸投げ。
  ↓
法則発動。
  ↓
バグはなかったことにして日程優先でとにかく納品。
  ↓
不具合発覚。
85デフォルトの名無しさん:2006/07/01(土) 00:10:35
  ↓
記者会見。
  ↓
他社に責任転嫁。
  ↓
国会に呼ばれる。
  ↓
信用失墜
  ↓
売上大幅減
  ↓
株価下落
  ↓
株主総会
  ↓
粉飾決算
  ↓
タイーホ
  ↓
再就職できず
  ↓
生活苦
  ↓
消費者金融
  ↓
多重債務
  ↓
中央線

途中まではマジ。
いったいどこで方向を誤ったのだろうか。
86デフォルトの名無しさん:2006/07/01(土) 00:40:54
多重債務までマジなのね・・・あと賽の目1を出せば楽になれるよ
87デフォルトの名無しさん:2006/07/01(土) 07:39:49
中央線は迷惑だからやめてくれ。
せめて青木ヶ原しか1人静かになれるところにして。
88デフォルトの名無しさん:2006/07/01(土) 11:03:19
マグロになると足止め食らって迷惑する人多いからね。
89デフォルトの名無しさん
実際は外注までです。
それ以降はネタというか、希望的観測ならぬ、自虐的観測です。
幸い、うちにはチョン語を話せる人がいないので、
そこから下に進まずに済んでいます。
日本語が通じる代理店みたいなものはないのかとか、いろいろ模索しましたが、
「日本企業でも火を噴くのに、国民性が異なる人に依頼できるのか」ということになり、
結局その時点でプロジェクトはポシャりました。

まぁ教訓としては、
(1)闇雲にクラス継承を重ねないこと
(2)「コードを書き換えずに流用」にあまりこだわらないこと
(3)複雑なクラスにドキュメントがないのは最悪なこと

とくに(2)は、チェック項目を減らすことが目的だったはずなのに、
コード書き換えを回避するために継承を重ね、
結果的にチェック項目が増えてしまい、本末転倒でした。