10/01/12 00:30:00
>>157
自分の言葉で説明する気がねーならわざわざレスするなよクズ
160:デフォルトの名無しさん
10/01/12 00:32:58
>>159
俺は157ではないが、自分の言葉で説明したら1000レス楽勝で埋まると思うが。
161:デフォルトの名無しさん
10/01/12 00:35:43
俺らが知りたいのは名無しの誰かさんの有能さを証明することじゃなくて、
新しい技術への知識だろ。
履き違えるな。
162:デフォルトの名無しさん
10/01/12 00:54:21
勝手に俺らって括るなよ
俺は名無しの誰かさんの有能さを証明することなんだよ
163:デフォルトの名無しさん
10/01/12 00:57:29
>>162
だったらスレ違いだ。
マ板に池。
164:デフォルトの名無しさん
10/01/12 01:03:43
関数型は型にはまった事以外をやるとしんどい
まるで書き方を強制されてる気分になる
オ略向は酒飲んでても組める
165:デフォルトの名無しさん
10/01/12 01:04:40
>>160
許可する
1000レス埋めてくれ
166:デフォルトの名無しさん
10/01/12 01:20:34
結局マルチパラダイム言語Lisp最強という結論に・・・
167:157
10/01/12 01:29:58
>>159
自分の言葉かぁ
私が2chに書きちらすより、リンク先を読む方が100倍分かり易くてためになるとおもうけど?
万一参考になるなら読んでくだされ
えっと、GUIの特徴というと、
「イベントがあがったら、あれこれをする」という連鎖や
「ここがこーなったら、あっちがこーなる」という依存関係が
複雑に絡み合っている点が挙げられます
このような仕組みは、抽象的に考えると、
依存関係がグラフ構造を成しており、そこをデータが流れるように見えるので、
Dataflow Programmingなどとも言われます
極端に言うと、この依存関係をfunctionalに(そしてDynamicに)記述することで、
GUIを書こうという方向性が関数型言語界隈にはあり、
それが結構成功しつつある訳です
(続く?)
168:デフォルトの名無しさん
10/01/12 01:32:42
>>167
まず何を言いたいのか結論からかけよ
それで詳細をたずねられたらはじめて詳細を答えるように練習しろ
そんなに長い文章になること事態おかしいんだよ
169:デフォルトの名無しさん
10/01/12 01:35:03
人と話さないでひきこもって独りよがりなプログラムばっかり組んでるから
掲示板のレスもそうやって聞き手を意識できない
この下手糞が
170:デフォルトの名無しさん
10/01/12 01:43:24
>>167
判りやすいから続けてくれ。
168-9みたいな中身スカスカは無視してよし。
171:デフォルトの名無しさん
10/01/12 01:52:09
>>159で
>自分の言葉で説明する気がねーならわざわざレスするなよクズ
自分の言葉による説明を求めているのに
>>168で
説明は要らん。結論だけ言え
とかどうすりゃいいのw
172:157
10/01/12 02:05:30
結論から言うと、FRPの仕組みを使えば、関数型言語でもGUIは綺麗にかけますし、
今まで以上に簡単になります
例えば、イベントの連鎖をfunctionalに書こうとすると、
イベントからイベントを生成したり、
複数のイベントを組み合わせて新しいイベントを生成する書き方になります
ボタン1とボタン2のどちらかがクリックされたイベントはこう書けます
(define b1-or-b2
(merge-e b1-click b2-click))
そして、そのイベントが挙がった回数を数えるのはこうです
(define click-count
(accum-b (map-e add-one b1-or-b2) 0))
このような仕組は、所謂コールバックの代わりになるものです
また、click-countという値には、
明示的にset!といった破壊的代入を利用せずとも
常にクリックされた回数が入り込みます
(続く?)
173:157
10/01/12 02:20:11
このような依存関係の値(behaviorとかsignalとか呼ばれます)の面白い応用として、
"マウスの現在座標を数秒遅れて追随するアニメーション"が簡単に実現できるデモもあります
URLリンク(www.flapjax-lang.org)
(javascriptなのですぐ見れます)
このようなイベントの連鎖や依存関係の記述は、上っ面だけではありません
コンポーネントの描画属性、フォーカス、レイアウト、可視性
GUIツールキット自体にあれこれの依存関係が満載で、
FrTimeは実際にこれらをFRPの枠組で実装しています
(続く?)
174:157
10/01/12 02:36:06
残念ながらFRPの仕組みと利用方法は今現在あまり普及していませんが、
Microsoftがかなり強力に.NETの世界へこれらを導入しようとしていますし、
WebUIの世界にも進出しつつあるので、
一般的になってくるのも時間の問題かと思われます
えっと、他に書くことあったっけ?
質問あったらどぞ
175:157
10/01/12 02:51:30
少し詳細に踏み込むと、FRPでは入れ子や高階の関係も同様に扱える点が興味深いです
behaviorから別のbehaviorを入れ子に作り続けるbind(monadのbindですね)
behaviorをeventによって別のbehaviorに切替えるswitch
eventのeventをフラットなeventにマージするjoin
これらがあれば、動的な依存関係の組み替えが可能な訳です
176:デフォルトの名無しさん
10/01/12 03:28:13
よく判ってないけど、副作用が起きるのは諦めて、
入力を入れ替え続けると解釈することで矛盾の無い形で
実現してみましたって感じ?
CPSで関数が戻らないことを利用して関数の引数を更新し続けるような。
177:157
10/01/12 03:51:47
>>176
内部実装の話でしょうかね
純粋関数型言語ではそんな感じで、新しい値を次々と持ち回っています
イベントループの度に新しい値を生成するので、
アプリケーション全体では副作用は無くなります(描画は別)
純粋でない言語では、内部実装的には破壊的代入しちゃってる例が多いですね
178:デフォルトの名無しさん
10/01/12 06:26:25
>>172
>結論から言うと、FRPの仕組みを使えば、関数型言語でもGUIは綺麗にかけますし、
>今まで以上に簡単になります
はい、しゃべりすぎはじめの2行から君の話って意味ないんです
聞いておくけどFRPとかいうのを使わなかったら関数型言語だとGUIは綺麗にかけないっていってるのね?
179:デフォルトの名無しさん
10/01/12 09:34:44
俺からみるとあんまりGUI関係ないんだよね。FRPの仕組みの利点も。
画面描画がGUIの難しさの一番だろ。
抽象化しすぎると全然パフォーマンスが出なくて、
ある程度下のレイヤでゴリゴリ書かないと実用にならないっていう事が
いつまでたってもなくならない。
結局、どっちらもGUIに対して銀の弾丸にならない事だけは知っておかないとね。
(役に立つ事は認めつつも
180:デフォルトの名無しさん
10/01/14 01:01:56
オブジェクト指向の先には関数型言語があるでFA?
181:デフォルトの名無しさん
10/01/14 09:29:54
どうしてそれがFAになるんだ。
関数型言語で有用だと分かった技法が既存言語に取り入れられていくって
形になりそうだから、依然メインはオブジェクト指向なのかなぁと俺は感じた。
182:デフォルトの名無しさん
10/01/14 12:27:27
先の先の先は自然言語だけどね。その手前に論理型が来るのかな。
183:デフォルトの名無しさん
10/01/14 16:32:49
>>1
マイクで、ハローコンピュータとか言うと
勝手にプログラムしてくれるようになるんじゃなかったのか?
ソースはスタートレック。
184:デフォルトの名無しさん
10/01/14 16:46:36
んなもん少なくとも俺らが生きているうちは無理だろ
次元が違いすぎる
185:デフォルトの名無しさん
10/01/14 16:50:24
最近のグーグルとか見ていると
結構、言葉の解釈はしているじゃん。
中の人はあと10年位したら、ベストな検索結果を1つだけ生成したいと
言っている。
セマンティックウェブって奴?
パソコン君が意味を理解したら、次はどういう手続きでそれが実現するかを
考えられるんじゃねーの。
そうなったらプログラミングもしだすと思う。
186:デフォルトの名無しさん
10/01/14 16:56:23
意味と意図は別でしょ。
人間同士のコミュニケーションだって中々うまくいかないから、わざわざチーム内の規定や規則など作って曖昧さを無くそうと必死なのに、
話しかけるだけでコンピュータがやりたいことを理解してくれるとか無理だろ。
脳波でコントロールする入出力装置ができて、思うままに動かせるようになるって方が早いと思う。
187:デフォルトの名無しさん
10/01/14 16:57:35
脳波キーボードは早期に実現して貰いたい
188:デフォルトの名無しさん
10/01/14 17:01:54
>>186
> 意味と意図は別でしょ。
意図は人間が支持するんでしょ?
意味を理解できれば、どれとどれを組み合わせれば良いのか
どこを変えればよいのか、パソコンでも理解できる。
またそうなるように、人間が部品に意味をつける。
タグの凄い奴が出てくるんじゃねーの。
189:デフォルトの名無しさん
10/01/14 17:05:17
人間の発言にはたいてい膨大な前提条件や考え自体の矛盾があるから、
結局コンピューターからものすごい量の質問される事になって実用化は難しそうだと思う。
190:デフォルトの名無しさん
10/01/14 17:08:47
>>189
そこはライフログで自動的に属性を判断しましょうって事でしょ。
あとは力技で、
1000万台単位のパソコンを並列化したパワーで
人類の全てのデータを格納して、考え出そうという魂胆。
191:デフォルトの名無しさん
10/01/14 17:59:46
>>188
それが「プログラミング」なんだけどね
ビットの並びに意味付けするというのが本質
192:デフォルトの名無しさん
10/01/14 18:05:53
そうそう、意味をビットに落とす。
それを簡単にしたい->プログラミング言語とかで。
193:デフォルトの名無しさん
10/01/14 18:14:48
>>189
"いろんな言語で宿題スレ" の前スレで、Prologの人が2-3行に達する
長い述語名で定義を繰り返してたでしょ。あれは、ファジィにプログラムを
呼び出すための準備ですね。厳密に解釈していくだけがアプローチではない。
194:デフォルトの名無しさん
10/01/14 18:32:46
機械が人類を抹殺する時代が早くやってきてほしい
195:デフォルトの名無しさん
10/01/14 18:54:12
>>191
うーん、そういう風に言ったら、いつまででもプログラミングしている
という事になっちゃうので、ここでの議論とは合致しないと思う。
オムレツが食べたい。材料は卵となんかと指定するだけで
オムレツが出てくれば、それはもうプログラミングとは言えないと思う。
196:デフォルトの名無しさん
10/01/14 19:00:10
>>195
んー?
どういう立場で喋ってる?そりゃオムレツのレシピがプログラム済であるということでしかないのはプログラム経験あればわかるよね
197:デフォルトの名無しさん
10/01/14 19:27:00
セマンティックウェブってあれは80年代のlispでやってたようなAI技術そのまんまでびっくりしたわ
198:デフォルトの名無しさん
10/01/14 19:28:51
温故知新
199:デフォルトの名無しさん
10/01/14 19:30:26
>>196
卵など個々の材料の意味づけと
オムライスのレシピから
セマンティックウェブで
コンピュータが推測して
オムレツを作っちゃうようなイメージ。
200:デフォルトの名無しさん
10/01/14 19:41:52
>>199
卵など個々の材料の意味づけ=プロパティ設定
オムライスのレシピ=焼き方メソッド
オムライスとオムレツは継承関係、みたいなことを指示すると言ってんじゃないのそれは
201:デフォルトの名無しさん
10/01/14 19:42:05
>>199
レシピのコーパスがライブラリ
「オムレツつくって」がmain関数
何も新しいことはない。
202:デフォルトの名無しさん
10/01/14 19:44:38
また、たとえ話か
そのたとえ話が適切かどうか誰が証明してくれんだろな
203:デフォルトの名無しさん
10/01/14 19:45:57
オムライスとかオムレツとか、たとえが混乱して悪いんだけど
コンピュータが既存のソースコードや部品の中身を意味として理解していて
頼んだ人のプロフィールも理解していると
前に似たようなプログラムやアルゴリズムがあったなと
コンピュータが検索して
頼んでる会社は中小企業だから、そんなに重厚な処理は不要だろうとか
この業界だから、こういう処理も必要だなとか
考えて部品を増減したり
ソースコードのこの部分は、こういう意味だから
ここには別の記述を当てはめることが出来るなとか考えて
ソースコードを挿入したり出来ちゃうんじゃないか
というイメージ。
火星に行く為のアプリケーションを作ってくれというのは
切り貼りでは解決しないので無理。
204:デフォルトの名無しさん
10/01/14 19:49:57
>>203
> 考えて部品を増減したり
考えてというと語弊が在るのかな。
アマゾンのお勧め本みたいなイメージ。
前例から似たようなものを検索。
前例を作るのは人間で、コンピュータはそれをチョイスしている
だけなんだけど
意味は理解しているので、現在のアマゾンよりは賢い。
205:デフォルトの名無しさん
10/01/14 19:55:35
どういう立場で?と聞いたのは、意味を理解できるコンピュータがあったなら、というとこで喋るのか、
「意味を理解させる」というのは突き詰めれば条件分岐であるというとこまで踏み込んで喋るのかということなんだけど
前者みたいね
それだとなんとも言いようがない
206:デフォルトの名無しさん
10/01/14 19:57:46
「卵のふわふわしたフライパンで作るおいしいやつ!」って
”俺”が言えばオムレツが出てきて
”オムライス嫌い”の奴が言えば卵焼きが出てくる
ってのは、やっぱり難しいと思うな。
その判断が出来るまでの属性を与えないといけないし、
プライバシーに案外うるさい人類がそこまでデータを提供してくれるとは思えない。
だいたいこんなものをコンピュータの究極と位置付けるのはそもそもおかしい。
考えるのをやめたニートベースの幸せではなくて、
もっと能動的に動く人間のための幸せを追求すべきだ。
と、適当な事を言って見る。オブジェクト指向全然関係ねぇ。
207:デフォルトの名無しさん
10/01/14 20:35:11
オブイェークト指向
208:デフォルトの名無しさん
10/01/14 21:31:06
>>205
> 条件分岐であるというとこまで
それはおかしいよ。
Amazonみたいな仕組みも、条件分岐なんだから
コンピュータの黎明期から、なにも進歩していません
みたいなシラケタ話にしても仕方が無い。
>>206
> その判断が出来るまでの属性を与えないといけないし、
利益があるなら、与えても何の問題もない。
オムライスの情報なんて、幾らでも与えれば良いじゃん。
また詳細に与えなくても、人間も企業も
ある程度グループ化できる。
プライバシーを全部与えなくてもAmazonでお勧め本は
紹介できる。それだけの話だ。
209:デフォルトの名無しさん
10/01/14 21:40:27
しらけてるというか、陳腐だなあということなんだけど
210:デフォルトの名無しさん
10/01/14 21:51:18
陳腐とか言われちゃったよw
まあ銀の弾丸を考えると
似通ってくるというのはあるんだろうけど
それなりに面白い話が出来るんじゃねーかと思ったんだ。
お前とは、あんまり話も合わないみたいだし
他所でやるよ。さよなら。
211:デフォルトの名無しさん
10/01/14 21:54:20
そりゃあんた意味を理解するコンピュータがあって
会社名入れたらプログラム出てくるといいねと言われたってそれ以外どう言いようがあるんだよw
さようならw
212:デフォルトの名無しさん
10/01/14 22:25:53
ただの妄想の話でそこまで熱くならんでも
213:デフォルトの名無しさん
10/01/19 08:30:06
少し上の方で自然言語でプログラミングの話あったでしょ。
あれって自然言語の文法を借りて、語彙も制限して使う話で、
コンピュータがなんでも理解できるという意味ではない。
214:デフォルトの名無しさん
10/01/19 08:46:39
少し上の方で自然言語でプログラミングの話あったでしょ。
あれって自然言語の文法を借りて、語彙も制限して使う話で、
コンピュータがなんでも理解できるという意味ではない。
215:デフォルトの名無しさん
10/01/19 20:52:50
ちょっと気の利いたDSLレベルのものしか作れなさそうだ。
自然言語は複雑な問題を簡潔に記述するのに向いた文法とは思えない。
216:デフォルトの名無しさん
10/01/21 18:36:30
>>215
25年以上も後の話でDSLはないだろ。
217:デフォルトの名無しさん
10/01/22 12:11:32
その時代には、プログラミングの対象はコンピュータというより
ロボットだと思うけど、それでも自然言語でいけるようになるのかな?
218:デフォルトの名無しさん
10/01/22 12:23:37
漫画みたいな人工知能は実現不可能だって結論出ただろ
219:デフォルトの名無しさん
10/01/22 12:28:23
ロボットがどうして漫画みたいな人工知能ということになるんだい
動き回るコンピュータ = ロボット ではないのかな?
220:デフォルトの名無しさん
10/01/22 15:35:32
>>219
適切な時機にアームを制御できるだけでロボットだね。
221:デフォルトの名無しさん
10/01/24 15:44:58
>>219
それが俺たちの望んでいるロボット像かってことだよ。
今ロボット関係の研究しているやつらなんてほとんどが
漫画みたいなロボットに憧れてロボット作ってるわけで。
222:デフォルトの名無しさん
10/01/25 12:47:54
ガンダムは作れるけどバルキリーはさすがに無理
223:デフォルトの名無しさん
10/01/25 13:26:39
俺はガンダムより最終形態の天元突破グレンラガンがほしい
224:デフォルトの名無しさん
10/01/25 18:17:57
デカイだけでダサイメカは嫌い
モスピーダなんてホンダがホントに作りそうじゃないか
225:デフォルトの名無しさん
10/01/25 18:29:23
>>217
自然言語は非オブジェクト指向的体系の代表だから、
オブジェクト指向的なロボティクスの動作記述に適していないんじゃないのと
いう疑問と解釈していいのかな。
226:デフォルトの名無しさん
10/01/25 18:38:01
>>225
25年とかそれ以上の先のことでしょ。現在だって、
情報家電のユーザインターフェイスにオブジェクト指向なんて
持ってきたらそれだけでアウトですよ。
227:デフォルトの名無しさん
10/02/04 03:46:10
てか家電の場合は全体が1つのオブジェクト
228:デフォルトの名無しさん
10/02/04 12:25:50
利用者が打ち込むコマンドレベルの話だろ。
229:デフォルトの名無しさん
10/02/08 19:01:55
利用者のコマンドとしてのOOねぇ…右クリックメニューみたいな感じ?
230:デフォルトの名無しさん
10/03/17 01:17:19
Googleが開発したGoっていう言語のオブジェクト指向が凄いらしい。
オブジェクト指向の良い部分だけを取り入れたハイブリッドな思考
は今後の主流になるかな?
231:デフォルトの名無しさん
10/03/18 07:49:14
よく分からんのだが、オブジェクト指向の良くない部分てなに
232:デフォルトの名無しさん
10/03/19 21:30:22
>>231
意味がないところ
別にオブジェクト単位にしたところで工数など1hたりとも減らすことはできない
233:デフォルトの名無しさん
10/03/20 00:36:58
>>230
対象物をすべてオブジェクトって概念で抽象化しようとするのに無理があるところw
234:デフォルトの名無しさん
10/03/20 15:26:43
とりあえず、仕様を記述するための規格化された優秀な言語が欲しいな。
実装は後回しでもいいから、人間の意図の表現とプログラミング言語の間を埋める、
表現の手段が欲しい。
235:デフォルトの名無しさん
10/03/20 15:56:31
Prologじゃだめなの?
236:デフォルトの名無しさん
10/03/20 20:22:15
>>232-233が何か重大な勘違いをしている気がする件。
オブジェクト指向は一次的な工数を減らすためにやるものではないし、
ましてや、対象を全てオブジェクト化することを目的としてやるものでもないぞ?
237:デフォルトの名無しさん
10/03/20 20:46:16
>>236
じゃあ、なんのためにやるの?
成果を数字で表してくんない?
238:デフォルトの名無しさん
10/03/20 21:05:38
>>237
なかなかきちんとまとまった説明はないけど、例えばこれとか参考になるんじゃないかな。
URLリンク(itpro.nikkeibp.co.jp)
要求の変化に伴う保守性や再利用性、なんてのはなかなか数値化できんわな。
個人的な経験から言えば、OOの基本的な概念を軽く押さえたら、
次はデザインパターンの勉強をするのが理解の早道だと思う。
239:デフォルトの名無しさん
10/03/21 00:16:39
>>237
まぁ、グローバル変数をオブジェクトに押し込んでみました、ってだけの技術やからね…
成果なんて出ないと思うよ
240:デフォルトの名無しさん
10/03/21 00:45:10
>>239が何を言っているのか分からない
241:デフォルトの名無しさん
10/03/21 00:45:57
わかんないんです(><)
242:デフォルトの名無しさん
10/03/21 00:46:32
>>238
結局、何が言いたいのかまったくわからない
自分の言葉で単刀直入に結論から言ってよ
243:デフォルトの名無しさん
10/03/21 01:18:48
>>242
俺の理解では、
オブジェクト指向の目的:
・複雑な要件を「まとまり」単位で整理することで、人間の手に負えるようにする
・「まとまり」同士を疎結合に保つことで、要求の変化に柔軟に対応できるようにする
(・多人数開発において、個々のコードの影響範囲を限定することでバグの作りこみを減らす)
「まとまり」につく名前は「オブジェクト」だったり、そうでなかったりするけど、基本は同じ。
244:デフォルトの名無しさん
10/03/21 02:11:13
>>243
つまり数字ではでてこないのね
気がするだけレベルなのがな
245:デフォルトの名無しさん
10/03/21 02:33:13
>>244
どういう種類の数字?
こうした原則に則って粛々とやっていけば、目に見えて保守しやすいコードがアウトプットできるし、
仕様変更に伴う工数も大幅に短縮できるはずだが。
つうか、見ての通り、きちんとコーディングする上でごくごく当たり前の方法論でしかないわけで、
『「工数○○日短縮」って数字で示されないとやる気が起きない』とかいう話になること自体が不思議。
246:デフォルトの名無しさん
10/03/21 02:41:06
>>245
>仕様変更に伴う工数も大幅に短縮できるはずだが。
だったら数字をだせよ
247:デフォルトの名無しさん
10/03/21 02:43:21
>>245
逆に考えよう
それが自分のただの思い込みだったら?
ぶっちゃけC++とC言語とで比べてまったく同じ処理をするソースを書いたことないでしょ?
248:デフォルトの名無しさん
10/03/21 02:56:25
>>246
そりゃ、書いてるコードや仕様変更の内容による。
>>247
異なる言語で同じ処理を「試しに」書けてしまうような規模の開発でやったら、
そりゃ、「効果が薄いわりに冗長なコーディングを強要される」と感じるに決まっている。
個人的な経験で言えば、数千NCSS程度のコードでも、こういうことをきちんとやるだけで
保守性にかなり差が出てくると思う。
249:デフォルトの名無しさん
10/03/21 03:01:26
>>248
>保守性にかなり差が出てくると思う。
「思う」以上のこと言えないよね?
250:デフォルトの名無しさん
10/03/21 03:03:51
>>249
実体験と書いてあるわけだが。
251:デフォルトの名無しさん
10/03/21 03:05:24
>>250
だったら「思う」じゃなくて事実を書けばいいじゃん
252:デフォルトの名無しさん
10/03/21 03:11:45
>>251
揚げ足取りがやりたいならよそでやってくれ。
253:デフォルトの名無しさん
10/03/21 03:19:46
>>252
どこが上げ足とってんだよw
工数を大幅に短縮できるっていうからそれはどうして?って聞いてるのに
これこれこういう理由で具体的にこう減らせる
って話をしなきゃいけないのに「思う」とかそんなあいまいなレスつけるからだろ
知らなきゃレスしなきゃいいだろ
254:デフォルトの名無しさん
10/03/21 03:28:33
>>253
実体験に基づいて、実際にオブジェクト指向を採用することによる効果が出てくるコード規模について、
推測を交えて話したら、君の中では俺が全てについて憶測で話していることになるの?
255:デフォルトの名無しさん
10/03/21 04:15:50
>>254
だから知らないなら無理してレスしなくていいって
別に俺の問題に対する答えをもってるわけじゃないんでしょ?
256:デフォルトの名無しさん
10/03/21 04:30:53
>>255
えーっと、君の問題って何だっけ?
257:デフォルトの名無しさん
10/03/21 04:31:57
>>255
一人でコード書くなら差はあまり感じられないかもしれない
オブジェクト指向は、クラスのカプセル化と
小規模なクラス群からの継承やコンポジションで開発を進めていく
クラス型の選択で仕様変更を楽にできるメリットや
複数人で開発するにあたり、機能を細かく開発したり、拡張部分を楽に開発可能だし
カプセル可により、他人が安全に機能を運用できるメリットもある
特筆すべきなのは、直感的にソースがよめるため可読性が高くなること
部品を集めて組み立てるかのように、機能の選択で構築するから分かりやすい
言い換えると、中途半端なオブジェクト指向が一番読みづらい
スパゲティコードとなんら変わらないものになる
258:デフォルトの名無しさん
10/03/21 04:39:17
>>257
だから具体的な答えをもってないのになんでレスするの?
無理しなくていいよ
259:デフォルトの名無しさん
10/03/21 04:44:18
>>258
可読性の向上や、想定していない使用方法からくるバグとデバッグ時間
コードの修正による再コンパイル時間
諸々の理由からくる余計な時間が省けるだけ
元より開発能力の高い人だけの少人数開発で
再開発しない単発の開発なら
おそらく工数は変わらないか
余計な時間がかかるかもしれない
まあ本当に開発能力が高いなら微々たる時間だろうけど
260:デフォルトの名無しさん
10/03/21 04:52:08
>>259
>可読性の向上や、想定していない使用方法からくるバグとデバッグ時間
向上してるかどうかなんてわかんないんでしょ?
261:デフォルトの名無しさん
10/03/21 04:52:22
>>258
お前の言っている数値ってなんだ?
基準は相対基準か絶対基準か?
工数は普通相対基準で計るもの
相手が工数が減ったと言っているから充分だが
相手に、何の数値を求めている?
何も分かっていないで言ってないか?
お前馬鹿だろう
262:デフォルトの名無しさん
10/03/21 04:59:09
>>261
あー、わからないならレスしなくていいって
そこからいってなにをすれば証明にいたるのかわからない奴相手にしたくないから
263:デフォルトの名無しさん
10/03/21 05:00:16
>>260
可読性がってこと?
まあそうだね
数値化はできないな
だけど、開発規模がでかくなればでかくなるほど
自分が作成していないコードが増えることになる
そのとき、ヘッダ名(クラス名)と
外部に公開されたメソッド(publicなメンバ関数名)さえ分かれば
何をする部品なのかすぐわかる
コメント残せばいいじゃんと思うかもしれないが
他人が作ったコードと、他人が書いたコメントが一致してるかどうかなんてはっきりいって信用できん
後はUMLの設計図、クラス図さえあれば
どのクラスと関係を持ってるのかがわかればより早いよ
264:デフォルトの名無しさん
10/03/21 05:04:00
>>263
ごちゃごちゃ無駄なこと書いてるけど結局可読性が上がってる云々とは関係ないじゃないか
だからわからないのに無理してレスするなよ
265:デフォルトの名無しさん
10/03/21 05:06:40
>>264
ひとつひとつのメソッドを全て読むのと、名前だけの確認で終わるのどっちが早いのかはわからない?
266:デフォルトの名無しさん
10/03/21 05:11:03
>>265
なんで全然関係ない話をするの?
267:デフォルトの名無しさん
10/03/21 05:13:17
>>266
可読性の話の続きなんだが
268:デフォルトの名無しさん
10/03/21 05:14:33
もしかして、プログラミングしたことないのか?
理屈だけで覚えようとしてるなら用語もわからないかもしれないな
269:デフォルトの名無しさん
10/03/21 05:17:44
>>267
それがC言語からC++に変わって(オブジェクト指向という意味で)のメリットなの?
君、自分がまったく関係ない話してるの気がついてる?
270:デフォルトの名無しさん
10/03/21 05:19:25
人には具体的な答えを求めて
自分は片言の日本語でやりとり
一つでもおかしな点があると思い込んだら全否定
質問して知識の物乞いしてんのに殿様気取り
普通ならぶん殴られてもおかしくないから直せよ
271:デフォルトの名無しさん
10/03/21 05:21:12
>>270
だから別に知らないならレスしなくていいって言ってるじゃん
272:デフォルトの名無しさん
10/03/21 05:35:05
>>269
外部にみせていいメソッドだけ公開できるのはC++からだろ
カプセル化ができないと全てのメソッドを公開しないといけない
だから全部読むはめになる
どこもずれていない
あといつからCとC++の話になった?
構造指向とオブジェクト指向は両極にある概念じゃない
C++の概念はCの概念を内包する
Cの考え方はわかっているのだろ?
それならオブジェクト指向が延長線上にあるのもわかっているはず
わからないなら、アセンブラからCに変わって発達した
構造化プログラミングのメリットを269なりに述べてみ
あと、はっきり言って認めた部分もあるだろ
理屈がわかるならわかっているはずだ
そうでなければただの荒らし
もうレスは返さない
273:256
10/03/21 05:43:24
>>257
代わりに答えてくれてありがとう。
どうも、彼は単に自分の知らない概念を全否定したいだけの人だったみたいだね。
時間を無駄にしてしまった。
274:デフォルトの名無しさん
10/03/21 05:46:36
あと開発速度でいえば、CとC++なら二分の一以下になる
コンテナ操作が標準であるし、templateで静的動作(コンパイル時動作)が可能になる
煩雑な型の作成すら汎用化できるため
今まで個別に作っていたクラスを一つのファイルで書ける
正直、これは説明しようにも長くなりすぎるから割愛する
275:デフォルトの名無しさん
10/03/21 05:47:26
>>272-273
なんでさっきから知らないのに無理やりレスするの?
いいって言ってるのに押し付けるのやめてよ
276:デフォルトの名無しさん
10/03/21 05:48:16
>>273
はっきり言えば、あなたの言い方が
多分オブジェクト指向を理解していると言いづらかったから横槍いれたんです
もっと勉強してください
277:デフォルトの名無しさん
10/03/21 05:50:10
>>276
そんなこといって結局メリットに関してなんも具体的な説明できないじゃん
だから知らないならレスしなくていいって言ってたのにやけにつっかかるなぁ
278:デフォルトの名無しさん
10/03/21 06:00:07
>>277
再コンパイル時間については?
可読性の向上については?
反論ないようだね
これ以上レスしないから安心していいよ
悪質なあなたの反論を掻い潜ることができたと言うことは
私の理屈は間違いないということだ
なお続けようとするあなたに同情すらしてやらないよ
理論もプログラミングも私より劣っている人に説明できて
理解を簡潔にまとめることができた
279:デフォルトの名無しさん
10/03/21 06:26:18
>>278
あれが具体的?
頭おかしいんじゃないか?
工数はいくつ減らせるの?
普段仕事してて1hだって根拠を求められるのに
なんで言語に対してはそういい加減なの?
ちょっとわけありでいい加減なことやってる場合じゃないから
あなたみたいな人普通に邪魔なんだけど
280:デフォルトの名無しさん
10/03/21 06:30:10
それと何度もいうけど
知らないなら無理やりレスするのやめてもらえます?
まったく同じ仕様のものをC言語とC++とで比較した経験すらおそらくあなたないですよね?
281:デフォルトの名無しさん
10/03/21 06:33:43
>>280
知らないならレスしなくていいよ
282:デフォルトの名無しさん
10/03/21 06:45:02
>>279
工数?
1/2以下
283:デフォルトの名無しさん
10/03/21 11:11:28
一つの単位で機能を管理・提供できる点がoopじゃないのん。
cのstructじゃ処理(関数)を外側で指定(関数ポインタへの代入)しなくちゃならないんだし。
waveのinとoutの低レベルな関数はcでべた書きで用意して、
waveファイル, waveinストリーム, waveoutストリームってな感じで、
簡単に扱えるようにしたclassはc++で用意してってやると、
利便性も拡張性も供給できて、高レベルも低レベルも両方同じコードで提供できる。
詰まる所、需要と供給の話程度かと。
284:デフォルトの名無しさん
10/03/21 13:37:34
>>279
まぁ、貴方のように、既にデスマってしまった人を救済する銀の弾丸ではないかもね。
そもそも、そういう事態に陥らないための方法論がオブジェクト指向。
あるいは、レガシーコードをどうにかしたいって話だったら、こういう本を読んでみると良いんじゃないかな。
URLリンク(www.amazon.co.jp)
URLリンク(www.amazon.co.jp)
285:デフォルトの名無しさん
10/03/21 23:42:59
>>283
てか「処理」と「データ」をオブジェクトの名の下に一元管理できるのは大きな要素だと思う
286:デフォルトの名無しさん
10/03/22 16:33:30
>>285
処理とデータを関連づけるのはいいが
一緒にするのはダメなオブジェクト指向の典型だ
287:デフォルトの名無しさん
10/03/22 17:03:59
>>286
おまえ、手続き抽象ぐらいは理解した上で書いているのか?
288:デフォルトの名無しさん
10/03/22 17:57:47
>>287
否定してるわけじゃない
インターフェースとデータは分けて管理するのは当然だろ
289:デフォルトの名無しさん
10/03/22 18:56:51
>>288
それって細かい実装技術でしょ?
それが設計にまで影響しちゃうのってないじゃん
なんかこのスレに相応しくない話してない?
インターフェースクラスが本質の設計に影響を与えるのってないでしょ?
290:デフォルトの名無しさん
10/03/22 18:57:49
インターフェースクラス??
291:デフォルトの名無しさん
10/03/22 19:05:19
>>290
どっちでもいっしょでしょ?
292:デフォルトの名無しさん
10/03/22 19:06:11
>>291
え?w 何と何が?w
293:デフォルトの名無しさん
10/03/22 19:06:42
>>292
上げ足取りたくてレスしたの?
死ねよ
294:デフォルトの名無しさん
10/03/22 19:09:19
>>293
どうせ二行費やすなら>>292答えろよw
とかいいつつゴメンね、ぐぐったら"インターフェースクラス"なるものの正体が分かったわ。
295:デフォルトの名無しさん
10/03/22 19:10:19
>>294
まあ、インターフェースが設計に影響与えるのはおかしいでそ?
なのでこの話はここでおしまい
296:デフォルトの名無しさん
10/03/22 19:13:58
>>295
なんか誤解していたら申し訳ないので伝えておく。
俺がここまでにレスしたのは>>290 >>292 >> 294だけ。
「インターフェースクラス」っていう謎の用語に怯えただけ。
話の続きは>>288さんとでもやってんろ。
297:デフォルトの名無しさん
10/03/22 20:37:29
>>295
だいたいの設計には必要無いかもな
でもひとつのデータに複数種類のアクセス方法(インターフェース)が必要な場合どうする
まさか一つのクラスにまとめるわけないだろ
インターフェースの管理についても設計すべき時なんてプログラムやってたらいくらでもあるだろ
298:デフォルトの名無しさん
10/03/22 20:38:36
>>297
ないよ
ないから君の話にはこれ以外のレスしない
おわり
299:デフォルトの名無しさん
10/03/22 20:39:12
そんなに実例みたくばboost読んでみろよ
300:デフォルトの名無しさん
10/03/22 20:41:30
boostのインターフェース設計がまさか設計無しに作られてるとか低能な言い訳しないでね
301:デフォルトの名無しさん
10/03/22 20:44:55
ごめん
Cがどうとか言ってた基地外か
boost読めないから無理だったね
302:デフォルトの名無しさん
10/03/22 22:51:31
あたかもboostがいいようにいうけどまったくいいことないと思うよ
303:デフォルトの名無しさん
10/03/23 01:29:06
いい悪いの話ではない
話題をそらすなよ
304:デフォルトの名無しさん
10/03/23 01:34:20
>>297
javaだとインターフェースクラスを直接作れるね
C++だと、メンバ変数のない純粋仮想関数だけのクラスだと思えばよし
305:デフォルトの名無しさん
10/03/25 01:10:49
マルチエージェント指向
306:デフォルトの名無しさん
10/03/27 01:07:56
>>303
なら、boostはどんな説明をするために話題に出したの?
こんなのオブジェクト設計なんてしてねーただのオナニーライブラリじゃん
307:デフォルトの名無しさん
10/03/27 15:22:24
>>306
論派したいんだろうけど、話題反らしたり無知披露したりで屑認定されてるよ
308:デフォルトの名無しさん
10/03/27 15:34:49
>>306
頭悪いんですね…
309:デフォルトの名無しさん
10/03/27 18:14:44
オブジェクト指向?なにそれ、おいしいの?
オブジェクトなんて構造体でしょ?なんでそんなに有り難がる必要があるだろう
ましてや構造体でシステム設計とか意味不明
310:デフォルトの名無しさん
10/03/28 01:59:40
>>309
勉強して批判しようね屑
311:デフォルトの名無しさん
10/03/28 13:46:27
熟練のプログラマって意外とオブジェクト指向で作らないんだよね。
考えが古いのかな?
実はあまり必要ないとか?
312:デフォルトの名無しさん
10/03/28 14:05:40
>>311
意味ねーし
オブジェクト指向になって具体的にいいことって出せる奴いねーもん
313:デフォルトの名無しさん
10/03/28 14:12:51
>>312
Stringクラスも不要?
314:デフォルトの名無しさん
10/03/28 14:17:16
>>313
仮に似たような機能C言語で作ったらいらないな
315:デフォルトの名無しさん
10/03/28 14:25:46
>>314
文字列の長さ順にソートするような場合どうする?
strlenを毎回呼ぶつもり?
316:デフォルトの名無しさん
10/03/28 15:15:18
>>315
それはC++でないと作れない機能ですか?
ってことだな
同じ労力だと思うぜ
317:デフォルトの名無しさん
10/03/28 15:47:16
>>316
ってことだな? 思うぜ?
>>315に具体的に答えることは不可能?
「仮に似たような機能C言語で作ったら」と言ってたのに。
318:デフォルトの名無しさん
10/03/28 15:52:23
>>317
は?
それって何か問題あるの?
っていうか話の主旨をどこにしたいの?
俺は別にライブラリの出来不出来の話をしたいわけじゃないんだけど?
319:デフォルトの名無しさん
10/03/28 15:53:45
>>318
ライブラリの出来不出来の話などするつもりはない。
320:デフォルトの名無しさん
10/03/28 15:55:30
>>319
じゃ、何が言いたいんだよ
さっきから
321:デフォルトの名無しさん
10/03/28 15:56:47
>>320
「文字列の長さ順にソートするような場合どうする?
strlenを毎回呼ぶつもり?」
322:デフォルトの名無しさん
10/03/28 16:16:25
stringクラスと、そのsize()メソッドがあるから、
そのインスタンスsに対しs.size()とサイズを取得できる。
char *に対してはstrlenを毎回呼び出す必要があるか、
呼び出さないためには値をキャッシュする変数を別途用意する必要があり、
それらの生成破棄など、管理する手間が別途発生してしまう。
また、キャッシュのための変数の中身は、
strlenの結果と同一であるように注意を払う必要も出てしまう。
これは非常に煩わしい。
一方、stringクラスのsize()メソッドを使う場合は、
サイズの再計測もさせないように実装しうるし、
それゆえ、別途キャッシュするような変数も、
その変数との同一性への心配も不要になる。
オブジェクト指向になって具体的にいいことのひとつだと思う。
323:デフォルトの名無しさん
10/03/28 17:02:42
>>322
っていうC言語の関数を用意したら?
でお仕舞いな話を出されてもねw
324:デフォルトの名無しさん
10/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
325:デフォルトの名無しさん
10/03/28 17:18:23
>>324
だから君が言ってるのはライブラリの有無の話でしょ?
最近、こんな馬鹿が金もらってプログラム組んでるからな
326:デフォルトの名無しさん
10/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で同等のことをするのは大変。
大変じゃないというのならサクッと示してほしいところ。
327:デフォルトの名無しさん
10/03/28 17:21:37
>>326
>毎回strlenを呼ばずにCで同等のことをするのは大変
大変(笑)
328:デフォルトの名無しさん
10/03/28 17:22:30
>>325
すでに>>322で書いたように、stringに対してs.size()が呼べるからこそ、
>>315の問題の部分は、return a.size() > b.size(); と書ける。
オブジェクト指向じゃないとこうならない。
329:デフォルトの名無しさん
10/03/28 17:25:55
>>328
バーカw
しゃべるたびに頭になにも入ってないのがバレバレだなw
330:デフォルトの名無しさん
10/03/28 17:26:39
オブジェクト指向不要論みたいなのを掲げて煽ってるヤツって釣りじゃねーの?
本当に不要とか思ってるのなら単なる馬鹿で相手にするだけ時間の無駄だと思うんだが。
331:デフォルトの名無しさん
10/03/28 17:27:57
文字列の長さでソートする時、strlenを毎回呼び出さないですむ方法が、
Cでスマートに表現できるのなら俺は>>329をバカと呼んだりはしないよ。
332:デフォルトの名無しさん
10/03/28 17:28:06
指摘するほうもオブジェクト指向と全然関係ないところをあげて
サブルーチン単位の細かいことしか挙げないのはどうしてなの?
はじめのオブジェクト指向にテンプレートなんて入ってなかったでしょ?
333:デフォルトの名無しさん
10/03/28 17:30:39
>>331
は?意味がわからない
仮に構造体をもって
typedef struct{
char *str;
int size;
}MYSTR;
ってやって毎回strlenを呼び出さなくていい状態にしたときに
それは君のいう「毎回」の定義に入ってるの?入ってないの?
前提がスカスカすぎて答えられないんだよバーカ
こんなことも想像できねーのか?
334:ああ
10/03/28 17:32:23
同意
URLリンク(d47.decoo.jp)
335:デフォルトの名無しさん
10/03/28 17:33:33
>>333
ほら、そうなる。
>>322
> 呼び出さないためには値をキャッシュする変数を別途用意する必要があり、
> それらの生成破棄など、管理する手間が別途発生してしまう。
> また、キャッシュのための変数の中身は、
> strlenの結果と同一であるように注意を払う必要も出てしまう。
別途に構造体や変数を用意したり使いまわしたりすることなく、
typedef structのsizeを隠し、
サイズ取得へのインタフェースをsize()と*ひとつだけ*用意したのがオブジェクト指向だ。
336:デフォルトの名無しさん
10/03/28 17:36:10
>>335
はぁ?
だからC++の場合ライブラリとしてStringが用意されてるのは認めて
C言語ではライブラリの類を認めないってのはどういう理論なの?
Stringはライブラリでしょ?
C言語で俺が書いたMYSTRがそれに当たるんでしょ?
337:デフォルトの名無しさん
10/03/28 17:38:13
それとこの辺ってオブジェクト指向関係ないじゃん
なんでこんなサブルーチン出してオブジェクト指向云々の説明をしようとするの?
できっこないじゃない
338:デフォルトの名無しさん
10/03/28 17:38:54
データ抽象がオブジェクト指向だっていうならCだって
オブジェクト指向プログラミングできるだろう
>>335 みたいなバカが多いんだよね
オブジェクト指向脳の連中って
339:デフォルトの名無しさん
10/03/28 17:40:48
これはさすがに会話続行不能なレベルだよね
ライブラリと言語仕様と設計の区別もついてない
文字列クラス出してなんでオブジェクト指向の説明になるの?
仕事でもすごいトンチンカンなことやってそう
340:デフォルトの名無しさん
10/03/28 17:44:12
>>336
> また、キャッシュのための変数の中身は、
> strlenの結果と同一であるように注意を払う必要も出てしまう。
カプセル化を用いるからこそ、size()のみが提供され、
typedef struct{
char *str;
int size;
}MYSTR;
streln(str)とsizeの値の整合性を気にする必要がなくなる。
>>337 カプセル化はなんの話題かな?
>>338 Cでオブジェクト指向プログラミングできるか否かについては言及していない。
>>339 カプセル化はオブジェクト指向ならではだろう?
341:デフォルトの名無しさん
10/03/28 17:49:12
別に文字列クラスでオブジェクト指向を説明することについては間違ってないと思うが。
つうか、オブジェクト指向を理解しようとしない奴には何を言っても無駄だろう。
「なぜクラスをインスタンス化する必要があるのか」ってのをよく自分で考えてみたらどうなの。
いちいち説明しないとわからんなら発言すんなよ、って言いたいね。
342:デフォルトの名無しさん
10/03/28 17:50:17
>>340
なんでそうやって小手先の技にこだわるの?
オブジェクト指向設計の話をしてよ
343:デフォルトの名無しさん
10/03/28 17:53:12
>>342
オブジェクト指向設計??
その話をするのはまだ早いとおもう。
今はまだCと比較できる部分のほうがいいかと。
344:デフォルトの名無しさん
10/03/28 17:54:21
>>341
なんで仕様書がないサブルーチンなんかでオブジェクト指向の話ができるの?
理解してないのは君のほうなんじゃないの?
だから文字列クラスでオブジェクト指向の話ができるなんていっちゃうんじゃないの?
できないよ
345:デフォルトの名無しさん
10/03/28 18:03:27
文字列に関連したオブジェクト指向のメリット
* 色々なエンコーディングの文字列を統一的に扱うことができる。
* 色々なエンコーディングの生文字列と、UNICODE等の内部表現の文字列を統一的に扱うことができる。
* 色々なエンコーディングの文字列間の比較やソートなどを簡単におこなうことができる。
などなど。
こんな簡単なことに気付きもしない生半可な知識でオブジェクト指向を否定するのって、
ほんとうに愚かで馬鹿馬鹿しいことだと思うのだが、どうよ?
346:デフォルトの名無しさん
10/03/28 18:15:52
>>345
彼らはカプセル化すら分かってないから…。
内部表現丸出しでも平気らしいし。
347:デフォルトの名無しさん
10/03/28 18:17:17
初心者w
348:デフォルトの名無しさん
10/03/28 18:29:11
>>315
オブジェクト指向をまったく知らない者ですが。質問です。
ファイルから一行文字列が読み込まれ新しいstringインスタンスが
生成されるとすると、その度にsetof()が実行され属性sizeにsetof()の結果が
セットされるのですか?
そうなら分かるのですが、そうではないとするとsetof()でstrlen()でも
大差ないような気がするのですが。
349:デフォルトの名無しさん
10/03/28 19:08:36
>>345
それオブジェクト指向のメリットなのー?(爆笑)
350:デフォルトの名無しさん
10/03/28 19:24:02
追い詰められたカスの特徴w 理屈で返事しないw
351:デフォルトの名無しさん
10/03/28 19:34:49
はぁ?文字列クラスなんて意味のねーものいじってねぇで
オブジェクト指向設計の説明してみせろよ
なんで文字列クラスなんだよバッカじゃねーのw
352:デフォルトの名無しさん
10/03/28 19:35:46
追い詰められたカスの特徴w 理屈で返事しないw
353:デフォルトの名無しさん
10/03/28 19:40:26
ソースが読みやすくて綺麗になる
354:デフォルトの名無しさん
10/03/28 20:13:07
知識レベルが近ければオブジェクト志向もチームでやるには有効なケースはあるが、
揃ってないなら捨てた方が吉。中途半端な知識の奴とか覚えたてのニワカがいる場合も
クラス設計そのものがスパゲティになるから排除した方が良いw
355:デフォルトの名無しさん
10/03/28 20:26:42
知識レベルが低い奴が書いたコードは
オブジェクト指向であろうがなかろうが
スパゲッティーだっつーの
356:デフォルトの名無しさん
10/03/28 20:41:34
あと、オブジェクト指向じゃないとデバッグやりにくい
バグが起きないと保障されている場所もチェックして行かないといけない
357:デフォルトの名無しさん
10/03/28 21:10:36
>>355
高い低いの問題じゃない。ぶっちゃけ一人だけ知識深い奴がいても、そいつのコードは周りから見れば
さっぱり、なんてことは良くある。
358:デフォルトの名無しさん
10/03/28 22:14:51
だいたい自分のコードが見やすいかどうかなんて誰か1人にでも聞いたことあるのか?w
359:デフォルトの名無しさん
10/03/28 22:17:46
複数開発なら普通にあるだろ。「見やすい?」とかじゃなくて「わかる?」とかだと思うがw
360:デフォルトの名無しさん
10/03/28 22:22:39
オブジェクト指向的な考え方は、メンテしやすいソフトウェアを書く上では
今や教養として必須だと思うけどな。是非を問う段階はとうに通り過ぎてる。
まぁ、一口にオブジェクト指向といっても、切り口によって色々な解釈があるみたいだけど、
# その辺の小難しい話を知りたいなら、例えば以下のエントリが参考になるかもしれない。
# URLリンク(d.hatena.ne.jp)
# URLリンク(d.hatena.ne.jp)
どれも、最終的には「メンテナンス性の向上」が大きな目的であるという点では共通していると思う。
上でstringクラスを例として挙げてる人がいるけど、それにより実現できる機能にのみ
注目すると、利点を示すのが難しくなるんじゃないか。
一番重要なのは、データと処理を統一的な方法でまとめることで、
「より使いやすく」「より分かりやすく」「より安全に」プログラムできるようになることだろう。
一口に言えば、それが「できる」ことと「簡単にできる」ことの間には大きな差があるし、
生産性の向上という量的な変化は、究極的には質的な変化に繋がりうる。
>>348の人も、そういう観点から入門書を読んでみると良いと思うよ。
361:デフォルトの名無しさん
10/03/28 22:25:55
>>356
それちがうとおもう
経験的に、関数的にまとまってる設計(副作用のない設計)の方がデバッグは楽
362:デフォルトの名無しさん
10/03/28 22:30:29
>>360
たしかにそうなんだけど, 現場ではオブジェクトの名の元に
クラスに隠蔽されたグローバル変数が飛び交ってるんだが
363:デフォルトの名無しさん
10/03/28 22:31:47
>>360
>一番重要なのは、データと処理を統一的な方法でまとめることで、
>「より使いやすく」「より分かりやすく」「より安全に」プログラムできるようになることだろう。
脳みそにウジでもわいてるのか?
それのどこが金になるの?
364:デフォルトの名無しさん
10/03/28 22:34:51
>>361
副作用のない範囲で済むコードなら良いと思うけど、それは要求次第なわけだし。
副作用が影響を与える範囲を言語仕様的に限定できるのがオブジェクト指向言語の良いところ。
早い話が、自分や他人がアホなコードを書いた時のリスクを低減できる。
非純粋関数型言語が許されるのは小学生までだよね(AA略という話ならまた話が変わるけど。
365:デフォルトの名無しさん
10/03/28 22:35:04
プロセス志向で機能分割するのに比べて、実行フローを明確にできないからOODではむしろ難しくなる。
その辺開発者全員で設計段階から意識共有できないと大変なことになる。
だから所謂「ジャンプ」コードの廃止によって少なくなって行ったスパゲティコードが、OODによって復活した。
なんてのは、15年も前にウェブスターなんかが指摘してたことだけどな。
366:デフォルトの名無しさん
10/03/28 22:39:25
>>361
そもそもオブジェクト指向を取り入れてない言語のデバッガが低次元になってる
367:デフォルトの名無しさん
10/03/28 22:39:40
>>362
そこは継続的インテグレーションと静的解析ツールを使ってコーディングスタイルを強制、
でいいんじゃね。IDEや各種ツールを導入して自動化するのは重要。
368:デフォルトの名無しさん
10/03/28 22:40:47
>>364
> 副作用のない範囲で済むコードなら良いと思うけど、それは要求次第なわけだし
それもちゃうとおもう
うまくデザインすれば、副作用のある個所は物凄く減らせる
369:デフォルトの名無しさん
10/03/28 22:44:00
オブジェクト指向ってさ、なんで無理にメソッドの集合で全ての物事を抽象化しようとするのかね?
例えば無いかもしれないデータを表現するのにメソッドの集合で定義すると、
template <class T>
class Option {
public:
T get();
bool isNone();
};
という風に抽象化されると思うけど、これだと実体がNoneなのにgetが呼ばれてエラーになる可能性がある
代数的データ型みたいにメソッドの集合と場合分けの構造と両方持てばいいのに
370:デフォルトの名無しさん
10/03/28 22:46:24
>>363
手戻りが減らせればコストを減らせて金になると思うけど。
371:デフォルトの名無しさん
10/03/28 22:48:58
>>365
ワークフローが中心になるタイプの業務システムとかだとそういう側面はあるかもしれないな。
そこは、オブジェクト指向というよりフレームワークのレベルでどうにかする問題だという気もするけど。
372:デフォルトの名無しさん
10/03/28 22:50:25
>>368
デザインによって副作用は減らせると思うけど、完全に取り除くことはできないわけだし。
それに、そういううまいデザインとオブジェクト指向の採用は矛盾しないんじゃない?
373:デフォルトの名無しさん
10/03/28 22:50:30
>>363 ではないんだけど
現実には >>362 の様な理由によって
>「より使いやすく」「より分かりやすく」「より安全に」プログラム
できていないことが問題だろ
374:デフォルトの名無しさん
10/03/28 22:53:45
>>369
参照に代入されたnullを「ない」の意味で使うか、Null Objectを定義すればよし。
375:デフォルトの名無しさん
10/03/28 22:53:59
ちんこの遊び場はここですか
376:デフォルトの名無しさん
10/03/28 22:56:39
>>373
もちろんオブジェクト指向は万能な「銀の弾丸」じゃない。
そこを補うのが、例えば>>367みたいな実践。
377:デフォルトの名無しさん
10/03/28 22:57:15
>371
オブジェクト指向の利点を活かすには、それを含めてってことだけどな。
草創期からOODに取り組んでいたウェブスターが言ったのは、人材だの会社の
政治的な側面も考えて「環境を整えてからやれ」ってこと。
378:デフォルトの名無しさん
10/03/28 23:04:29
>>374
nullを使ったらnullチェックが必要になるのでisNoneを呼び忘れる危険と変わらないのでは?
Null Objectってどうやって使うの?まさかtypeid?それこそ場合分けの構造じゃんか
こういう小手先の芸じゃなくて、言語使用として場合分けの構造をサポートした方がいいという判断で、
Scalaとかはcase classを導入したんだと思うんだけどなー
379:デフォルトの名無しさん
10/03/28 23:05:03
オブジェクト指向じゃない言語は本当に迷宮入りする事があると思う
ある意味怖い
380:デフォルトの名無しさん
10/03/28 23:08:19
>>378
URLリンク(www.hyuki.com)
381:デフォルトの名無しさん
10/03/28 23:14:16
>>379
200人規模のプロジェクトだとオブジェクト指向でも平気で迷宮入りするのは気のせい?
382:デフォルトの名無しさん
10/03/28 23:15:10
>>380
ありがとう
読んでみたけど、Null Objectでどうやってgetを実装するの?
戻り値がないので無理でしょ
やっぱりメソッドの集合で物事を抽象化するには限界があるのだと思うよ
限界があるというか、もっといい方法がある場合があるので、そちらも使うべき
383:デフォルトの名無しさん
10/03/28 23:15:40
200人いれば200のオブジェクト指向があるってのが事実。
大統一理論があると思ってはいけないw
384:デフォルトの名無しさん
10/03/28 23:17:18
>>382
べつにnullを使っちゃいけないということはないと思うけどなぁ。
いい方法があれば併用すべきというのは同意。
385:デフォルトの名無しさん
10/03/28 23:22:27
>>382
ていうかべつに代数データ型でなくてswitch caseでいいわけでしょ。
基本的にパターンマッチは記述を簡潔にするのが目的だと思うけど。
OOがやる抽象化は拡張できるようにするためでしょ。
386:デフォルトの名無しさん
10/03/28 23:26:08
>>381
そんなレベルじゃない
自分で自分が作った物が分からなくなる
オブジェクト指向だとプログラム自体がある程度設計書だがそれがない
387:デフォルトの名無しさん
10/03/28 23:28:02
>>384
同位THX
ついでだからさらに続けると、
一旦場合分けの構造の有用性を受け入れると、意外とその適用範囲が広いことが分かると思うのよ
Scalaではかなり使われているし、関数型言語ではいわずもがな
とすると、これはもう、
"メソッドの集合で全てを表現しようとしたオブジェクト指向はやりすぎでした、間違いでした"
という結論にならざるを得ないのだけど、どうよ?
388:デフォルトの名無しさん
10/03/28 23:34:30
メソッドどころか「データの抽象化がオブジェクト指向ではない」ってのは、
高名なクック船長がおっしゃってますw
389:デフォルトの名無しさん
10/03/28 23:35:58
>>385
>ていうかべつに代数データ型でなくてswitch caseでいいわけでしょ。
あれ?
オブジェクト指向ってsiwtch caseを使わずにオブジェクトのメソッドで抽象化するというのが原則じゃなかったっけ?
switch caseを使うって事は、場合分けの構造がやっぱり必要って事になるよ
390:デフォルトの名無しさん
10/03/28 23:36:21
>>386
それはどうしてそういえるの?
391:385
10/03/28 23:44:14
>>389
極端に言えば、パターンマッチはswitch caseがあれば、場合わけの構造とやらがあるので、いらんでしょ?
OOでわざわざ抽象化してデザインすると、それを外部から拡張できるようになる。
それとも場合わけの構造ってなにか具体的な定義があるの?
392:デフォルトの名無しさん
10/03/28 23:46:23
>>391
ぶっちゃけそんな細かいとこどーでもいいよ
実装方法なんてどーだっていいし
オブジェクト指向となんも関係ないのに
それがオブジェクト指向だと思ってる可愛そうな脳みそしてる奴多いな
オブジェクト指向はあくまでも仕様をオブジェクトに落とすだけだ
そんな細部の話が出てくる時点でもうおかしいだろ
393:デフォルトの名無しさん
10/03/28 23:55:48
>>392
個人的な意見だけど、オブジェクト指向って言葉は、
「オブジェクトという概念を中心に据えたテクニックや分析手法の集合」なんじゃないのかな。
その具体的なテクニックの代表例が、例えばデザインパターン。
だから、人によって見解に相違が出てくるのは当然だし、
「○○という定義に沿ってなければオブジェクト指向じゃない」みたいな話はあんまり意味がないんじゃないかな。
394:デフォルトの名無しさん
10/03/28 23:55:58
>>391
>極端に言えば、パターンマッチはswitch caseがあれば、場合わけの構造とやらがあるので、いらんでしょ?
確かにswitch caseがあれば、パターンマッチはそれの強力版みたいなものなので、原理的にはいらない
それは同位
うん?でも議論がかみ合ってないな
別にパターンマッチが必要と言っているのでは無く、
switch caseという便利なものを否定しようとするオブジェクト指向はいまいちじゃない?と言っている
395:374
10/03/29 00:01:47
>>394
そりゃ、goto禁止すると例外処理がきれいにかけないから構造化プログラミングはいまいち、
って言ってるようなもんだよ。
あくまで「原則」は「原則」なわけで、どういう書き方が最適かは状況による。
将来拡張する可能性が高いなら、switch caseはハードコーディングされてあまり良くない。
そうでなければ以下略。
396:デフォルトの名無しさん
10/03/29 00:06:14
>>393
違うよ
はじめはシミュレーション用の言語だったんだから
オブジェクト=物体と仕様をわかりやすく落とし込むために作られた
たしか気体分子同士の関係をみるためだったかな?
仕様をそのままコードに落とせるのが目的なんだから
デザパタなんて入る隙間なんてない
よってデザパタがオブジェクト指向だという奴はオブジェクト指向を理解してない
大事なのは仕様
397:385
10/03/29 00:06:39
>>394
否定してないと思うけど?
だって大抵のOOには場合わけが書ける言語構造があるし、分岐のコードみたんな書くよね。
否定されるのは拡張が必要になるのに、それをやりにくくするコードを書く場合。
場合わけのコードをばらまくことを推奨する言語が、メンテナンスとか拡張とか頭にないってことなんじゃないの?
便利だといって後のことなんも考えてませんみたいな。
398:デフォルトの名無しさん
10/03/29 00:07:06
>>388
クック船長がどう言っていようが、
Stroustrup(発音しらん)艦長がなにを言っていようが、
ケイ番長がなにを言っていようが、
このさい関係ない
そんな定義論に興味ない
Abstract Data Typeは使いにくい場面が多いし、偏りすぎ
ただそれだけ
399:デフォルトの名無しさん
10/03/29 00:11:11
>>395
>そりゃ、goto禁止すると例外処理がきれいにかけないから構造化プログラミングはいまいち、
>って言ってるようなもんだよ。
なるほど
合点がいった
ありがとう
400:デフォルトの名無しさん
10/03/29 00:13:19
>>390
どこに何に対する処理か分からないルーチンがばら撒かれるから
オブジェクト指向だとオブジェクト自体に処理が書かれるからどこにあるか分かる
401:デフォルトの名無しさん
10/03/29 00:15:42
>>397
>場合わけのコードをばらまくことを推奨する言語が、メンテナンスとか拡張とか頭にないってことなんじゃないの?
>便利だといって後のことなんも考えてませんみたいな。
でもここは同意できないな
場合分けのコードってメンテナンス性も拡張性も落とさない
ただし静的型付けがあれば、かな
402:385
10/03/29 00:25:46
>>401
型でチェックできればいいってもんではない。
コードに手を入れるのは大変だし、取り除くのも大変。
パターンマッチにも拡張性が低いから拡張できるようにって取り組みがあった気がするが。
403:デフォルトの名無しさん
10/03/29 00:27:50
>>398
その通りだけどw
表記色々あるが、ストラブストラップ艦長が成功したのは抽象化そのものに
こだわるより、Cとの親和性を重視した結果。
そもそもJavaにおける「プリミティブな型」を考えりゃわかるけど、同じメソッドを
持ってるオブジェクトであるはずでもコピーではまったく同一に扱えないわけで…
メッセージ志向がオブジェクト指向なのかどうかも誰も確定できない状態で、
OODが正しいなんて言うのが間違い。OOD的考え方の導入に利があるかどうかの
話でしかないんだけどな。
404:デフォルトの名無しさん
10/03/29 00:31:49
同じコードを10箇所とかにコピペするのを止めて欲しい
仕様変更でコードを変更するだけで死んでしまう
405:デフォルトの名無しさん
10/03/29 00:32:55
>>402
つOCamlの多相バリアント
元のコードには手を入れずに拡張できる
406:デフォルトの名無しさん
10/03/29 00:37:29
>>396
いわゆるGoF本の正式なタイトルは、
「オブジェクト指向における再利用のためのデザインパターン(Design Patterns Elements of Reusable Object-Oriented Software)」
なんだけどな。。
407:デフォルトの名無しさん
10/03/29 00:39:59
>>406
だからといって本人達が理解しているかどうかは全く別
少なくとも俺には製作者のオナニーにしか見えない
408:デフォルトの名無しさん
10/03/29 00:41:43
>>407
本人ってのは誰? GoFのおっちゃん?
409:デフォルトの名無しさん
10/03/29 00:42:52
それとデザパタははじめの設計思想のシミュのための~って部分の原型すらないじゃない
仕様をそのままコードに落としこめるメリットをまるごと削り取って
パターンどおりに作ると安全性、汎用性の名のもとに余計な仕様は入れるは、
オナニークラスはいれるは仕様からコードを説明はできないわであまりにも酷い
やってることが給料泥棒と変わらないよ
だいたい、だれが汎用性なんていれてくれって頼んだよ?
410:デフォルトの名無しさん
10/03/29 00:44:04
>>402
「開放-閉鎖原則(The Open-Closed Principle)」の考えに基づくなら、
「変更に対して閉じており、拡張に対して開いている」方が良い、という結論にはなるね。
411:デフォルトの名無しさん
10/03/29 00:45:18
>>405
拡張できるといってもレコードの拡張とはサブタイピング関係が逆になるので要注意な
412:デフォルトの名無しさん
10/03/29 00:46:33
>>409
> だいたい、だれが汎用性なんていれてくれって頼んだよ?
君以外のコーダーと一週間後の自分。
メンテナンス性の向上に役立たない汎用性が不必要であることは言うまでもないが。
413:デフォルトの名無しさん
10/03/29 00:47:36
ぶっちゃけデザパタは「馬鹿は何も考えるな!この通りに作れ!」っていうリアリズムだろw
414:デフォルトの名無しさん
10/03/29 00:52:24
さっきから
>オブジェクト指向は仕様をそのままコードに落とせる
と叫んでいるイタい上司がいるのですが、なんとかなりませんか?
415:デフォルトの名無しさん
10/03/29 00:56:22
>>414
何ともなりません。自分でやってみて実証してくださいとお願いするしかないですw
416:デフォルトの名無しさん
10/03/29 00:56:39
A.アセンブラかマシン語
B.超高級言語(ネイティブな母語のようなもの)のインタープリタ
概念というより、言語の問題だろうな…
417:デフォルトの名無しさん
10/03/29 01:13:27
ずっと粘着してる奴コテつけろ
だれだかわからない
418:デフォルトの名無しさん
10/03/29 01:23:39
>>414
成り立ちから考えてデザパタはどうやってもやってることが違う
419:デフォルトの名無しさん
10/03/29 01:27:01
まあ、ちゃんとプログラムやってたら
ほとんどのデザパタはいつのまにかやってるもんだと思う
420:デフォルトの名無しさん
10/03/29 01:30:23
>>419
俺とお前の作り方は違うんだな
俺はあくまでも仕様書に書いた構造をコードに落とす
そこにデザパタが介在する隙間はない
パターンなんてねぇから
421:デフォルトの名無しさん
10/03/29 01:41:35
>>420
仕様書があるならそれでいいと思う
リファレンスとして仕様書があるから早いしわかりやすい
デザパタはある意味共通化された設計だから分かりやすいってとこもあるが
無理にデザパタにあてはめるのは意味ない
ちゃんと設計してたらデザパタとだいたい同じ設計が出来上がるもんだと思ってるかしな
422:デフォルトの名無しさん
10/03/29 01:43:10
だって元々デザパタは経験則で生まれたもんだろ。
マトモなPGが組めば同じようなパターンになるのは当然。
それを「知識」として受け取るような奴がいるから困ることになる。
たとえば誰が使っても単一の生成しかしないようなオブジェクトにおいて、
[factory methodだから~]とか言ってnewしてからCreateってなのを、あたかも
理想的な実装であるかのように強要する奴はいらない。それだけだろw
423:デフォルトの名無しさん
10/03/29 01:48:46
>>422
そうだな
デザパタに限ったことではないがこれが唯一解みたいなのはいて欲しくない
わかってデザパタ使ってほしい
424:デフォルトの名無しさん
10/03/29 01:53:33
オブジェクト指向の意味は
privateによるカプセル化と、
ポリシークラスによる構造定義が真の意味だと思ってる
工期がどうってのはあくまで副次的な産物
425:デフォルトの名無しさん
10/03/29 09:19:47
オブジェクト指向で用意されたライブラリがクソ使いやすいんだが。
String, Array, Hashとか基本的な奴ほど特に。
Cでやろうとするとすごく煩雑にならないか?
426:デフォルトの名無しさん
10/03/29 09:24:22
だよねー
その3つがあればなんでもつくれるよねー
427:デフォルトの名無しさん
10/03/29 21:23:31
>>425
Cでの実装も、継承、多態を考えなければ、そう難しくはないと思うよ。
たとえば文字列の場合、
公開用の型として
typedef struct {int class_id;} t_string;
実装用の型として、
typedef struct {int class_id; char* str; } t_string_impl;
を用意しておき、
インスタンス生成の関数が呼ばれたら、t_string_implを生成し、キャストして、ライブラリの外へはt_stringを返す(正確にはポインタを返す)。
その他、文字列操作に関する関数は、返されたt_stringを渡して、ライブラリの中で、キャストしてt_string_implを取り出し、操作する。
使う側としては、インスタンスのポインタと関数のセットで扱うので、そう違いはないかと。
継承、多態を実現しようとすると>>425のいうとおり、煩雑になると思う。
ってゆうか、C++つかいやがれってことです。
428:デフォルトの名無しさん
10/03/29 22:39:04
>>425
>オブジェクト指向で用意されたライブラリがクソ使いやすいんだが。
>String, Array, Hashとか基本的な奴ほど特に。
それは別にオブジェクト指向である必要はないよね
MLならモジュール、Haskellなら型クラスというやり方もある
オブジェクト指向しか知らない人は世界が狭いよ
429:デフォルトの名無しさん
10/03/29 22:46:13
プログラミングにおける「良い習慣」を全部オブジェクト指向の手柄にしちゃうのが初心者
430:デフォルトの名無しさん
10/03/30 21:26:39
昔は、cは関数が豊富でよい、と言われていたものだが。
431:デフォルトの名無しさん
10/03/30 22:04:56
オブジェクト指向設計と絡めてC++の利点を説明できない人ってなんなの?
サブルーチンに対してばっかり話してるけどそんなのC言語の標準関数と変わらないじゃん
全然オブジェクト指向出てこないんだけど?w
432:デフォルトの名無しさん
10/03/30 22:20:05
>>431
何が変わらないの?
433:デフォルトの名無しさん
10/03/30 22:23:06
newしたらオブジェクト指向
434:デフォルトの名無しさん
10/03/30 22:25:02
>>432
設計じゃないという意味
設計の話でstrcpyとか出てこないでしょ?
だけどこの板に巣くってる馬鹿な人は
いつもオブジェクト指向の話するのに文字列クラスなんて馬鹿なもん出して説明しようとしてる
いい加減、オブジェクト指向理解できてないって気づけよw
435:デフォルトの名無しさん
10/03/30 22:42:27
ここは別にOODと言ってないんだから設計の話じゃなくてもいいだろ。OOPでもw
436:デフォルトの名無しさん
10/03/30 22:52:18
だったら別スレ建てろよ
邪魔だな邪魔
オブジェクト指向理解してねぇしw
437:デフォルトの名無しさん
10/03/30 22:54:43
別スレはお前だろ。元々オブジェクト指向ってのは実装が先だぞ。
設計なんてのはその考え方を推し進める上で、後から出てきた話だ。
438:デフォルトの名無しさん
10/03/30 23:26:18
>>437
はぁ?
馬鹿は糞して寝ろよw
439:デフォルトの名無しさん
10/03/30 23:52:52
ちんこさんチンコンパイラはまだですか?
440:デフォルトの名無しさん
10/03/31 00:19:45
>>431
オブジェクト指向言語としてのC++はあまり評価が高くないように思うが。
441:デフォルトの名無しさん
10/03/31 00:48:00
オブジェクト指向言語としてのC++、なんて話じゃないな。1人が勘違いしてるだけ
442:デフォルトの名無しさん
10/03/31 04:38:57
情報隠蔽に、コーディングレベルでの意味を見出せない。
言語レベルでのコントロール規制…うーむ。
443:デフォルトの名無しさん
10/03/31 04:51:32
データを勝手に変更させないってことじゃないのか
例えばマイナス入れちゃ駄目な変数に勝手にマイナス入れられないようにするとか
444:デフォルトの名無しさん
10/03/31 05:07:58
>一行目
private指定で、getterだけで使用…? 他の思いつかない俺はダメだな。
ハードコーディングしたデータを使うだけなら、別段規制する必要性を感じない。
人間は間違うもんだ…という前提にたっての規制なら…意味あるか
>二行目
setterで入力データのチェックを行う。というのが思いついた。
関数言語でも入力内容のチェックを通すのは容易い。
わざわざそれを隠蔽と称して、setterで行う意味合いはなんだろう。
考えなければ…
そもそも、前面に出やすい「再利用性」も疑問が残る。
関数とオブジェクト指向の再利用性の違い、とはなんだろう?
恐らく、考える階層が違うのだろうが…。
445:デフォルトの名無しさん
10/03/31 07:57:02
>>442
静的型検証と同じこと。
特に、自分以外の人間と一緒にコーディングする時のことを考えてみるとよろし。
「昨日の自分と今日の自分は別人」とか言ったりもするし。
cf. 契約ベースプログラミング
446:デフォルトの名無しさん
10/03/31 08:01:48
>>444
継承できるかできないかの差かと思う
これができないとコピペが乱立する
447:デフォルトの名無しさん
10/03/31 08:06:59
>>444
言うまでも無いが、なんでもかんでもgetter/setterを実装するならあんまり意味がない。
そのオブジェクトが他のオブジェクトに対して、本当に提供すべき「サービス」は何か、ということを考える。
オブジェクトは、責任分散協調系の中の主体の一つ。
再利用性については、何を意識しているかによるけど、
一時期盛んに言われていた「継承は再利用のためにある」みたいな説明は、
最近は批判されていることが多いね。
個人的には、メンテナンス性が向上すれば自ずと再利用性も向上する、程度に考えているが。
あと、「人間は間違うもの」という認識は、君が考えている以上に超重要。
448:デフォルトの名無しさん
10/03/31 08:18:54
参考になりそうなキーワード:
単一責任原則
"Tell, Don't Ask."
449:デフォルトの名無しさん
10/03/31 09:04:11
あまり専門用語使ってると説得力ない希ガス
よく分かんねで終わってしまいそう
450:デフォルトの名無しさん
10/03/31 09:05:42
言ってる方は気持ちいいだろうけど
451:デフォルトの名無しさん
10/03/31 10:19:39
>>446
> これができないとコピペが乱立する
出来なくても, unix の kernel にはコピペないよ
452:デフォルトの名無しさん
10/03/31 10:28:50
>>451は何を根拠にそう発言したのだろうかw
453:デフォルトの名無しさん
10/03/31 10:59:32
>>451
少なくとも, v6 のソースには見受けられなかったし, 4.2BSD もそうだった
*BSD や Open Solaris でもみかけないな.
Linux のドライバにはあるかも知れない.
454:デフォルトの名無しさん
10/03/31 11:15:37
オブジェクト恥垢
455:デフォルトの名無しさん
10/03/31 12:23:31
OOPのポイントは2つ。
1.クラスのインスタンス化
2.メッセージング
「なぜクラスをインスタンス化する必要があるのか」、
「メソッド呼び出しとメッセージ送信の違いは何か」、
を明解に答えることができれば、
OOPを理解している、とみていいんじゃないの。
456:デフォルトの名無しさん
10/03/31 13:08:56
そのふたつはObjective-Cをマスターすることによって理解できるな
457:デフォルトの名無しさん
10/03/31 13:30:35
「変数と、それを操作するメソッドを1つにまとめる」(クラス)
「ユニークな変数にはユニークなメソッドを用いる」(クラスのインスタンス化)
Javaで、Stringクラスを100個インスタンス化したとする。文字列の長さを得るには、
オブジェクトa.length();
オブジェクトb.length();
オブジェクトc.length();
…
とするわけだが、ここで、オブジェクトaのlength()が対応しているのは、
オブジェクトa内部に隠蔽された変数であって、オブジェクトbやcの変数ではない。
このように変数とメソッドが1対1で対応していることの利点は、
片方を知っていればもう片方を知る必要がなくなるということ。
要するに、メソッドを知っていればそれに対応する変数を知る必要がなくなる(隠蔽可能になる)ということ。
変数とメソッドを分離した場合は、変数の隠蔽ができなくなるので、
変数とメソッドの両方を知る必要がでてくる。
変数を隠蔽するという観点からすれば、変数の入力はsetter、出力はgetterで行うのが望ましい、
ということになるね。
458:デフォルトの名無しさん
10/03/31 14:07:54
メッセージングについては、
URLリンク(www.geocities.jp)
を読めば分かるんじゃね。
OOPってのは、要するに、
可能な限りオブジェクトを他から切り離して単独で動かそうとするプログラミングのことでしょ。
その仕組みがインスタンス化だったりメッセージングだったりするわけで。
非OOPでもOOPのようなことはできるじゃん、ってな意見だかネタだかをよく聞くけど、
そんなこと当たり前のことだよねぇ。できるかできないかの話じゃなくて、簡単か難しいかの話。
非OOPでも、「ローカル変数なんていらん!全部グローバル変数でいいだろ!」
ってなことを言われても、まあ、間違いではないんだけど、普通はやらないからねぇ。
459:デフォルトの名無しさん
10/03/31 19:24:23
> このように変数とメソッドが1対1で対応していることの利点は、
> 片方を知っていればもう片方を知る必要がなくなるということ。
???
片方を知っていれば、もう片方を知る必要が無い?何言ってんの?
おまえ、自分の書いたOOPのサンプルコードで、
> オブジェクトa.length();
このように、"オブジェクトa" と length() の両方を指定しているよな。
"オブジェクトa" だけでも、"length()" だけでも、思ったようには動いてくれないよな?
両方知ってる必要があるんだよな?片方だけを知ってれば良いってのはどんな寝言?
まったく、OOP信者はマジキチだな。
460:デフォルトの名無しさん
10/03/31 19:39:49
>>457が言ってる「変数」って、オブジェクトaの内部状態のことでしょ。
461:デフォルトの名無しさん
10/03/31 19:50:24
Cの関数でも、
構造体aを指定しているのに、
なぜか構造体bのメンバが変更される、
とかありえないから。
struct hoge a, b;
func( &a ); //なぜかbのメンバが変更される。
その発想が怖い。
462:デフォルトの名無しさん
10/03/31 20:01:12
>>461
func(hoge)が、内部でbを変更するコードになっていればありうる。
463:デフォルトの名無しさん
10/03/31 20:11:08
そしてそれはOOPの欠点だ。
Cなら有りえない。
464:デフォルトの名無しさん
10/03/31 20:15:27
単に関数付き構造体ってことじゃないのか
構造体みたく好き勝手に値変えられない構造体みたいな
465:デフォルトの名無しさん
10/03/31 20:28:16
>>464
言語仕様レベルではね。特に後段が重要なのではあるが。
466:デフォルトの名無しさん
10/03/31 21:46:10
>>459
Javaで、Stringクラスを~、って言ってんだから、
メソッドa.length()に対応する変数は、
オブジェクト内部に隠蔽された変数(文字列の長さを表す数値)のことでしょ。
ていうか、Javaすら知らないんだったら黙っとけよ。
467:デフォルトの名無しさん
10/03/31 21:53:08
しかし、>>459の発言は痛過ぎるね。
まさに、Javaを知りません、OOPLを知りません、ってな文章だなw
468:デフォルトの名無しさん
10/03/31 22:11:06
まあ重要なのはそういう隠蔽化ではないけどな。
誰かがStringを継承して、ある特殊なエンコードに対応したクラスを作ってくれたとしても、
その中身をあまり知らずに安易にStringと同様の使い方をすることはできないしね。
469:デフォルトの名無しさん
10/03/31 22:14:30
涙ふけって、OOP信者よ。
変数とメソッドが一対一で対応って意味不明だろ。
クラスとメソッドが一対一で対応しているわけで。
470:デフォルトの名無しさん
10/03/31 22:18:00
常に対応してるんだったらメソッドなんかいらんわな
単純な関係が崩れたときのためにアクセサを通すわけで
471:デフォルトの名無しさん
10/03/31 22:24:04
あーまた変な事言い出した。
メソッドがクラスと対応しているのは当たり前だろ。
472:デフォルトの名無しさん
10/03/31 22:27:58
オブジェクト指向なんてもはや基礎教養だろ。
踏まえた上でどう実践していくかというフェーズで、
信じるとか信じないとかいう段階はとうに通り過ぎてる。
まぁ、理解したつもり、のレベルのやつがとても多いのは事実だけどなー。
473:デフォルトの名無しさん
10/03/31 22:30:26
>>471
まず、クラスとは何か、メソッドとは何か、という言葉の定義の確認から始めた方が
いい気がするな。
474:デフォルトの名無しさん
10/03/31 22:36:23
SmalltalkやCLOSも学んだ方がいい
といってもちんこは人の話を聞かないのであった
475:デフォルトの名無しさん
10/03/31 22:36:46
隔離されたグローバル変数(というか環境)みたいなもん
476:デフォルトの名無しさん
10/03/31 22:44:18
>>472
Javaの話をしていたんだよね。JavaってクラスベースのOOP言語だよね。
クラスとメソッドが対応するのは当たり前だよね。
メソッドのアドレスが格納されている、いわゆるvtableはクラスごとに用意されるのは知ってるよね。
そしたら、クラスとメソッドが関連付けられるのは自明だよね。
>オブジェクト指向を踏まえた上でどう実践していくかというフェーズで、
そのOOP前提みたいな論調はなんなんですかね。
まーOOPで出来る事はデータの整合をとる事ぐらいだってのが、
大衆にも大体ばれてきてて、
「だったらデータの整合性の管理だけをOOPに任せよう」、
って意味での「踏まえる」ならわかるが。
477:デフォルトの名無しさん
10/03/31 23:08:32
>>476
たぶん前半は俺宛じゃないと思うが、
それはどちらかというと「クラスインスタンス」じゃないか?
あと、データの整合性を取る云々は、「責務の分担を保障できる」と考えてみてはどうかな。
もちろん、慎重にコーディングすれば非OOPLでもできる話だが、
OOPLを使ったほうが当然効率が良い。
478:デフォルトの名無しさん
10/03/31 23:23:41
>>477
メソッドがクラスにくっついてるのがクラスベースのOOP。
メソッドがインスタンスにくっついてるのがプロトタイプベースのOOP。
こんなの常識過ぎるだろ。
そこの区別の問題があるから、JavaのようなクラスベースのOOPを説明するなら、
「メソッドはクラスと関連付けられる」って表現が適切なんだよ。
メソッドはインスタンスと関連付けられる、と書くと、プロトタイプベースなのかと勘違いされる。
479:デフォルトの名無しさん
10/03/31 23:30:00
>>478
クラスの中のメソッドと対応してる時はなんなのよ
480:デフォルトの名無しさん
10/03/31 23:32:06
えらく無知を晒してるやついるけど
オブジェクト指向は魔法みたいなものと勘違いしてんじゃねーの?
ほとんど似たようなものだろ
481:デフォルトの名無しさん
10/03/31 23:42:53
>>478
だからクラスインスタンスと書いたわけだが。
クラスに紐付く、という説明だとインスタンスを生成することの意味が分からなくなるし、
それにポリモーフィズムの説明ができない。
482:デフォルトの名無しさん
10/03/31 23:47:32
>>478
CLOS みたく、どっちにも付いてないのは何て言うんだ
483:デフォルトの名無しさん
10/04/01 00:03:47
>>481
Javaのポリモーフィズムはインスタンスのクラスに基づいて行われる。
わかる?
インスタンスのクラスのメソッドが呼ばれる。
もう一度言うよ。
インスタンスのクラスのメソッドが呼ばれる。
インスタンスがメソッドを持っているわけではない。クラスがメソッドを持ってる。
メソッドの呼び出しは、インスタンス→動的クラス判定→メソッドと、クラス経由で呼び出される。
「クラスのメソッド~」って表現、日常的に使うでしょ。
一方、インスタンスがメソッドを持ってるのは、プロトタイプベースと言う。
でもちょっと考えれば分かりそうなもの。
Javaでは同じクラスのインスタンスであれば、
ポリモーフィズム時に呼び出されるメソッドは同じものになるよね。
これはメソッドがクラスに結びついているから。
484:デフォルトの名無しさん
10/04/01 00:06:36
てか本当に初心者が多いな。
こんなんがOOP万歳してるんだろうな。
せいぜい今のうちにいい夢みてればいいよ。
すぐに 大人たちは嘘つきだ って言い出すから。
485:デフォルトの名無しさん
10/04/01 00:25:32
>>483
いや、内部的にはその通りだよ。
というか、俺と同じことを言ってるようにしか見えんのだが。
後段については、インスタンスを外部から呼び出す側は、
そのインスタンスの実装クラスが何か、ということは意識しないよね、という話。
あるインタフェースを実装したインスタンスのメソッドを呼ぶと、
実装クラスに合わせて処理が動的にディスパッチされる、
という話を認めると、何か都合が悪いのかもしれないけどさ。
(もちろん、これはOOの要素技術の一つであって、定義でも本質でもない)
486:デフォルトの名無しさん
10/04/01 00:28:13
OOPをやってると、どんどん恥垢が溜まっていくのだろうか…
487:デフォルトの名無しさん
10/04/01 00:39:53
>>486
反論ないなら寝るけど、他人を自分と同レベルに引きずり落とすことに熱心になるくらいなら、
自分の世界を広げる努力をした方がいいと思うよ。
488:486
10/04/01 00:48:27
すみません特別誰の発言に向けた言葉でもありません…
コーディングしてると垢のようなものが溜まっていくような感覚がしまして…
思考が固まっていくような…独り言でした…紛らわしくてすみません…
489:デフォルトの名無しさん
10/04/01 00:52:39
コーディングが煮詰まると恥垢が溜まるとは珍しい人ですね。
490:デフォルトの名無しさん
10/04/01 00:55:19
削れば恥垢は落ちます…
僕と一緒に綺麗になりましょうよ…ウホッ
491:デフォルトの名無しさん
10/04/01 01:02:42
OOPがもし発明されなかったら、
入力支援の方向が左になってたんだろうか。
構造体の変数書くと、その構造体を使う関数が左にずらりと並ぶ・・・
492:デフォルトの名無しさん
10/04/01 01:10:57
>後段については、インスタンスを外部から呼び出す側は、
>そのインスタンスの実装クラスが何か、ということは意識しないよね、という話。
その、何か気にしないで済む「実装クラス」とメソッド群は対応しているだよね。
実装クラスが判明すれば、メソッドは一意に決定するんだよね。
クラスが分かればメソッドは決定するんだよね。
クラスがメソッドを決めるんだよね。
だったら、メソッドはクラスにぶら下ってるよね。
てかもう本当にいやになってきた。
JavaなんかのクラスベースのOOPでメソッドがクラスに関連づいてるってことを否定する人って何なのよ。
クラス作らなきゃポリモーフィズム出来ないって時点で気づけよ。
メソッドがクラスにくくりついてるから、
多態したいだけクラス作らなきゃ多態できないんだ。
同じクラスのインスタンスで多態できるか?出来ないよな。
ちなみに、プロトタイプベースだとこれが出来る。
その差はなんだ?メソッドがクラスにぶら下っているか、インスタンスにぶら下っているかの差だよな。
493:デフォルトの名無しさん
10/04/01 01:21:02
>>491
俺も昔それを考えた事がある。
俺の結論はこう。
「関数名を書くと、引数にとりうる型の参照可能な変数が列挙される」
要は引数を補完する。何気に便利そうだ。
ところで、OOPで使われる object.method() って並びは英語的に変じゃない?
俺たちはコンピュータに命令を下しているわけだから、命令文的に、
command( object ) の方が自然に思えるのだが。
やっぱOOPって何から何までキモいと思う。
494:デフォルトの名無しさん
10/04/01 01:24:42
アドレス空間上、コード領域に置かれるのが判ってるなら~ベースなんてどうでもよくね?w
495:デフォルトの名無しさん
10/04/01 01:31:03
>>492
インスタンスの利用者から見れば、クラスベースであれプロトタイプベースであれ、
メソッドのコードが実際にはどこにぶら下がっていようが、処理系がその詳細を
隠蔽する以上、「インスタンスのメソッドを呼び出す」という風に見えるのだから、
多態性を説明する時に、メソッドがクラスに紐付いていることを過度に強調してなんか意味あるの?
っていう話じゃないの。
496:デフォルトの名無しさん
10/04/01 01:36:45
>>493
Objectが主語だからでしょ。
497:デフォルトの名無しさん
10/04/01 01:49:33
>>495
インスタンスの設計者はどうなるんだよ。
使う側が気にしなくても良いってのはいつでも真理だよ。
それに俺は何も強調して無いぞ。
俺「メソッドはクラスに関連付いてる」
彼「どちらかというとメソッドはクラスインスタンスに関連付いてるんじゃね」
俺「どちらかというとクラスでしょ」
498:デフォルトの名無しさん
10/04/01 01:51:57
>>493
>「関数名を書くと、引数にとりうる型の参照可能な変数が列挙される」
おぉ、いいね。
これはOOPであっても実装してほしいぞ。
変数マークアップ機能の次はこれだ。
>object.method() って並びは英語的に変じゃない?
英語的にも日本語的にも変だな。
command( object ) という書き方がゼロになっていないということも、
戸惑わされる。中には、どちらの表現もできたりする。
object.method() は廃止の方向でいいかもな。
499:デフォルトの名無しさん
10/04/01 01:58:39
>>496
> Objectが主語
object.getValue();
オブジェクトが値を得るわけじゃないのに主語?
操作の対象なんだから、オブジェクトのその名のとおり、目的語が適当だと思うんだがな。
オブジェクト指向って名前止めて、主観指向に改名すりゃいいのに。
この破綻したパラダイムにはそっちのがお似合いだろーよ。
500:デフォルトの名無しさん
10/04/01 02:09:24
>>496
objectは目的語ですよ。辞書的にみて。。。。。という冗談は置いといて、
objectにmethodというメッセージを送って処理を行わせる。
英語的には、Let object methodという感じなのかな?
こじつけだけど。
501:デフォルトの名無しさん
10/04/01 02:25:46
もっとバトルしてくんねぇかなあ
OOPer vs アンチOOPer
ま、アンチOOPerはOOPを理解できないって点で既に劣ってるわけだがw
理解してたら争う意味もねぇな
502:デフォルトの名無しさん
10/04/01 02:26:56
現実にはやっぱりオブジェクトは目的語だとおもうよ。
コンピュータに処理をさせる対象として「オブジェクト」なんだから。
でも、OOPの世界ではオブジェクトは、まるで主語であるかのような語順だし、
考え方も、オブジェクトを中心に考えるってんだから、
主語にしようと試みてるのだろうね、現実がどうであろうと。
壮大なウソを突き通そうとするのは大変なものだね。頑張れ北朝鮮、まけるな左翼団体。
object1.hoge();
object2.piyo();
とかさー。
個性豊かなオブジェクト達が、
めいめいに、「僕は~する」、「僕は~する」、と、ぶつくさ独り言を唱えてて、
一向にまとまらない様は、オブジェクト指向の本質ですらあると思う。
command( object1, object2 );
と命令してやりたくなる。
503:デフォルトの名無しさん
10/04/01 02:44:06
そんでオブジェクト同士が生命維持装置のごとくメッセージを飛ばしあいこしてさー。
プログラマはそれのご機嫌取りに終始させられて。
んで、オブジェクト当人たちはウジウジしててなかなか他のオブジェクトと関わろうとしないしさ、
誰が音頭取るんだよ、とか思ってたら、コンポーネント!とか叫びながら、
親分クラスが登場してきてさー、
そしたら変な木構造が出来上がって、
こんどは、それにそぐわないような処理は出来ませんとか言い出して、
だったら、単一の木構造は止めようとか言うから、ガベコレだね、って
どーすんのこれ。
504:デフォルトの名無しさん
10/04/01 07:43:23
>>497
ポリモーで動的に管理したら、実際に動いてるクラスが何かを知る方法って簡単には無いよね
インスタンス単位でみないと、アップキャストされた基底クラスなのか
基底クラスのままのインスタンスなのかで違うやろ
いくらクラスで設計しても、インスタンス管理の設計もしなくちゃならんわけだし
貴方の言いたい方向がよくわからん
505:デフォルトの名無しさん
10/04/01 08:06:04
>>504
多態性をC言語で表現するのは無理ではないけど明らかにしんどいし、
「それOOPじゃなくてもできるじゃんwww」の彼としては目を背けたい部分なんじゃないか。
506:デフォルトの名無しさん
10/04/01 08:19:39
>>502
> 現実にはやっぱりオブジェクトは目的語だとおもうよ。
語順的にはそういうケースは多いな。
ただ、オブジェクトを主体として考える概念であることには違いない。
各主体に責務を割り当てて、(君曰くウジウジしてる)オブジェクト同士に適切な関係を設定してやると。
「関数に書かれた手続きをプログラマが仕切ってグワっと並べるのがプログラミングだろ!」
というのは確かに漢らしいかもしれないけど、それで物事が片付くのはかなり小さなシステムに限定される
ということに気づかないと、確かにオブジェクト指向はプログラマの主導権をスポイルする軟弱な概念に見えるのかもな。
507:デフォルトの名無しさん
10/04/01 09:22:32
thread.run()とか、object.toString()とか、すごく自然だ。
508:デフォルトの名無しさん
10/04/01 09:57:31
おまいら実際、どんだけの物を書いたの?
俺はJavaで5万行。Rmi+JDBC+Appletなシステムを一人で書いた。
C++で一万行。PlatformSDK+Win32API使ってエディタ書いた。
一方、Cでは宿題スレの宿題を書いた。
上記エディタは最初BCCのCを使って書いていたが、
なんだが息苦しくなってC++で書き直す羽目になった。
AbstractWindowを作って、色々派生させて画一的に扱いたかったから。
509:デフォルトの名無しさん
10/04/01 10:56:38
批判ではなく、純粋な質問なのだが
何行書いた、というのは具体的にどんな意味があるの?
510:デフォルトの名無しさん
10/04/01 11:13:41
規模の目安。
なるべく簡潔に書く派と、そうでもない派があれど、
百行と一万行は規模が違うし、一万行と十万行も規模が違う。
(そうでもない派ってのは、可読性のため一時変数を導入したり、
コメントもたっぷりつけたり、改行を間に入れがちなスタイルだったり)
おまいらがどんな規模のものを想定して発言してるのか聞いてみたかっただけ。
規模が大きくなればなるほど、カプセル化やポリモーフィズムが恋しくなるから。
511:デフォルトの名無しさん
10/04/01 11:14:00
OOPだと例えばシューティングゲームでの敵を処理する場合
移動する場合 enemy.move() とか書けて
さらに同じ敵でも敵クラス継承すれば enemyTypeA.move() とか enemyTypeB.move() とか
違う敵の種類でも .move() と同じ書き方しても使用するインスタンスにより違う動きをさせることができるから直感的に記述することができる
さらに敵クラスがオブジェクトクラスを継承したものだとすると
それを自機クラスに継承させると myShip.move() と同じように書ける
同じことCでやろうとするとどうなるか
関数名をいくつも用意させなければならない羽目になる
例えば move_EnemyTypeA(EnemyTypeA *enemyTypeA), move_EnemyTypeB(EnemyTypeB *enemyTypeB), move_MyShip(MyShip, *myShip)
とか用意しなくいけなくなり、面倒になる
これがC++なら move() だけで済み、これだけで「動く」という処理を直感的に記述することができる
取りあえずの1例としてOOPの便利さを示した