OOP 2
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん
2010/11/10(水) 22:51:25OOPってよくわかんないよね
http://hibari.2ch.net/test/read.cgi/tech/1284115490/
0809デフォルトの名無しさん
2010/12/12(日) 17:55:45スクリプト言語って?当時はAWKとか?
0810デフォルトの名無しさん
2010/12/12(日) 19:09:11そうやって欲張った結果、非常に使いにくく、わかりにくい言語になってしまったんではないかと。
0811デフォルトの名無しさん
2010/12/12(日) 21:17:26C++で挫折した人間がSchemeやHaskellを使えるとは思えない。
0812デフォルトの名無しさん
2010/12/12(日) 21:39:23C++で挫折した人類は滅亡する!
0813デフォルトの名無しさん
2010/12/12(日) 22:05:17何かがおかしいのは間違いない。
きっと先入観が邪魔してるんだ。
0814デフォルトの名無しさん
2010/12/12(日) 22:22:15そお? あの結構な量の変態構文覚えるより簡単なんじゃ?
0815デフォルトの名無しさん
2010/12/12(日) 22:49:520816デフォルトの名無しさん
2010/12/12(日) 23:12:48大辞林 第二版 (三省堂)
おぼえる 【覚える】
(2)技術を身につける。習得する。
0817デフォルトの名無しさん
2010/12/12(日) 23:13:440818デフォルトの名無しさん
2010/12/12(日) 23:19:440819デフォルトの名無しさん
2010/12/12(日) 23:20:10言語が単純だと作成するプログラムが複雑になる件について
0820デフォルトの名無しさん
2010/12/12(日) 23:22:580821デフォルトの名無しさん
2010/12/12(日) 23:25:460822デフォルトの名無しさん
2010/12/12(日) 23:27:30何言ってんの?
0823デフォルトの名無しさん
2010/12/12(日) 23:32:56しかもしれぞれ型が違う。その意味で抽象度が落ちてる。
機械語からアセンブリ、Cと、どんどん抽象度を高めていったはずなのに、
何でこうなったんだろうな。
0824デフォルトの名無しさん
2010/12/12(日) 23:35:20※だたし非英語圏は除く
0825デフォルトの名無しさん
2010/12/12(日) 23:49:380826デフォルトの名無しさん
2010/12/12(日) 23:52:08確かに
・関数とメソッドは違う
・コンストラクタとメソッドは違う
こういう思考は抽象度を落としているな
0827デフォルトの名無しさん
2010/12/13(月) 16:51:18その「関数っぽい仕組み」の内容は?
それがOOPにどう影響を与えるの?
あと型云々の所は何を指してるの?
質問ばっかりで悪いけどよろしく
0828デフォルトの名無しさん
2010/12/14(火) 13:00:230829デフォルトの名無しさん
2010/12/14(火) 22:06:510830デフォルトの名無しさん
2010/12/14(火) 22:23:220831デフォルトの名無しさん
2010/12/14(火) 22:24:26アクセス制御や内部データの隠蔽、抽象化をしたいなら必要
0832デフォルトの名無しさん
2010/12/14(火) 23:25:46別に必要無い
ただし馬鹿が弄るかもしれないような現場では仕方なく使ってるだけだろ
0833デフォルトの名無しさん
2010/12/14(火) 23:29:18こういうバカが、身の程を知らずにデスマを確定させる。
0834デフォルトの名無しさん
2010/12/14(火) 23:44:08getterってカプセル化的によくないの?
967 名前:デフォルトの名無しさん[sage] 投稿日:2010/12/14(火) 14:33:37
使い方により
968 名前:デフォルトの名無しさん[sage] 投稿日:2010/12/14(火) 14:36:38
>>967
本来そのクラスが処理するのがカプセル化だよね
969 名前:デフォルトの名無しさん[sage] 投稿日:2010/12/14(火) 14:37:44
10年以上前にこんなやり取りあったよね
970 名前:デフォルトの名無しさん[sage] 投稿日:2010/12/14(火) 14:38:51
まだオブジェクト指向が浸透してないってことよ
971 名前:デフォルトの名無しさん[sage] 投稿日:2010/12/14(火) 14:45:25
プロパティなんて普通に使われてるだろ。
今時OOP原理主義なんてはやんねーよ。
0835デフォルトの名無しさん
2010/12/14(火) 23:58:03しかし、アクセサを使っても、オブジェクトの内部実装に依存したインタフェースを
外部に晒していることには変わりはない。
したがって、より抽象度の高いメソッドを用意するのがより望ましい。
その意味ではアクセサは推奨されない。
0836デフォルトの名無しさん
2010/12/15(水) 00:02:020837デフォルトの名無しさん
2010/12/15(水) 00:02:47内部的には尺でも良いんだけど。
0838デフォルトの名無しさん
2010/12/15(水) 00:04:310839デフォルトの名無しさん
2010/12/15(水) 00:36:291.唯の構造体的なもので、内部で何の整合性も取る必要ないのに、いちいちsetter/getterつける奴。
2.そのクラスの内部実装依存のオブジェクトを返す奴。
どっちもアホだ。何も分かっちゃいねぇ。
と思ういつもの人でした。
でも結構見かけるでしょ。困るよね。
この手のスパゲッティーは本当に手におえないよ。
0840デフォルトの名無しさん
2010/12/15(水) 01:04:49メソッドは引数を自由に決められる。
もちろん自由があっても活用する機会がなければ効果はない。
これは抽象化全般に言える。
効果が出る保証はないが費用は確実に前払いさせられる。
0841デフォルトの名無しさん
2010/12/15(水) 01:48:27開発効率は上がるんじゃね
0842デフォルトの名無しさん
2010/12/15(水) 02:22:48Rubyの文法やC#のプロパティは好きだな。
public int Property {get;private set;}
とか、まぁ無くても良いんだろうけど、よく使う。
この構文が追加されて大分楽になった。
とりあえずフィールドアクセスとアクセサの呼び出し構文が違う言語は
あとでの変更がメンドイし、辛いわ。
0843デフォルトの名無しさん
2010/12/15(水) 04:37:07getterは割と使うけど、getterが扱うのはそのオブジェクト自身の属性ではないことが多いかな。
どっちかっつーと、所持(has a)してるオブジェクトの属性であることのが多い。
setterに至っては自分で書くことはほとんど無いなあ、最近。
本当に、値を代入するっていう感じがしっくり来る場合と
既に構造体的な扱いでコードを書いちゃって、それを弄る場合だけだな。
それにしたって、getterと同じく内部構造との乖離はするんだけど。
0844デフォルトの名無しさん
2010/12/15(水) 07:43:35なんだかな…
自分語りになっちゃってるあたり、どこか抜けてるし内容的にもおかしいぞ
プログラマとしての自負だけは強そうだけど
なんか>>815と同じ匂いを感じる
0845デフォルトの名無しさん
2010/12/15(水) 07:53:280846デフォルトの名無しさん
2010/12/15(水) 07:56:23has aも晒す必要がないなら晒さない方がいいと思うけど。
0847デフォルトの名無しさん
2010/12/15(水) 08:10:03>1.唯の構造体的なもので、内部で何の整合性も取る必要ないのに、いちいちsetter/getterつける奴。
内部の構造が変更になったときのためにsetter/getterつけるんだよ
0848デフォルトの名無しさん
2010/12/15(水) 08:30:540849デフォルトの名無しさん
2010/12/15(水) 09:45:46何のラッピングも無く直に触ろうってのが問題なんじゃね。
内部とはいったってその構造体の値にアクセスする箇所が何箇所もあるわけでしょ。
アクセス方法の整合性をその箇所ごとに毎回人手でチェックしないといけなくなるよ。
0850デフォルトの名無しさん
2010/12/15(水) 09:54:00いろんなレベルから、自由自在にsetかます。
0851デフォルトの名無しさん
2010/12/15(水) 11:07:23整合性は型でチェックすると息巻いてる連中に聞かせてやりたい
型がいかに頼りにされてないか、これでよく分かる
0852デフォルトの名無しさん
2010/12/15(水) 16:44:32がしかし、構造体その物が滅多にないからな。
あっても、ほんの一握りの小さなデータのみ、例えばVECTORとか
0853デフォルトの名無しさん
2010/12/15(水) 16:55:35統一形式アクセスの原則を守ってる言語は別だけど
フィールドを直接触さわるのとメソッド呼び出しで記法が変わる場合(C++とか)は
顧客側でコード書き換えが発生するから、それの防止
>>851
よこからすまんが>>851は
アクセス方法の整合性の話をしてるんであって型の話じゃないでしょ
0854デフォルトの名無しさん
2010/12/15(水) 16:56:15よこからすまんが>>851は
↓
よこからすまんが>>849は
0855デフォルトの名無しさん
2010/12/15(水) 18:13:55内部の話をしてるんであって顧客側の話じゃないでしょ
0856デフォルトの名無しさん
2010/12/15(水) 18:22:26そうかな。
構造体は結構使うぞ。
いつもの人は普通の思考回路だから、
管理関係の無いクラス同士のコミュニケートのさいに、メソッドにオブジェクトを渡したりはしない。
依存関係が強くなるだけだからな。
必ず基本型か、もしくはそれに準じるstringなどの基本的なクラスに分解してから渡す。
ただ、そうすると引数が多くなるから、それらの引数を構造体に纏めたりもする。
と言うことで、構造体は結構使うな。
機能を持った賢いクラスと、
それらのクラス同士でコミュニケートをする際の、データを受け渡しするためのみに使われる構造体と、
そういうわけ方。何でもクラスだけでやろうとはしないのさ。
0857デフォルトの名無しさん
2010/12/15(水) 18:29:38あれはあれで賢いと思う。
今のMSよりも昔のMSの方が優秀だったと思うね。
今はなんか受け狙いというか短絡的というか。
釣りしてるように見える。ほら便利でしょう!!って。
0858デフォルトの名無しさん
2010/12/15(水) 18:33:46う〜〜ん、私の場合、その様な連絡用のデータもクラスにしてるな。
その場合はどちらでもいいと思うけど。
本体のオブジェクトをむやみに渡したりはしない。
同じだと思うけど?
C++の場合だけどな。 C++の構造体はフリーすぎるから。
ここまで来ると、単に好みの問題かもしれん。
0859デフォルトの名無しさん
2010/12/15(水) 18:48:35アクセサやインターフェースの話をしてるんだから
顧客も当然含まれるよ
0860デフォルトの名無しさん
2010/12/15(水) 19:27:540861デフォルトの名無しさん
2010/12/15(水) 20:45:02>>839の「構造体的なもの」はPoEAAでいう「バリューオブジェクト」のことで、その実装方法が
クラスか構造体かどうかは(アクセサに関しては)関係の無い話。
問題は「内部で整合性を取る必要がない場合であってもアクセサを作成するべきかどうか」だろ。
もっとも、最近の言語では何らかの仕組みが用意されていることが多いから、もう終わった話題
だとは思うが。
0862デフォルトの名無しさん
2010/12/15(水) 21:04:24制約付けたい時とかのためにメソッドでラップしておく、とか?
まぁ、最近の言語は統一形式アクセスをサポートしてたりするし、
AOPコンテナを使うという手も無いわけではない、か。
0863デフォルトの名無しさん
2010/12/15(水) 21:14:38ん?何か誤解してるかな、「何らかの仕組み」と言ったのは>>842のこと。
なぜAOPコンテナ?
0864デフォルトの名無しさん
2010/12/15(水) 21:39:57Q.内部で整合性を取る必要がない場合であってもアクセサを作成するべきか
A.統一形式アクセスがサポートされているか?
されている→必要なし
されていない→必要
0865デフォルトの名無しさん
2010/12/15(水) 21:42:30>>Q.内部で整合性を取る必要がない場合であってもアクセサを作成するべきか
すまん、意味がわからん
整合性を取る??どういうことでしょうか?
A.統一形式アクセスがサポートされているか?
統一形式???
0866デフォルトの名無しさん
2010/12/15(水) 21:55:58>整合性
簡単に言うと
2つのフィールドの値の合計が100じゃなければだめとか
相反するフラグが同時にTrueになっちゃだめとか
こんなの、適当な例で申し訳ない
>統一形式アクセス
あるモジュールによって提供されるサービスはすべて統一された表記によって
利用できなければならない。その表記はサービスが記憶領域によって実装され
るか計算によって実装されるかにかかわらず一定でなければならない。
--「オブジェクト指向入門」
0867デフォルトの名無しさん
2010/12/15(水) 21:57:10>整合性
フィールドにint型の変数があったとして、
その変数はint型のとりうる範囲なら何でもいいなんて場合は極まれ。
正の数でなければならないとか、n〜mの範囲でなければならないとか条件を絞れるはず。
アクセサをかませば異常値ははじけるし、毎回ifで確認する手間がはぶける。
>統一形式
そのオブジェクトの利用者はアクセス対象が変数かメソッドかを意識しなくても良い様にする仕組み。
少なくともC++とJavaには無い。
0868デフォルトの名無しさん
2010/12/15(水) 21:58:56ありがとうございます。理解しました
0869デフォルトの名無しさん
2010/12/15(水) 22:05:030870デフォルトの名無しさん
2010/12/15(水) 22:11:35まさかローカルなプリミティブ変数にまで、アクセッサーをw
まあ、変数総てがクラスという言語もあるからw
0871デフォルトの名無しさん
2010/12/15(水) 22:18:460872デフォルトの名無しさん
2010/12/15(水) 22:21:420873デフォルトの名無しさん
2010/12/15(水) 22:28:07動的な意味で
0874デフォルトの名無しさん
2010/12/15(水) 22:43:37異常値をはじくのは呼び出し側の仕事のような気がする
DbC的な意味で
0875デフォルトの名無しさん
2010/12/15(水) 23:21:30やっぱバグは残るんで、契約破りで例外ぐらい飛んでくれないと困る
フェイルセーフ的な意味で
まぁそれをアクセサがやるかアサート的な物がやるかは
どちらでも良いかな。
0876デフォルトの名無しさん
2010/12/15(水) 23:31:050877デフォルトの名無しさん
2010/12/16(木) 00:28:16上の例、アクセサでのチェックがなくても一応は型だけで弾けるよ。
あくまで一応は、だけどね。推奨はしない。
でも場合によっては一考の余地はある。
正の数でなければならないなら正の数クラスで受け取るようにする。
数値型もオーバーロードで受け付けるが、正の数クラスにラップして渡すだけ。
n〜mも、ほとんどの場合はn〜mに制限する理由があるはず。
それがトランプのカードに書かれた数値であるため1〜13であるなら
その数値はただの数値でなく、カードのランクだから1〜13なのだ。
だから「カードのランク」クラスにラップしてやる。
まあ、結局コンストラクタで値チェックすることになるんだけどさ。
0878デフォルトの名無しさん
2010/12/16(木) 20:10:09リリースするときは例外捕まえてこけないようにするけど
開発中は派手にクラッシュしてくれたほうがいいな
デバッグ的な意味で
0879デフォルトの名無しさん
2010/12/17(金) 20:24:08ダックタイピング
遅延束縛
動的束縛
解説みるとどれも似たようなこと書いてるんだが
どう違うのか教えてくれ
0880デフォルトの名無しさん
2010/12/17(金) 20:30:15ダックタイピング :型を介さないポリモ
遅延束縛 :?
動的束縛 :実行時に型などの情報を使ってメソッドをオーバーロード
反論は受け付ける。むしろ、誰か正しく突っ込んでくれ。
0881880
2010/12/17(金) 20:31:20×オーバーロード
○オーバーライド
0882デフォルトの名無しさん
2010/12/17(金) 20:54:00内容は覚えてないな
0883デフォルトの名無しさん
2010/12/17(金) 22:17:210884デフォルトの名無しさん
2010/12/17(金) 22:28:01変数の型とオブジェクトの型は必ず一致するのが普通
OOPが特殊なだけ
0885デフォルトの名無しさん
2010/12/17(金) 22:36:50http://en.wikipedia.org/wiki/Type_classhttp://en.wikipedia.org/wiki/Type_class
0886デフォルトの名無しさん
2010/12/17(金) 22:37:10http://en.wikipedia.org/wiki/Type_class
0887デフォルトの名無しさん
2010/12/17(金) 23:06:31>変数の型とオブジェクトの型は必ず一致するのが普通
とか言っちゃうの恥ずかしくない?
0888デフォルトの名無しさん
2010/12/17(金) 23:11:33いつものパターンに引っかかってるだけなのかな俺
オブジェクトもクラスになりえるとかいうレベルの話と
型クラスは大分レイヤが違う話
>>886が思う型クラスを持つOOP言語の例を教えてくれ
0889デフォルトの名無しさん
2010/12/17(金) 23:39:59型クラスは型変数の制約。
型変数は推論できてない型をあらわす。
推論できてなくても、変数と値の型は同じだという前提は崩さないと思う。
0890デフォルトの名無しさん
2010/12/17(金) 23:48:54lisp 辺りだと
変数に束縛される object は型を持つけど、変数は型を持たないんだが…
# 論点がちゃってたらごめん
0891デフォルトの名無しさん
2010/12/18(土) 00:07:49持たないものは比較できないから、同じかどうかは論点にならない
0892デフォルトの名無しさん
2010/12/18(土) 00:24:110893デフォルトの名無しさん
2010/12/18(土) 00:38:56問題はそこじゃなくて、型推論の話で型の弱い言語の話が混ざってるところだろ
いわゆる型推論って言った時はHMとその派生をさしてると思うけど
これはかなり強い型システムが前提
なのでlispが例に出てくるのは変だし
その辺で混乱してそうな人に型クラスを持ち出すのも変
(型クラスを持つOOP言語って何よ)
そんで、型推論のあるシステムでは>>884は普通で
変数と値の型が違えばコンパイルエラー
(変数の型が命題、値が証明というカリーハワード対応関係というものが成り立つ)
>>883とか890はおそらく、動的なOOP言語を思い浮かべて混乱してると予想する
変数にクラスオブジェクトを入れてその変数経由でオブジェクトを生成して、みたいな
0894デフォルトの名無しさん
2010/12/18(土) 01:59:32俺の予想ではこうなった。
変数に型がなければ混乱しない。
変数に型があっても、オブジェクトの型と同じなら混乱しない。
変数に型があって、変数の型とオブジェクトの型とが異なると混乱する。
883は混乱している。
ゆえに、883は変数に型がある言語を思い浮かべている。
0895883
2010/12/18(土) 18:55:21ぱっと思いついた疑問だったので細かいとこまで考えてなかったw
型推論は
静的型付け言語の概念で変数の型を推論してる
であってる?
0896デフォルトの名無しさん
2010/12/21(火) 21:11:35静的な型付けを持つ言語において、変数や関数の型を宣言しなくても
それを導くのに使われた関数の型シグネチャなどから自動的に型を決定
する機構のこと。主に関数型言語で用いられる。
http://ja.wikipedia.org/wiki/%E5%9E%8B%E6%8E%A8%E8%AB%96
らしいから、たぶんあってる
0897デフォルトの名無しさん
2010/12/25(土) 14:27:10束縛する値が変数の型に合わせてキャストされるのは弱い型付け
0898デフォルトの名無しさん
2010/12/29(水) 20:29:060899デフォルトの名無しさん
2010/12/29(水) 21:51:300900デフォルトの名無しさん
2010/12/29(水) 22:22:150901デフォルトの名無しさん
2010/12/30(木) 16:19:110902デフォルトの名無しさん
2010/12/30(木) 16:34:040903デフォルトの名無しさん
2010/12/30(木) 16:50:54もちろん不要。テンプレートで頑張りすぎちゃって、
virtual付けたときに不安になっちゃう子を沢山見た。
目先の速度に縛られてるうちはOOPのメリット享受までは遠い。
0904デフォルトの名無しさん
2010/12/30(木) 16:57:500905デフォルトの名無しさん
2010/12/30(木) 17:02:21そいつの技量がありえない
0906デフォルトの名無しさん
2010/12/30(木) 17:06:35あんなこともこんなことも!
boostのアレ使ってコレ使って。
凄くシンプルなはずのことを、
糞みたいに複雑に記述してるソースを見たことある。
お前等に見せてやりたかったよ。
0907デフォルトの名無しさん
2010/12/30(木) 17:20:17論点がずれてるよ。>>901は「OOP的にどうなの?」って聞いてんだから
C++でOOPするならテンプレートはいる
総称性が使えないと不便
0908デフォルトの名無しさん
2010/12/30(木) 17:42:58レス数が900を超えています。1000を超えると表示できなくなるよ。