トップページ⇒tech
108コメント33KB

オブジェクト指向って何?

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
やたら雑誌に『オブジェクト指向』って出てきますが、これって何なんでしょうか?
私、さっぱりわかりません。こんな私にも理解できますよう、どなたか、わかりやすく教えて頂けませんか?
0002デフォルトの名無しさんNGNG
1->delete;
[EOF]
0003名無しさんNGNG
Javaの入門書でも読むべし。
0004デフォルトの名無しさんNGNG
>>2 放置しとけば GCされるんじゃないンか..鬱だ
0005まじれすNGNG
あなたのことです。
0006デフォルトの名無しさんNGNG
マジレス。
オブジェクト指向とは
thread->sage();
みたいに書いてプログラムする事です。
0007デフォルトの名無しさんNGNG
そんな疑問を持つようなアホがスレ立てるな>1
0008デフォルトの名無しさんNGNG
'がいしゅつ'ぎみ駄スレ
0009デフォルトの名無しさんNGNG
>>1

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

これ読むと良いよ。
0010デフォルトの名無しさんNGNG
憂鬱もよいけど、あと、
「Tao Of Object」を一緒に薦めるのは
悪党でしょうか?(笑)

0011デフォルトの名無しさんNGNG
επηなんとかの連載でも読め(藁
0012デフォルトの名無しさんNGNG
>>10
あの本はOOP初心者を混乱させるよ
そのまま山奥に篭ってしまいそうだ(藁
radicalなOOP主義もいいけどC++は
functional/chaosなOOPが向いてる
001312NGNG
マジレスsage
0014デフォルトの名無しさんNGNG
オブジェクト指向と俺

わけわからん、、、と思っていたけど、ある時
「なんだ、今まで作ってきたのと同じだ」と気付き氷解。

結論:難しいのは言葉だけ。(俺だけ?
0015デフォルトの名無しさんNGNG
言葉と概念を書き連ねた文章
0016デフォルトの名無しさんNGNG
>>14
わかってねーよ(藁
0017デフォルトの名無しさんNGNG
>>1
実体のある物が大切であるという教えです。

2Dのアニメキャラやゲームキャラに恋してもそれは所詮叶わぬ
恋。現実の女性を探してこいって事です。
0018デフォルトの名無しさんNGNG
>>17
それにしては「抽象」とか「仮想」とか「純粋」
とかって言葉がやたら出てくるのはなぜ?
0019デフォルトの名無しさんNGNG
>>14
ネタ?
ネタでしょ???(w
0020デフォルトの名無しさんNGNG
チンコがあったら、それを擦る手が必要ですね。
つまり手もチンコも体の一部なので、体クラスを継承しています。
手クラスにはチンポを擦るメソッドがあり、チンコクラスには長さや太さを記憶する変数、勃起させるメソッドがあります。
ただ、この勃起メソッドをどのクラスに入れるのかは意見がわかれるところがオブジェクト指向の面白いところです。脳クラスに入れるべきか、チンポクラスに入れるべきか。
わかりましたか?
0021デフォルトの名無しさんNGNG
>>18
それはまだ愛じゃなくてプラトニックな恋の段階だからです。
あなただって深く知り合う前に相手の事色々想像してみるでしょ?
0022デフォルトの名無しさんNGNG
>体の一部なので、体クラスを継承

OOPの話をしているのだとすれば、それは大間違い。
0023デフォルトの名無しさんNGNG
恋とは純粋であり、仮に想うものであり、抽象的なものか・・・
0024デフォルトの名無しさんNGNG
>22
なんと。では人間クラスか?
0025デフォルトの名無しさんNGNG
>>24
継承関係(Is-A)じゃなくて包含関係(Has-A)でしょ?
0026デフォルトの名無しさんNGNG
愛の段階になれば、色々なメッセージを交わす事が出来ます。
0027デフォルトの名無しさんNGNG
>25
包含は駄目なのか?正しい答えキボーン。
0028デフォルトの名無しさんNGNG
チンコクラスは何を継承するべきなんだ?それとも、何も継承しなくてもいいのか、といういか、よく考えたら別に継承しなくてもいいじゃん。
0029デフォルトの名無しさんNGNG
オヒオヒ。
ティムポクラス(藁 が体クラスを継承?ティムポは体の「一種」か?
体の「一部」だから、体がティムポを「包含」するに決まってるだろ。
言っとくが「包含」するのは体クラスじゃないぞ。体クラスを継承した
男体クラス(藁 だからな。
0030デフォルトの名無しさんNGNG
あ、なるほど。チンポは男のものだもんな。
じゃあ、ふたなりはどうなるんだ?
003129NGNG
>>30
多重継承(藁
って、はまりすぎててジサクジエンっぽいじゃねぇか( ゚Д゚)ゴルァ!
0032デフォルトの名無しさんNGNG
なるほど。そのために多重継承ってあるんだな。もしかしてすごく良い例だったのかも。
00331NGNG
>>20辺りより以降
皆様方、実に分かりやすい説明をありがとうございました。
これらの知識を糧にしてこれからも1プログラマーとして
日々精進して参りますので、今後もご指導・ご鞭撻の程
よろしくお願い申し上げます。
−−−−−−−−−−−終了−−−−−−−−−−−−−
0034デフォルトの名無しさんNGNG
>>31
こまかいこと言えば、あれは菱形多重継承って奴だな。
C++なら仮想基底クラスとやらの出番だ。
そうでないと枯葉剤にやられた双子になっちゃうからな…
0035AAANGNG
test
0036デフォルトの名無しさんNGNG
仮想基底クラスはやだよな〜
キャストが難しくなるからな。
0037デフォルトの名無しさんNGNG
そもそも、オブジェクト指向を何のために使うかによって変わるだろ。
差分プログラミングによる工数削減が目的なら継承ばんばん使ってよし。
ってゆーか使わないと手抜きにならない。
だがこの方法はあとでハマる(笑)ので、あまりお勧めしない。

ポリモーフィズム(多態)が目的なら、逆説的なようだが普通の意味での
継承はあまり使うべきじゃない。インターフェースを定義して、それらを
実装してクラスを構築するのがいい。
0038デフォルトの名無しさんNGNG
>>37
その辺、どーも理解できないから教えてください。
ポリモーフィズムが目的でも、メソッドによっては継承したい場合もあるでしょ?
Javaで言うところのインターフェースは全部実装するの?うざくない?
俺があほ?
0039デフォルトの名無しさんNGNG
>>37
差分プログラミングってことなら、継承じゃなくて委譲でしょ。

おいらは、ポリモーフィズムを計画的に使うべきと判断される場合
以外は、継承しないよ。
委譲でやれないことがある時点で、元クラスのインターフェイスに
欠陥がある可能性があるということだーね。もしそういう時は、
デコレータ、ブリッジ、アダプタパターンあたりで逃げます、おいらは。
0040WILLNGNG
>>38

Interface上に定義するメッソドの数を絞り込めば良いんじゃないか?
一つのInterfaceにごてごてといろんなメッソドくっつけすぎるから
そーいう事になると思われる。
0041qNGNG
そだね。多分皆さん既知だと思うけど、インターフェイスは
オブジェクトとオブジェクトの結合に必要最低限なものになるように
やるといいかも。汎用的なものは自分はうまく作れたことがない(^^;
0042デフォルトの名無しさんNGNG
物
0043デフォルトの名無しさんNGNG
俺、継承でハマったことないから、interface派の意見がイマイチ
わからないんだよな。継承みたいなコトを委譲でやろうとすると
メチャウザい。継承でやればノーコーディングで済むところを
チマチマつなぎのコード書かないといけないし、その部分の保守も
発生する。実装の再利用ってするんじゃない?普通。
Javaが下手に多重継承禁止するもんだから、Threadクラス使うときの
Runnableインターフェースみたいなクサいことしないといけない。
あれ汚くない? ああいう委譲って直感的じゃないよ。
俺的にはビバ継承なんだけど。
0044デフォルトの名無しさんNGNG
人体で例えるなら継承じゃなくて包含でしょ
パーツをタンパク質から継承してもいいけど。。。
0045デフォルトの名無しさんNGNG
あれ?なんで上がってないの?
0046デフォルトの名無しさんNGNG
>>1
構造化プログラミングって知ってる?
0047デフォルトの名無しさんNGNG
このスレの次レスから900まではRuby発言禁止。
ぜってー禁止!つーことでみなさんよろしく。
0048デフォルトの名無しさんNGNG
Rubyサイコー
0049デフォルトの名無しさんNGNG
>43
実装継承、インタフェース継承って知ってる?
005046NGNG
>>1
煽りじゃ無いよ。マジレスだよ。
おーい。>>1。構造化プログラミングっ知ってる?
0051デフォルトの名無しさんNGNG
>>49
知ってるけど、多分意味がキチンと分かってない。
ってか、インターフェースのみを継承する場面って
そんなにあるか? 大体は実装も継承することが
多いんじゃない? って思ってるけど。
0052デフォルトの名無しさんNGNG
>51
デザインパターンを読んでおこう。
0053WILLNGNG
>>51

Java2 SDKについてるAPIのソースコード読んで見ると良いかも。
0054デフォルトの名無しさんNGNG
厨房な意見

手続き指向:基本的に上から下への一次元
オブジェクト指向:複数のオブジェクト同士でのメッセージのやり取り、2次元的
0055デフォルトの名無しさんNGNG
次元が違う。
0056Rupin the 3rdNGNG
ゴエモン出番だ。
0057ふじこちゅわソNGNG
ルッパァ〜ソ?
0058デフォルトの名無しさんNGNG
>>47
でも(笑)、Interface継承と実装継承の問題で混乱しちまったら、
逆説的だけどいったん小噺はrubyみたいな言語に
逝ってみると、頭整理されるかも。

>>54
俺は、OOは有性生殖みたいな印象です(笑)。
「する」やつと「される」やつが居るんだよな。
奴ってのはObjectのことだ。
つまり「受身」ていう概念が有る(というか意味を成す)のがOOP。
せくーすもmessageの一種だわな。いっぽう手続き指向は、
「やりてー」とわめいている(=能動)ばっかりで相手もいねー寂しいやつ。
0059デフォルトの名無しさんNGNG
>>1は居なくなったのかな?
居なくもなるよね。
0060デフォルトの名無しさんNGNG
>>59
確かにね。
もし、1 がVBの人ならば、以下の本をお勧めします。

書籍名:VBプログラマのためのUML
出版:翔泳社
ISBN:ISBN4-88135-801-4

詳細は↓
http://www.shoeisha.com/book/Detail.asp?bid=959&tk=UML

UMLの本だけど、オブジェクト指向をVB上で説明している良い本だと思うよ。
お勧めです。物足りなかったらごめんね。
0061デフォルトの名無しさんNGNG
>>60
じゃ、おれも。
もし、1 がCの人ならば、以下の本をお勧めします。
C/C++クラスの構築法, 4-8101-8565-6, 6,602, R,セッションズ,トッパン
残念ながら絶版になったみたい(からかってるわけじゃないよ)。
良い本だから古本屋ででも探してみてくれ。
0062デフォルトの名無しさんNGNG
>>61
さげじゃないよね?で、あげ。
0063デフォルトの名無しさんNGNG
>58
する、される、が有性生殖かよ・・・。
0064デフォルトの名無しさんNGNG
>>52
 デザインパターン読んでもそう思う。
0065デフォルトの名無しさんNGNG
会社組織に例えるのが一番わかりやすい気がするのは自分だけ?
0066デフォルトの名無しさんNGNG
>>65
それは継承の例だね。

>>1に対しては
継承を説明する前にオブジェクト指向の説明が必要だと思う。
オブジェクト指向=継承では無いのだから。
0067デフォルトの名無しさんNGNG
継承だけじゃなく、オブジェクトの説明はできるんじゃないかな。
0068デフォルトの名無しさんNGNG
>>67
ごもっとも m(__)m
0069デフォルトの名無しさんNGNG
>>66
会社組織のどこが継承なのだ?
0070デフォルトの名無しさんNGNG
多分、部長やら係長やらヒラは全て社員クラスを継承してるみたいな
ことが言いたいんだと思ったけど。。。
0071デフォルトの名無しさんNGNG
>>70
御名刀!!
また、継承の話になると深読みした。
0072デフォルトの名無しさんNGNG
>>70,71
全然わからない、

1段階継承しただけでは継承のメリットなんか
何もないだろ。

メンバーに役職コードでも入れればすむことだ。
0073デフォルトの名無しさんNGNG
51=72?
0074デフォルトの名無しさんNGNG
>>72
継承のメリットは継承の段階数で決まるのか?
0075デフォルトの名無しさんNGNG
段回数で決まるわけではないが
少なくとも、会社の部長や課長という例は意味不明だろ。

オブジェクト指向なんてあたりまえすぎて
このスレで何を話す内容があるのかと思ってきて
初カキコしただけだよ。
0076デフォルトの名無しさんNGNG
>>72
”継承ってこんな感じ”と言いたいだけの説明に議論吹っかけても意味ないよ。
オブジェクト指向って何?ってスレなんだから。
別スレ立ててそこでやんなよ。
0077デフォルトの名無しさんNGNG
>>75
すごいぞ。
「オブジェクト指向」を当たり前と認識してる人が降臨した。
初心者にわかるように御教授願えますか?
0078デフォルトの名無しさんNGNG
世界は、「素粒子」クラスからなっているってのはダメ?
0079デフォルトの名無しさんNGNG
「会社」っていうのは、
「(クラスを中心とした)オブジェクト指向では、オブジェクトを継承で仕切られたクラス階層の中に
はめ込むことによって階層社会的な概念を作り出す」
ということの比喩ではないか?
0080デフォルトの名無しさんNGNG
Oops! U understand?
0081デフォルトの名無しさんNGNG
そうやってなんでもかんでもクラスにすんなよ。>78
目的が無いと無意味
0082デフォルトの名無しさんNGNG
だったらsuper stringクラスからだろ。
0083デフォルトの名無しさんNGNG
>>79
求められてるものは「オブジェクト指向って何?」だから
「オブジェクト指向では」は変だよ。
0084デフォルトの名無しさんNGNG
超ひも?
0085デフォルトの名無しさんNGNG
>>79
そこまで難しいことじゃなくて、一つの目的を達成するために、適度に
責務を持たされた複数の人間が互いにメッセ−ジをやり取りして処理を
遂行し、結果を得る、位の説明がしたかったんじゃないか?
0086デフォルトの名無しさんNGNG
>>85
そうなのか?

それはそれで納得がいくけど
継承という面では何も説明できないようナー
0087デフォルトの名無しさんNGNG
>>85
良くまとめてると思う。まとめすぎて初心者にはわからないぞ 藁。
ただ、メッセージセンディングは片方向だと思う。互いにと言うのはどうか?

>>86
オブジェクト指向にとっての継承は必須か?
0088デフォルトの名無しさんNGNG
>>72
 メンバに役職コード追加すればいいなんていかにも構造体的
ソリューションだな。
 役職者にのみ存在する操作はどうやって実装するんだ。また、
役職者によって違う処理をする操作は?

 オブジェクト指向が当たり前すぎるとはこれまた……
0089デフォルトの名無しさんNGNG
>>86
 激しく同意。
>>87
 誰も必須とは言ってないのでは?
>>88
 激しく同意。こんなの継承の基本中の基本だと思うけどな。
 ってことでage
0090デフォルトの名無しさんNGNG
>>89
>>86に同意はするが>>87に継承は必須と言ってないとは?
もう少し具体的に書いてもらえないか?
>>72はそっとしておいてやろうよってことでage
0091デフォルトの名無しさんNGNG
継承の出来ないオブジェクト志向というと
VBしか思い浮かばないが...

まああれもあれで立派な....以下略
0092デフォルトの名無しさんNGNG
>メンバに役職コード追加すればいいなんていかにも構造体的

そうなんだけど、これをOO的に改良(笑)すると、
役職クラス(のInstance。シングルトンで十分かも知れないし
そうでないかも知れない)なんてものを作ることも有るよ。
#つーか俺今仕事でやってるのがソレ。
#ユーザーの権限(というObject)をいちいち与えてたら
#鬱陶しいので、ユーザーを集約する役職Objectに権限Objectを与えてる。

で、役職へのポインタがNULLでなければ(笑)、役職に
「俺の権限はナニがあるか」の問い合わせを委譲したりする。
勿論役職Objectは多態で色々な動きをするし、
そもそもユーザーObjectと共通の祖先を持つ
(祖先の部分で「権限を持つ持たない」という概念の処理
という機能を持っている)

>>91
Prototype型言語って奴だよね>あっちのスレ
継承じゃなくて委譲で表現することは多いと思われ。
で、それがVBに出来るのかどうか知らぬが。つまり、
ObjectからObjectへのポインタ(参照)って
一般的に(笑)使われるんでしょうかVBでは?
0093デフォルトの名無しさんNGNG
>>88
>役職者にのみ存在する操作はどうやって実装するんだ。また、
>役職者によって違う処理をする操作は?
switch case で分けるだけじゃない?
たくさんの関数があっていろんなところでswitchするようになって初めて
多態にする意味が出てくるわけでしょ。
役職が表示にしか影響しないようなシステムなら役職コードのほうが正しい
設計だと思う。
 
009492NGNG
>>93
最初から小さい系だと判りきっていて
今後の拡張を心配しないなら、ね。

何年も続いて仕様がじわじわ(?)と変化していく
ようなデカブツだと、柔軟性のための「投資」は
ないと死にますぅ。
0095デフォルトの名無しさんNGNG
>>94
ここなんだよね。XPなんかが余計なコードを書くなって言ってるのは。
仕様が変化したらそのときに再設計するべきであって、「こうなるかも」
なんていう見込みでコードかいちゃいかんと思う。
役職の例でいえばswitchじゃやってられないような仕様変更がきたときに
それこそ役職オブジェクトにしちゃえばいいんじゃない?

将来のことを考え出したら例えば役職は複数持てるのかもしれないのだから
役職オブジェクトはVectorにしなくちゃ。とかいくらでも落ちはあるぞ。
0096デフォルトの名無しさんNGNG
もしかすると>>92-95は「なぜC++はあんなに難しいのか?」の住人か?
0097デフォルトの名無しさんNGNG
>>93
 どう考えても継承を使った方がコストが低いと思うけど?
継承は使いようだと思いますよ。
0098デフォルトの名無しさんNGNG
>>95
 しちゃえばいいんじゃない? ってそんな簡単に(笑)
そんなこといってたら、作り直せばいいんじゃない?とかに
なるわけでしょ。
0099デフォルトの名無しさんNGNG
>>88-98
>>76を参照して、高尚な議論は他のスレでやってくれ。
0100デフォルトの名無しさんNGNG
継承-多態の導入メリットは
「switch-caseはopen-closed principleに違反してる」
# = caseを追加するたびに元ソースを汚さないといけない
って説明するのが一般的だよね。
0101リファクタリング本にNGNG
switch-case <=> ポリモルフィなんちゃら

の例がよくでてますね。リファクタリングのずるいのは、
かならず逆の操作も用意してあって、やりすぎはよくない
とかいうところ。
0102デフォルトの名無しさんNGNG
Cでは関数をあまり長くしないって藤原さんが書いてたけど
C++の場合どうなんでしょう? あまりクラスのメンバ関数を
分割すると宣言部分が美しくなくなると思いますが、みなさん
はどうやってます?

1関数100行以内とかは、もう古い話なのかな?
0103デフォルトの名無しさんNGNG
>>102
private関数なんか、いくら数あっても構わんと思うが。
publicがブクブク膨らむなら、考え直すべきだが。

クラスのサイズそのもののでかさが気になるなら、それを理由に
委譲の組み合わせを利用してクラス分割しても、別にいいでしょ。
0104デフォルトの名無しさんNGNG
>>103
それじゃ、C++でも1関数100行以内を守った方がよい?
0105デフォルトの名無しさんNGNG
>>93
ヒラには使えないメソッドやプロパティを、コンパイラがガードしてくれる
のが多態。プログラマが「ヒラには使えない」という処理を書かなくて済む
というだけでも大きなメリットだと思うが。
0106デフォルトの名無しさんNGNG
OOP教えるなら抽象論から入らないで
型進化論的アプローチでOOPしないことのデメリットを
教えたほうがわかりやすいと思うんだけどね。

int x, y;
x += 1; y += -2; PutPixel(x,y);
 ↓構造体導入
typedef struct{
 int x, y;
} Pos;
Pos p;
p.x += 1; p.y += -2; PutPixel(p.x, p.y);
 ↓データ抽象化
typedef struct{
 int x, y;
} Pos;
PosMove(&p, 1, -2); PosShow(&p);
 ↓カプセル化
typedef struct{
 int x, y;
 void Move(int dx, int dy){
  x += dx; y += dy; Show();
 }
 void Show();
} Pos;
Pos p; p.Move(1,-2);
 ↓ポリモ以下略
0107デフォルトの名無しさんNGNG
>>102
 あまり関数を長くするのは、どの言語でも良くないと思いますよ。
 ただ、100行とかにこだわるよりも、設計的な視点で分割を
考えた方がいいと思います。
0108デフォルトの名無しさんNGNG
超紐理論あげ
■ このスレッドは過去ログ倉庫に格納されています