1: デフォルトの名無しさん 2014/03/25(火) 21:44:07.66 ID:AtcH5MLU
お願いします。言語は問いません。
オブジェクト指向言語じゃなくても
オブジェクト指向の話であれば問題ありません。

211: デフォルトの名無しさん 2014/04/05(土) 12:34:58.04 ID:zg062x0r
>>1
mvcで作ればなんとなくわかる

3: デフォルトの名無しさん 2014/03/25(火) 21:53:45.99 ID:pgzxn/ED
オブジェクト指向の活用方法とあらためてきかれてもな。
仕事やってるなら、オブジェクト指向以外を使うことのほうが
まれだよ。まあ空気のようなものだ。

24: デフォルトの名無しさん 2014/03/26(水) 21:17:17.67 ID:lornT58y
構造化プログラミングでは「機能」で全体を切り分けてた。
それがC++などのオブジェクト指向プログラミングになると「オブジェクト」で全体を切り分けるようになる。

電気回路に例えるなら、
それぞれの機能は基盤ごと、チップごとに整理されているが電源が一つしかない状態が構造化プログラミング。
それぞれの機能が自前の電源を持ってるのがオブジェクト指向。

28: デフォルトの名無しさん 2014/03/26(水) 23:16:50.71 ID:dEVLbQ7F
オブジェクト指向使わないでも ”出来る” とかいうやつがいるけど、
出来るのは出来るんだよ。
重要なのはどれだけ複雑にしないで出来るかということ。
その複雑という観点が抜けてる意見は的外れで参考にならない。

たまに本当にオブジェクト指向じゃなくても複雑にしないで
できることもある。オブジェクト指向よりもシンプルに作れることもある。

それは問題領域が異なるから。上でSQLの話がでていたが
それはRDBMSからのデータ取得という問題だから。
SQLはその問題に特化した言語なのだから得意なのは当然。

でもアプリを作るという問題の場合は、オブジェクト指向が適していることが多い。

例題程度の短い問題で、オブジェクト指向の利点を感じないのも
短い問題だからという理由で説明できるね。

37: デフォルトの名無しさん 2014/03/27(木) 00:11:39.64 ID:j3gvVEw0
クラスを作る目的の1つは、ある変数に対してアクセスする関数群を同じクラスにまとめて、
変数自身は極力非公開にして、どこからか勝手にいじられないように隠蔽することだよ。
カプセル化というんだけどね。

45: デフォルトの名無しさん 2014/03/27(木) 00:41:16.91 ID:gcsG9K2Q
オブジェクト指向の話で
クラスとインスタンスの話で
終わっちゃう人がいるけど、

オブジェクト指向の話には
インスタンスとインスタンスを組み合わせて動かすという
構造の話、組み合わせ方の話も含まれるよ。

46: デフォルトの名無しさん 2014/03/27(木) 00:42:23.36 ID:gcsG9K2Q
インスタンスとインスタンスを組み合わせだけじゃなくて
クラスとクラスの組み合わせも。
(クラスの代わりにインターフェースだったりもする)

ほんと関数の中身などという小さな部分じゃなくて
全体を見ないとね。

50: デフォルトの名無しさん 2014/03/27(木) 00:50:57.11 ID:2gDV9B/K
規模の話が出てきたので、アンケートをとってもよいでしょうか?

1. 作成しているアプリケーションの分野は?
2. アプリケーションの規模について
 2.1 行数
 2.2 関数の個数
 2.3 変数の個数
 2.4 複数のファイルから構成されているならば、そのファイル数

ちなみに俺は
1. テキストフィルタ
2.1 1,000行~10,000行
2.2 5個~20個
2.3 10個~30個
2.4 1ファイル
です

54: デフォルトの名無しさん 2014/03/27(木) 01:21:39.80 ID:gcsG9K2Q
>>50
> 2.1 1,000行~10,000行
> 2.2 5個~20個

1関数あたり、200行~500行ってことでいい?

これは多い。コードを把握するために一目で
スクロールしないで見渡せることが重要なので一画面が目安。
だいたい50行~長くても100行

57: デフォルトの名無しさん 2014/03/27(木) 01:26:05.92 ID:2gDV9B/K
>>54 いや、違います。1関数あたり10行位です。残りがメインルーチンです。

121: デフォルトの名無しさん 2014/03/29(土) 01:27:50.25 ID:3OHlSsnI
>>57
鳥肌立った

56: デフォルトの名無しさん 2014/03/27(木) 01:24:04.56 ID:ze0m1e8o
オブジェクト指向はプログラムの問題というより人間の問題に近い。
オブジェクト指向にすれば、人間らしい仕様変更に比較的強いというだけの話。

119: デフォルトの名無しさん 2014/03/29(土) 01:06:59.37 ID:YRxS2933
オブジェクト指向は1990年代の話題
当時は実装メモリも少なかったので、コンパイルサイズの上限に達しないように
コンパイル単位となるファイルや関数を小さくしなければならなかった。また
CPUの性能も低かったので、コンパイル単位を小さくすることで再makeにかかる
時間を節約していた。そうでなければとてもじゃないが、実務では使えなかった。
現代では分かりやすさを犠牲にしてまで、小さい関数を量産する必要はなくなっ
ている。
以上、教科書に載らないオブジェクト指向の歴史

326: デフォルトの名無しさん 2014/12/17(水) 11:09:29.57 ID:N1jNpsSg
ポリモーフィズムは分かりやすいんだけどカプセル化がいまいちわからない
ゲッターセッター書いて何になるの?ってレベルの理解しかないから優しく教えて

327: デフォルトの名無しさん 2014/12/17(水) 11:58:16.14 ID:qGVIuFRu
>>326
カプセル化はむしろ単純セッター書いたら負け
そのクラスの機能のみ提供して、内部実装を隠すのが要点

329: デフォルトの名無しさん 2014/12/17(水) 17:36:45.21 ID:FGZvKMUK
>>326
基本的にそのクラスのメンバーはそのクラス内でいじられることを保障するため。

330: デフォルトの名無しさん 2014/12/17(水) 18:56:34.51 ID:qGVIuFRu
実装を隠す
→知らなくても使えるように設計する
→使い方さえ変えなければいい
→中は変え放題、新しい使い方も追加放題

>>329
よくあるサンプルみたいに全メンバアクセッサ実装してるようなクソクラスだと
その原則破るための効果の方が強くなってしまうからなぁ

クラスの中から≠クラスファイルの中から
クラスの中から=クラス機能の中から

333: デフォルトの名無しさん 2014/12/17(水) 21:14:17.50 ID:lLmQTo2M
>>326
getter-setter をかましておけば、なにかのときに簡単に監視やフックを追加できる

334: デフォルトの名無しさん 2014/12/17(水) 22:00:02.25 ID:adMFmMY0
>>333
ちょっとした用途ならリフレクションから呼べば良いじゃん
機能として提供する必要が出来たならそんな直接参照するような裏ワザ使わないで継承するなり追加するなりしようよ

影響が外に広がらないようにカプセル化して直接参照する手段を封じるんだから
直接参照できるセッターやゲッターつけたら保証できなくなるじゃん

335: デフォルトの名無しさん 2014/12/17(水) 22:40:02.99 ID:lLmQTo2M
>>334
リフレクションは悪、コンパイル時に検出できるエラーがリフレクションにすると検出できなくなってしまう‥
まあ何でもかんでもsetter-getter で公開してしまうのはどうかと思うが(ましてやプロパティを公開してしまうのは最悪)

339: デフォルトの名無しさん 2014/12/18(木) 16:01:52.60 ID:a38PRbZq
>>335
> ましてやプロパティを公開してしまうのは最悪
.NETのクラスは山ほどプロパティを公開してるけど、これも最悪なの?

340: デフォルトの名無しさん 2014/12/18(木) 22:10:35.29 ID:nYq1QBRW
>>339
>>335 はプロパティをフィールドと混同している気がする。
フィールドを公開するのが最悪、なら納得できるもん。

>>338
setter/getterはあくまで、結果としてそうなるだけのものだよ。

あくまで例えばの話だけど setLeft(), setRight(), setWidth() という3つのsetterがあったとして、
内部データは「left,right」でもいいし「left,width」でも「center,width」でも
「center,half_width」でもいい、もっと言えば「width,right」でも構わない。
まあよほど処理上の都合がないかぎり最後のを選ぶ人は少数だと思うけど、
どれが単純なsetter/getterになるのか、どれが違うのかは外からは分からない。
そして、それは分からなくていいものだと思うよ。

状態が最初にあって、それを見たり弄ろうと思うとsetter/getterになっちゃうけど
まずそのオブジェクトで何をしたいのかを考えて、それを実現するための内部構造と考えると
自然とカプセル化されてくもんじゃないかな。

328: デフォルトの名無しさん 2014/12/17(水) 13:49:16.52 ID:dSysfVHr
カプセル内では、他のオブジェクトの定義を知らなくても済むように書く。
閉じたオブジェクトにすればいい。

331: デフォルトの名無しさん 2014/12/17(水) 19:24:20.07 ID:N1jNpsSg
327-330
いろいろありがとう
公開したいとこだけ公開すりゃいいのね

380: デフォルトの名無しさん 2015/11/22(日) 11:27:04.36 ID:yehd6qpM
ネットで調べていてもオブジェクト指向が分からない…。

仕事でVB(昔の)やってたんだけど、画面のプログラムは目次状態で動かす部分は全てモジュールに作って入れてた。
画面の目次(仮名)には
<モジュール名>//○○を行う
が続いてる状態で中身はモジュールへ、モジュール使い回ししながら作ってたんだけど(時折モジュール内にも目次できたりしてた)
これはオブジェクト指向とは違うの??
モジュールがクラスになっただけちゃうんかなって、うーん良く分からない。

違いを教えてください。

382: デフォルトの名無しさん 2015/12/18(金) 04:38:42.92 ID:TCff1iV0
>>380
vbのユーザー定義型とそれを扱うモジュール内の関数を一つのかたまりとして収めたのがクラスの考え方の原型。
vb なら本当のクラスも定義出来るんだが使ったこと無いのか?

383: デフォルトの名無しさん 2015/12/18(金) 07:38:43.70 ID:VKllly6g
>>382
ありがとう。
うーん、前職、書き方に制限ありまくりだったからクラスって本当に分からない。
情報系の大学だったけどプログラミングはほとんどやらなかったのに、基礎があるからって叩き上げられた形だったのよね。前職。
VB456にあるのかな。
.NET使う頃にはSEになってしまったから.NETもさわりしか分からない。
何かもう自分取り残されてるな…。

386: デフォルトの名無しさん 2015/12/31(木) 03:23:42.07 ID:riQaChnP
その言語のオブジェクト指向か、オブジェクト指向自体の定義か。
かなり違う。



元スレ:オブジェクト指向の活用方法を教えて下さい