お願いします。言語は問いません。
オブジェクト指向言語じゃなくても
オブジェクト指向の話であれば問題ありません。
探検
オブジェクト指向の活用方法を教えて下さい
■ このスレッドは過去ログ倉庫に格納されています
2014/03/25(火) 21:44:07.66ID:AtcH5MLU
124デフォルトの名無しさん
2014/03/29(土) 01:45:14.49ID:2x5p0G/E 50行を超える関数ぐらい出会うだろ?
オープンソースのコード読んだことある?
オープンソースのコード読んだことある?
125デフォルトの名無しさん
2014/03/29(土) 08:53:28.56ID:VG1PVttb オブジェクト指向で作られたライブラリを手続きの中で利用するのがベスト。
自身の構造をオブジェクトのネットワークで表現するのは問題を複雑にするだけ。
オブジェクト指向は基盤レイヤーで収まっていればいい。
より上のレイヤーは構造化プログラミングとモジュール化で対応すべきだ。
自身の構造をオブジェクトのネットワークで表現するのは問題を複雑にするだけ。
オブジェクト指向は基盤レイヤーで収まっていればいい。
より上のレイヤーは構造化プログラミングとモジュール化で対応すべきだ。
126デフォルトの名無しさん
2014/03/29(土) 10:41:15.74ID:FZRsbrVI127デフォルトの名無しさん
2014/03/29(土) 13:47:53.85ID:qOhcuGD/ 言いたい事はわかる。きれいに階層化されたツリー構造の方が処理を追いやすい。
しかし、どうしてもオブジェクトグラフがネットワーク状になる場合があるし、
ユーザーがオブジェクトどうしを自由に接続できるアプリだってある。
しかし、どうしてもオブジェクトグラフがネットワーク状になる場合があるし、
ユーザーがオブジェクトどうしを自由に接続できるアプリだってある。
128デフォルトの名無しさん
2014/03/29(土) 14:12:25.86ID:riFdWRlf プログラマ適性なしは言い過ぎ
最近は非オブジェクト指向の言語も注目されてきてるよね
最近は非オブジェクト指向の言語も注目されてきてるよね
129デフォルトの名無しさん
2014/03/29(土) 15:10:59.76ID:T0jzXlJE 関数型の次はなんだ?
130デフォルトの名無しさん
2014/03/29(土) 17:53:31.03ID:nUN7khDD OOだろうが非OOだろうが、
粒度の小さなデータ構造でネットワークを形成することを
「複雑にする」と思う時点でプログラミングに向いていない。
粒度の小さなデータ構造でネットワークを形成することを
「複雑にする」と思う時点でプログラミングに向いていない。
131デフォルトの名無しさん
2014/03/29(土) 18:15:38.16ID:VG1PVttb メインルーチンでまとめて管理すればいいものを、
処理とデータをセットにすることに拘った挙句、
メディエータパターンなんてマヌケな再発明を強いられるOOPに哀愁を禁じえない。
処理とデータをセットにすることに拘った挙句、
メディエータパターンなんてマヌケな再発明を強いられるOOPに哀愁を禁じえない。
132デフォルトの名無しさん
2014/03/29(土) 18:26:03.80ID:qOhcuGD/ 巨大なメインルーチンねえ。描画とかどうすんのかな。
133デフォルトの名無しさん
2014/03/29(土) 18:36:10.02ID:VG1PVttb 描画はイベントドリブンか、メインループの中で描画オブジェクトの配列を作るわ。
134デフォルトの名無しさん
2014/03/29(土) 19:00:43.30ID:nUN7khDD >>131
あんたも適性ないね
あんたも適性ないね
135デフォルトの名無しさん
2014/03/29(土) 19:40:22.20ID:VG1PVttb しかたない。SEにでも転職するか。
136デフォルトの名無しさん
2014/03/29(土) 20:02:51.62ID:riFdWRlf 適性とかそういう話じゃないなコレ、教育不足に経験不足だ
137デフォルトの名無しさん
2014/03/30(日) 02:19:44.18ID:3Fl9YNZ5 数珠つなぎのメソッドチェーンを呼び出して何をするのかと思ったら、単に変数
に値を代入(または取得)して終わり、みたいのをよく見かけます。途中に現れる
メソッド名を見ても必然性を感じません。その階層で何をするでもないのです。
そういう場合はただの変数の代入に書き換えます。
(ついでなので)変数の名前はその目的が分かる名前に直します。
まるでオブジェクト指向の本質は多重のメソッド呼び出しだ、と言わんばかりな
のです。自分はそんなことより、単なる変数・関数であったとしても命名を重視
したいです。
規模の大きいソフトウェアの場合、名前をグルーピングして、階層を持たせて命
名することに異論はありません。でもそもそもそんなに大きいソフトウェアを
作っているわけではないんです。
世界にひとつだけの名前にして衝突を未然に防ぎたい、ということでしょうか?
に値を代入(または取得)して終わり、みたいのをよく見かけます。途中に現れる
メソッド名を見ても必然性を感じません。その階層で何をするでもないのです。
そういう場合はただの変数の代入に書き換えます。
(ついでなので)変数の名前はその目的が分かる名前に直します。
まるでオブジェクト指向の本質は多重のメソッド呼び出しだ、と言わんばかりな
のです。自分はそんなことより、単なる変数・関数であったとしても命名を重視
したいです。
規模の大きいソフトウェアの場合、名前をグルーピングして、階層を持たせて命
名することに異論はありません。でもそもそもそんなに大きいソフトウェアを
作っているわけではないんです。
世界にひとつだけの名前にして衝突を未然に防ぎたい、ということでしょうか?
138デフォルトの名無しさん
2014/03/30(日) 02:26:07.76ID:3Fl9YNZ5 同じことがメソッド呼び出しにも言えます。チェーンしているメソッドがそれぞ
れ何を意味しているのか分かりづらい上、記述の順序と実行の順序が異なるので
す。
例えば文章において、姓名は「姓」と「名」を近くに記述することで「姓名」と
なって、ひとりの人を表わすことができます。日付の「年」「月」「日」も電話
番号の「市外局番」「市内局番」「加入者番号」も同様です。これらをばらばら
に離して記述すると読み解くのに苦労することでしょう。
記述の順序が実行の順序と一致しないというのは、そういう状況に似ています。
ソースプログラムがまるでなぞなぞのようになってしまうのです。
実行順序が隣り合っているものは隣り合わせて記述すると分かりやすいプログラ
ムになります。修正も簡単です。テキストエディタやgrepが強力なプログラミン
グツールになります。
れ何を意味しているのか分かりづらい上、記述の順序と実行の順序が異なるので
す。
例えば文章において、姓名は「姓」と「名」を近くに記述することで「姓名」と
なって、ひとりの人を表わすことができます。日付の「年」「月」「日」も電話
番号の「市外局番」「市内局番」「加入者番号」も同様です。これらをばらばら
に離して記述すると読み解くのに苦労することでしょう。
記述の順序が実行の順序と一致しないというのは、そういう状況に似ています。
ソースプログラムがまるでなぞなぞのようになってしまうのです。
実行順序が隣り合っているものは隣り合わせて記述すると分かりやすいプログラ
ムになります。修正も簡単です。テキストエディタやgrepが強力なプログラミン
グツールになります。
139デフォルトの名無しさん
2014/03/30(日) 02:40:59.19ID:xYPcFXGk140デフォルトの名無しさん
2014/03/30(日) 02:59:11.38ID:WoVbd8CL >>137-138
あなた、オブジェクト指向の話をしてないですよ。
あなた、オブジェクト指向の話をしてないですよ。
141デフォルトの名無しさん
2014/03/30(日) 03:06:19.07ID:f3QUPmmN メソッドチェーンが何かを知らない人に説明しておくと、
value を foo関数で加工して、bar関数で加工して、baz関数で加工するという、
シェルスクリプトで言えば
cat var | foo | bar | baz というのを
baz(bar(foo(value))) という逆順で書くのではなく、
value.foo().bar().baz() という風に
処理の順番の通りにかけるようにした方法です。
ただそれだけのことです。
どちらがわかりやすいかは言うまでもありませんね。
value を foo関数で加工して、bar関数で加工して、baz関数で加工するという、
シェルスクリプトで言えば
cat var | foo | bar | baz というのを
baz(bar(foo(value))) という逆順で書くのではなく、
value.foo().bar().baz() という風に
処理の順番の通りにかけるようにした方法です。
ただそれだけのことです。
どちらがわかりやすいかは言うまでもありませんね。
142デフォルトの名無しさん
2014/03/30(日) 03:10:55.68ID:DA7dDHvX メソッドチェーンだと書いている順番に
処理が実行されるからわかりやすいんだよな。
オブジェクト指向だと、メソッド名短くても
かぶらないからその点でもメリットがある。
処理が実行されるからわかりやすいんだよな。
オブジェクト指向だと、メソッド名短くても
かぶらないからその点でもメリットがある。
143デフォルトの名無しさん
2014/03/30(日) 03:11:55.59ID:F8tYL6fO なあんだ!どっちの目を使うかなんだね!
144デフォルトの名無しさん
2014/03/30(日) 03:28:36.95ID:DA7dDHvX > baz(bar(foo(value))) という逆順で書くのではなく、
これって引数無いからまだわかりやすいけど、
引数あると見にくいんだよね。
baz(bar(foo(value, 1, 2), true), "test");
呼び出しが深くなるにつれて、bazと"test"みたいに距離がどんどん離れちゃう。
これがメソッドチェーンだと
value.foo(1,2).bar(true).baz("test");
このように関数と引数が近くに集まる。
これって引数無いからまだわかりやすいけど、
引数あると見にくいんだよね。
baz(bar(foo(value, 1, 2), true), "test");
呼び出しが深くなるにつれて、bazと"test"みたいに距離がどんどん離れちゃう。
これがメソッドチェーンだと
value.foo(1,2).bar(true).baz("test");
このように関数と引数が近くに集まる。
145デフォルトの名無しさん
2014/03/30(日) 03:30:32.83ID:DA7dDHvX これもオブジェクト指向の活用方法の一つだろうね。
146デフォルトの名無しさん
2014/03/30(日) 03:34:47.32ID:eSXxjJTc だらだら連ねて1文に詰め込むのはデバッガで追いにくくなるからあまり好きじゃない。
147デフォルトの名無しさん
2014/03/30(日) 11:13:41.29ID:CUSBQvN9148デフォルトの名無しさん
2014/03/30(日) 11:13:50.33ID:Ep1/Keko 返り値をチェックして独自のエラーログを出したいw
149デフォルトの名無しさん
2014/03/30(日) 11:14:24.92ID:CUSBQvN9 >>146
どんなオンボロデバッガ使ってんだ?
どんなオンボロデバッガ使ってんだ?
150デフォルトの名無しさん
2014/03/30(日) 11:52:19.72ID:DA7dDHvX >>146
つまり、
baz(bar(foo(value, 1, 2), true), "test");
こういうのを
v = foo(value, 1, 2);
v = bar(v, true);
v = baz(v, "test");
って書くってこと?
おっと、メソッドチェーンとは関係ない話だったから
関数の方でレスしちゃったw
つまり、
baz(bar(foo(value, 1, 2), true), "test");
こういうのを
v = foo(value, 1, 2);
v = bar(v, true);
v = baz(v, "test");
って書くってこと?
おっと、メソッドチェーンとは関係ない話だったから
関数の方でレスしちゃったw
151デフォルトの名無しさん
2014/03/30(日) 11:57:24.64ID:IecYjjCX152デフォルトの名無しさん
2014/03/30(日) 12:01:26.08ID:DA7dDHvX 訂正(笑)
> baz(bar(foo(value, 1, 2), true), "test");
bar( ) の挙動確認したいから、この行の bar( ) の呼び出しでブレーク掛けられるデバッガ教えてくれ
> baz(bar(foo(value, 1, 2), true), "test");
bar( ) の挙動確認したいから、この行の bar( ) の呼び出しでブレーク掛けられるデバッガ教えてくれ
153デフォルトの名無しさん
2014/03/30(日) 12:07:13.82ID:DA7dDHvX メソッドチェーンならこれが使える。
メソッドチェーンの p デバッグ? それ tap でできるよAdd Starasakichy
http://d.hatena.ne.jp/mas-higa/20100805/1281018189
function p(obj) { print obj }
value.foo(1,2).bar(true).tap(p).("test");
まあ関数でも使えるよ。見難くなるけどねw
baz(p(bar(foo(value, 1, 2), true)), "test");
メソッドチェーンの p デバッグ? それ tap でできるよAdd Starasakichy
http://d.hatena.ne.jp/mas-higa/20100805/1281018189
function p(obj) { print obj }
value.foo(1,2).bar(true).tap(p).("test");
まあ関数でも使えるよ。見難くなるけどねw
baz(p(bar(foo(value, 1, 2), true)), "test");
154デフォルトの名無しさん
2014/03/30(日) 12:32:55.33ID:rCEPh8in 難しいことをしようとすれば、何を使っても複雑になる。
言語やパラダイムが複雑なんじゃなくて、解決しようとしている問題が複雑なだけなんだ。
言語やパラダイムが複雑なんじゃなくて、解決しようとしている問題が複雑なだけなんだ。
155デフォルトの名無しさん
2014/03/30(日) 12:47:55.23ID:DA7dDHvX えと、ああ、うん、
言語の違いっていうのは、問題がどうとかじゃなくて
読みやすさと書きやすさの違いの話なんだけどね。
言語の違いっていうのは、問題がどうとかじゃなくて
読みやすさと書きやすさの違いの話なんだけどね。
156デフォルトの名無しさん
2014/03/30(日) 13:17:38.07ID:CUSBQvN9 >>151
え?そんな簡単なこともできない開発環境でオブジェクト指向とか大笑いだな
え?そんな簡単なこともできない開発環境でオブジェクト指向とか大笑いだな
157デフォルトの名無しさん
2014/03/30(日) 13:27:57.55ID:3Fl9YNZ5 >>141
>シェルスクリプトで言えば
>cat var | foo | bar | baz というのを
このとき、foo や bar が何もしないプログラムであっても baz の前に入れることに
意味はありますか?関数型で組む場合は、何もしない関数 foo(), bar() を挟み込む
発想になったことがありません。必要になったとき、何かをしたくなったとき、その
ときに追加しています。
>シェルスクリプトで言えば
>cat var | foo | bar | baz というのを
このとき、foo や bar が何もしないプログラムであっても baz の前に入れることに
意味はありますか?関数型で組む場合は、何もしない関数 foo(), bar() を挟み込む
発想になったことがありません。必要になったとき、何かをしたくなったとき、その
ときに追加しています。
158デフォルトの名無しさん
2014/03/30(日) 13:31:27.59ID:amVAfrHC >>102
思うことは二つある。
1) 結局中身って見なくてもよくね?
どんな糞名前、糞用途でもAPIとして資料があって
int aaaaaaaaabbbbbbbbbbb(int x, int y)
x + yが素数のとき0を返し、それ以外のときyを返します。
となっていれば、中身は見なくてよくね?
実装なんてどーでもいいし想像したくもない。
2) 用途と名前が優れていればなおよし
シンプルな名前で表現されていれば、
APIリファレンスを紐解くことすら不要。
bool isprime(int x)ならこれだけで十分。
思うことは二つある。
1) 結局中身って見なくてもよくね?
どんな糞名前、糞用途でもAPIとして資料があって
int aaaaaaaaabbbbbbbbbbb(int x, int y)
x + yが素数のとき0を返し、それ以外のときyを返します。
となっていれば、中身は見なくてよくね?
実装なんてどーでもいいし想像したくもない。
2) 用途と名前が優れていればなおよし
シンプルな名前で表現されていれば、
APIリファレンスを紐解くことすら不要。
bool isprime(int x)ならこれだけで十分。
159デフォルトの名無しさん
2014/03/30(日) 13:35:22.35ID:qbWQb+53 継承とインターフェイスだけで十分便利
160デフォルトの名無しさん
2014/03/30(日) 14:01:44.17ID:qe+yThv9 >>157
たぶんお前の説明が下手くそだと思うんだが、いかなる場合も何もすることがない関数なんて言語問わず存在意義あるわけないじゃん
メソッドチェーン関係なく単に修正ミスとかだろ
もしくは、お前が知らないだけで何かの意味があるんだよ
よくみるなら具体例出してみろ
たぶんお前の説明が下手くそだと思うんだが、いかなる場合も何もすることがない関数なんて言語問わず存在意義あるわけないじゃん
メソッドチェーン関係なく単に修正ミスとかだろ
もしくは、お前が知らないだけで何かの意味があるんだよ
よくみるなら具体例出してみろ
161デフォルトの名無しさん
2014/03/30(日) 14:29:06.62ID:rCEPh8in With...End With ステートメント (Visual Basic)
http://msdn.microsoft.com/ja-jp/library/wc500chb.aspx
メソッドチェーンなんていらない。
言語側でwithステートメントを用意すれば済む話。
http://msdn.microsoft.com/ja-jp/library/wc500chb.aspx
メソッドチェーンなんていらない。
言語側でwithステートメントを用意すれば済む話。
162デフォルトの名無しさん
2014/03/30(日) 14:30:58.29ID:DA7dDHvX それでどうやって一行で書くの?
163デフォルトの名無しさん
2014/03/30(日) 14:44:34.88ID:rCEPh8in かりにメソッドチェーンという糖衣構文があるからといって実際に使う時は
object.func1(arg1, arg2, arg3)
.func2(arg1, arg2, arg3)
.func3(arg1, arg2, arg3)
...
.funcN(arg1, arg2, arg3);
って書くわけで、別にワンライナーしたいとかいう話ではないはず。
一つのオブジェクトに対して連続的にメソッドを呼び出す場合に、
それが手続きや意味ある関連として成立しないならまぎらわしいからやめろっていうのが
>>137-138の主張じゃないの。
object.func1(arg1, arg2, arg3)
.func2(arg1, arg2, arg3)
.func3(arg1, arg2, arg3)
...
.funcN(arg1, arg2, arg3);
って書くわけで、別にワンライナーしたいとかいう話ではないはず。
一つのオブジェクトに対して連続的にメソッドを呼び出す場合に、
それが手続きや意味ある関連として成立しないならまぎらわしいからやめろっていうのが
>>137-138の主張じゃないの。
164デフォルトの名無しさん
2014/03/30(日) 14:58:29.04ID:DA7dDHvX メソッドチェーンまで糖衣構文かよw
これのどこが構文なんだ?
ライブラリの仕様だろ。
これのどこが構文なんだ?
ライブラリの仕様だろ。
165デフォルトの名無しさん
2014/03/30(日) 15:11:02.31ID:qe+yThv9 Withは見にくいからやめろという主張をよく聞くが
メソッドチェーンの利点はメソッドで加工を行ってそれを別のメソッドに引き渡せるっていうこと
同じオブジェクトにたいして関連したメソッドをいくつも呼ぶ時も行を分けたりとかしなくて済むから見やすい
メソッドチェーンの利点はメソッドで加工を行ってそれを別のメソッドに引き渡せるっていうこと
同じオブジェクトにたいして関連したメソッドをいくつも呼ぶ時も行を分けたりとかしなくて済むから見やすい
166デフォルトの名無しさん
2014/03/30(日) 15:11:12.60ID:yCsw+RdE >>163
糖衣?…構文??
糖衣?…構文??
167デフォルトの名無しさん
2014/03/30(日) 15:17:34.92ID:rCEPh8in168デフォルトの名無しさん
2014/03/30(日) 15:39:47.59ID:J3oHNw57 みんな、見やすいかどうかは
文字列の長さや行数で変わるってことを
理解してないよ。
たとえばこの二つ。
var newValue = value.fooFooFooFooFooFoo().barBarBarBarBarBar().bazBazBazBazBaz();
var newValue = value.foo().bar().baz();
単に文字列の長さが違うだけでやってることは全く一緒。
だけど上の方は見難くて下の方は見難くはない。
つまりどういうコードが見やすいかどうかは、単に文字列の長さだけでも変わってくるということ
だから文字列が長くなる場合にメソッドチェーンで一行にすることは不適切。
逆に言えば、文字列が短い場合に有効なのがメソッドチェーンというわけ。
withが見やすいのは、文字列が長くなった場合の話で
短いならばメソッドチェーンの方が見やすい。
どちらが、どんな場合でも見やすいなんてことにはならないんだよ。
文字列の長さや行数で変わるってことを
理解してないよ。
たとえばこの二つ。
var newValue = value.fooFooFooFooFooFoo().barBarBarBarBarBar().bazBazBazBazBaz();
var newValue = value.foo().bar().baz();
単に文字列の長さが違うだけでやってることは全く一緒。
だけど上の方は見難くて下の方は見難くはない。
つまりどういうコードが見やすいかどうかは、単に文字列の長さだけでも変わってくるということ
だから文字列が長くなる場合にメソッドチェーンで一行にすることは不適切。
逆に言えば、文字列が短い場合に有効なのがメソッドチェーンというわけ。
withが見やすいのは、文字列が長くなった場合の話で
短いならばメソッドチェーンの方が見やすい。
どちらが、どんな場合でも見やすいなんてことにはならないんだよ。
169デフォルトの名無しさん
2014/03/30(日) 15:47:45.96ID:rCEPh8in 短かろうと一行にするのはよくないと思うな。
オブジェクトが無い場合に
foo(); bar(); baz();
なんて書けるけど、実際はたとえ関連があっても横に連ねては書かないし。
メソッドチェーンにしたって
graphics.clearRect(0,0,640,480).drawRect(100,100,50,50).drawCircle(50,50,100)...
なんて横には書かなくね。
オブジェクトが無い場合に
foo(); bar(); baz();
なんて書けるけど、実際はたとえ関連があっても横に連ねては書かないし。
メソッドチェーンにしたって
graphics.clearRect(0,0,640,480).drawRect(100,100,50,50).drawCircle(50,50,100)...
なんて横には書かなくね。
170デフォルトの名無しさん
2014/03/30(日) 15:49:43.00ID:J3oHNw57 > foo(); bar(); baz();
>
> なんて書けるけど
書けないよ。
baz(bar(foo()));
こうだろ
>
> なんて書けるけど
書けないよ。
baz(bar(foo()));
こうだろ
171デフォルトの名無しさん
2014/03/30(日) 15:53:47.22ID:rCEPh8in172デフォルトの名無しさん
2014/03/30(日) 15:58:50.57ID:J3oHNw57173デフォルトの名無しさん
2014/03/30(日) 16:33:15.45ID:IecYjjCX >>156
で、具体的なデバッガの名前とやり方は?
で、具体的なデバッガの名前とやり方は?
174デフォルトの名無しさん
2014/03/30(日) 17:17:26.79ID:CUSBQvN9 >>160
関数型言語ではid関数は重宝するぞ
関数型言語ではid関数は重宝するぞ
175デフォルトの名無しさん
2014/03/30(日) 17:34:15.13ID:qe+yThv9176デフォルトの名無しさん
2014/03/30(日) 18:01:52.30ID:3Fl9YNZ5 >>160 具体例は公開できないので申し訳ない
その1. メソッド名が訳の分かる名前ならば、その中身を心配して見にいく必要はない
⇒ これはレスや参考図書がよく使う 'foo' だの 'bar' だののレベルの名前を開発
しているプログラムに使っていることが問題なのだと思う
その2. 場合によっては改名するつもりで中身を見にいくと、なんでこれを括りだしたの?
という疑問が発生(もとから括り出す必要はなくて、名前も要らないんじゃないの?)
⇒ メソッドの中身をメインルーチンにコピペして解決!!
オブジェクト指向の話がいつの間にかコピペの話に...
オブジェクト指向って、どんな場合に役に立つのか、また活用方法を知りたい
のです
あるいはオブジェクト指向があるから常に使わなければならない、という考えは
間違いで、使うか使わないかは便利か便利じゃないか、解決しようとしている
問題や環境・状況に合わせて、判断すればいいものなのか?
そのとき、判断材料には本人や周りのひとのスキルを含めなくていいのか?
人のスキルに関係なく、いつでも・絶対にオブジェクト指向が有利なのか?
メソッド呼びさえしていればオブジェクト指向なので後ろ指さされることは
ないものなのか?
その1. メソッド名が訳の分かる名前ならば、その中身を心配して見にいく必要はない
⇒ これはレスや参考図書がよく使う 'foo' だの 'bar' だののレベルの名前を開発
しているプログラムに使っていることが問題なのだと思う
その2. 場合によっては改名するつもりで中身を見にいくと、なんでこれを括りだしたの?
という疑問が発生(もとから括り出す必要はなくて、名前も要らないんじゃないの?)
⇒ メソッドの中身をメインルーチンにコピペして解決!!
オブジェクト指向の話がいつの間にかコピペの話に...
オブジェクト指向って、どんな場合に役に立つのか、また活用方法を知りたい
のです
あるいはオブジェクト指向があるから常に使わなければならない、という考えは
間違いで、使うか使わないかは便利か便利じゃないか、解決しようとしている
問題や環境・状況に合わせて、判断すればいいものなのか?
そのとき、判断材料には本人や周りのひとのスキルを含めなくていいのか?
人のスキルに関係なく、いつでも・絶対にオブジェクト指向が有利なのか?
メソッド呼びさえしていればオブジェクト指向なので後ろ指さされることは
ないものなのか?
177デフォルトの名無しさん
2014/03/30(日) 19:02:38.40ID:qe+yThv9 >>176
なんだ、昨日の続きならそうかけよ
当然、 fooとbarとかの名前なら書いたやつが無能なだけ。
jQueryとかrubyみたいにわかりやすい名前がいい
中身はどこかでまたつかうとか、メソッドチェーンでシンプルに書けるなら有用かもしれない
オブジェクト指向は完璧ではないし、スキルがない人ならやらなくてもいいんじゃない?
ただし、C#とかJavaみたいにオブジェクト指向ありきで設計された言語はやっぱり知識は必要
標準ライブラリ自体オブジェクト指向専用だからね
C#でStreamではなくFileStreamしか受けないメソッドとかを作ってしまったら不便だし、不要なフィールドを公開したら危険だ
なんだ、昨日の続きならそうかけよ
当然、 fooとbarとかの名前なら書いたやつが無能なだけ。
jQueryとかrubyみたいにわかりやすい名前がいい
中身はどこかでまたつかうとか、メソッドチェーンでシンプルに書けるなら有用かもしれない
オブジェクト指向は完璧ではないし、スキルがない人ならやらなくてもいいんじゃない?
ただし、C#とかJavaみたいにオブジェクト指向ありきで設計された言語はやっぱり知識は必要
標準ライブラリ自体オブジェクト指向専用だからね
C#でStreamではなくFileStreamしか受けないメソッドとかを作ってしまったら不便だし、不要なフィールドを公開したら危険だ
178デフォルトの名無しさん
2014/03/30(日) 22:50:01.50ID:rCEPh8in >>176
オブジェクト指向を使うと、同じものを2つ以上同時に扱うのが簡単なんだよね。
2つのファイルを同時に編集するとか
ぷよぷよの画面を2つならべてみるとか
5人のボンバーマンが同時に動くとかさ。
オブジェクト指向を使うと、同じものを2つ以上同時に扱うのが簡単なんだよね。
2つのファイルを同時に編集するとか
ぷよぷよの画面を2つならべてみるとか
5人のボンバーマンが同時に動くとかさ。
179デフォルトの名無しさん
2014/04/01(火) 20:30:56.47ID:c88mFqYR >>173
スモールトーク系のデバッガーはメソッドチェーンのそれぞれのメソッド呼び出しごとにステップ実行できるらしいよ
スモールトーク系のデバッガーはメソッドチェーンのそれぞれのメソッド呼び出しごとにステップ実行できるらしいよ
180デフォルトの名無しさん
2014/04/01(火) 21:54:52.60ID:WgoYILFU181デフォルトの名無しさん
2014/04/02(水) 21:15:51.80ID:R40jOAQ7 性能低下を防ぐためにメソッドの内容をメインルーチンに直に展開する作業は、
処理系にまかせることもできるだろうが、それによって多態性は失われる。
それよりもソフトウェアを細かく分割して構成する以上、バージョンの依存
関係が複雑に絡み合うほうが問題として大きい。
処理系にまかせることもできるだろうが、それによって多態性は失われる。
それよりもソフトウェアを細かく分割して構成する以上、バージョンの依存
関係が複雑に絡み合うほうが問題として大きい。
182デフォルトの名無しさん
2014/04/02(水) 21:49:26.89ID:YdJBhj/R >>180
スモールトークっていったらスクイークとかじゃないの?
口先番長認定するまえに自分で調べてみたの?
口の中にご飯をスプーンで入れてもらうまで
馬鹿みたいに口開けて上を向いているタイプの人なの?
スモールトークっていったらスクイークとかじゃないの?
口先番長認定するまえに自分で調べてみたの?
口の中にご飯をスプーンで入れてもらうまで
馬鹿みたいに口開けて上を向いているタイプの人なの?
183デフォルトの名無しさん
2014/04/02(水) 22:04:27.79ID:UHLZ3L7X184デフォルトの名無しさん
2014/04/03(木) 00:45:59.14ID:OChVK7bs >>4
ポリモーフィズムはリリースされたプログラムをユーザーが部分的に更新しな
がら使う(ライブラリやDLLを更新する)と、プログラマが当初考えていた以上
の使われ方をして、動作の保証ができなくなる、ってことにならないの?
昔でいうgoto文や、メモリーリークを起こしがちなC言語のポインタみたいに
やっかいなことにならないの?
ポリモーフィズムはリリースされたプログラムをユーザーが部分的に更新しな
がら使う(ライブラリやDLLを更新する)と、プログラマが当初考えていた以上
の使われ方をして、動作の保証ができなくなる、ってことにならないの?
昔でいうgoto文や、メモリーリークを起こしがちなC言語のポインタみたいに
やっかいなことにならないの?
185デフォルトの名無しさん
2014/04/03(木) 00:59:50.75ID:p51daBHj 動作の保証ができなくなるようなことを許すのは単なる欠陥でしょ
186デフォルトの名無しさん
2014/04/03(木) 02:22:36.23ID:Dr19mwRL メソッドごとにコメントアウトすればいいよ
てかメソッドチェーンとしてのチェックってあるかね
てかメソッドチェーンとしてのチェックってあるかね
187デフォルトの名無しさん
2014/04/03(木) 04:56:35.67ID:4OpITLe5 >>183
できないと思ってるの?
できないと思ってるの?
188デフォルトの名無しさん
2014/04/03(木) 07:32:45.27ID:7TERZTkc >>187
できるんなら、その方法書いてくれ。
できるんなら、その方法書いてくれ。
189デフォルトの名無しさん
2014/04/03(木) 08:26:44.88ID:oN99KWq6 いい加減に認めろよ……
そもそも仮に「メソッドチェーンはデバッグできない」としても、それは「オブジェクト指向」を否定するのに大事な要素でもないじゃん
何かこだわりでもあるの?
そもそも仮に「メソッドチェーンはデバッグできない」としても、それは「オブジェクト指向」を否定するのに大事な要素でもないじゃん
何かこだわりでもあるの?
190デフォルトの名無しさん
2014/04/03(木) 08:48:37.07ID:syg3Ul2m191デフォルトの名無しさん
2014/04/03(木) 15:05:44.04ID:v6ez+Y0x >>188
ちゃんとしたSmalltalk処理系では(つまりGNU Smalltalkとかの変わり種を除けば)一般に
value foo halt bar baz で、bar のコール直前でデバッガを起動させて bar のステップ実行ができる
ってそういうことではなく? ちなみに halt は古典的なSmalltalkにおけるブレイクポイントみたいなもの。
ちゃんとしたSmalltalk処理系では(つまりGNU Smalltalkとかの変わり種を除けば)一般に
value foo halt bar baz で、bar のコール直前でデバッガを起動させて bar のステップ実行ができる
ってそういうことではなく? ちなみに halt は古典的なSmalltalkにおけるブレイクポイントみたいなもの。
192デフォルトの名無しさん
2014/04/03(木) 15:25:06.01ID:hov1QvrO みんなSmalltalk使ってたのかよ
193デフォルトの名無しさん
2014/04/03(木) 17:07:01.60ID:4OpITLe5 スモールトークがオブジェクト指向の元祖だからな
スモールトークでできるならオブジェクト指向の欠点とは胃炎な
スモールトークでできるならオブジェクト指向の欠点とは胃炎な
194デフォルトの名無しさん
2014/04/03(木) 17:16:43.96ID:hov1QvrO ていうか、一つの式に詰め込んだら便利かどうかなんてオブジェクト指向と関係なくね?
195デフォルトの名無しさん
2014/04/03(木) 19:17:35.74ID:/A78gSRK Smalltalkには、コードを英文のように読み下せるように書く慣習みたいなものがあって、
value foo bar baz みたいな式だとちょっとメリットをイメージしにくいですが、たとえば
「1 から 9 までの数を配列にして、それをシャッフルして最初の3つを得る」みたいな処理を、
(1 to: 9) asArray shuffled first: 3 というふうに一気にメソッドチェーンにして書くようなことはよくします。
そんなこともあって、メソッドチェーンだからデバッグしづらいというような制約はほとんどうけない仕組みになっています。
value foo bar baz みたいな式だとちょっとメリットをイメージしにくいですが、たとえば
「1 から 9 までの数を配列にして、それをシャッフルして最初の3つを得る」みたいな処理を、
(1 to: 9) asArray shuffled first: 3 というふうに一気にメソッドチェーンにして書くようなことはよくします。
そんなこともあって、メソッドチェーンだからデバッグしづらいというような制約はほとんどうけない仕組みになっています。
196デフォルトの名無しさん
2014/04/03(木) 20:08:44.08ID:JDC55uKf >>194
そもそもオブジェクト指向についてあんまり語ってないからいいんじゃね
そもそもオブジェクト指向についてあんまり語ってないからいいんじゃね
197デフォルトの名無しさん
2014/04/03(木) 21:23:31.55ID:y3U0PHNW198デフォルトの名無しさん
2014/04/04(金) 00:28:50.72ID:T327aBHM C++じゃなくてObjective-Cが流行ってれば
オブジェクト指向絡みの論争は半分になったんじゃないかと
思えてしかたがない。
オブジェクト指向が、じゃなくてC++が採用した方法は、な議論大杉
オブジェクト指向絡みの論争は半分になったんじゃないかと
思えてしかたがない。
オブジェクト指向が、じゃなくてC++が採用した方法は、な議論大杉
199デフォルトの名無しさん
2014/04/04(金) 01:37:59.49ID:G1RCkua4 クラスベース vs プロトタイプベース
200デフォルトの名無しさん
2014/04/04(金) 01:52:31.25ID:h1F261Ig Objective-C十分流行ってるじゃん
201デフォルトの名無しさん
2014/04/04(金) 03:12:14.91ID:T327aBHM ここ5年ぐらいでiOS用で一気に拡まったけど90年代を通じて
一般の想定するオブジェクト指向と言ったらC++だったからな…
90年代後半からはそこにJavaが加わり…的な。
ある意味バカみたいに基本に忠実なObjective-Cの方が
オブジェクト指向とは〜って議論のたたき台としてはよかったよな的な。
一般の想定するオブジェクト指向と言ったらC++だったからな…
90年代後半からはそこにJavaが加わり…的な。
ある意味バカみたいに基本に忠実なObjective-Cの方が
オブジェクト指向とは〜って議論のたたき台としてはよかったよな的な。
202デフォルトの名無しさん
2014/04/04(金) 07:15:48.10ID:R/rpZwB2 >>197
と言うか、行単位でのブレークポイントなのはデバッガの都合でしかないんだよなあ
と言うか、行単位でのブレークポイントなのはデバッガの都合でしかないんだよなあ
203デフォルトの名無しさん
2014/04/04(金) 07:36:28.20ID:KeYVoIFc >>202
式の途中にブレークポイントを入れるのはデバッガだけでは無理っす。
式の途中にブレークポイントを入れるのはデバッガだけでは無理っす。
204デフォルトの名無しさん
2014/04/04(金) 08:06:13.57ID:JslAeCyW205デフォルトの名無しさん
2014/04/04(金) 09:05:42.51ID:KeYVoIFc 最低限、コンパイラにも手を入れる必要があると思うぞ。
206デフォルトの名無しさん
2014/04/04(金) 10:52:39.43ID:N5FO4XZ5 デバッガのブレークポイントの指定が
行単位ってだけで、関数単位でのステップは可能。
そして関数単位で止めたいなら
関数ごとに改行すればいいだけじゃない。
行単位ってだけで、関数単位でのステップは可能。
そして関数単位で止めたいなら
関数ごとに改行すればいいだけじゃない。
207デフォルトの名無しさん
2014/04/04(金) 13:07:13.88ID:JslAeCyW >>206
> デバッガのブレークポイントの指定が行単位ってだけで、
たいていの IDE は行単位ではなくてステートメント単位じゃね?
> 関数ごとに改行すればいいだけじゃない。
そもそもそんなことしたくないか、発端だろ。
デバッグのためにソース弄るとかは最後の手段だろ。
> デバッガのブレークポイントの指定が行単位ってだけで、
たいていの IDE は行単位ではなくてステートメント単位じゃね?
> 関数ごとに改行すればいいだけじゃない。
そもそもそんなことしたくないか、発端だろ。
デバッグのためにソース弄るとかは最後の手段だろ。
208デフォルトの名無しさん
2014/04/05(土) 08:19:53.84ID:nKpGUjgO >>206
だーかーらー、
コンパイラが出す行情報以外にどうやって
ブレークかけるアドレスを取り出すわけ?
関数ごとに改行したところで
普通のコンパイラはステートメント単位でしか行番号情報ださねーぞ。
もしかして、単にデバッガのUIの問題だと思ってた?
甘杉
だーかーらー、
コンパイラが出す行情報以外にどうやって
ブレークかけるアドレスを取り出すわけ?
関数ごとに改行したところで
普通のコンパイラはステートメント単位でしか行番号情報ださねーぞ。
もしかして、単にデバッガのUIの問題だと思ってた?
甘杉
209デフォルトの名無しさん
2014/04/05(土) 08:39:06.87ID:OXL1p1Q1 そういうスレたててやれ
210デフォルトの名無しさん
2014/04/05(土) 10:05:58.71ID:AlWzj+6w いったいどのデバッガやコンパイラについて話してるのか知らんが、
VS2013とかにはメソッドチェーンのデバッグ機能あるぞ……
メソッドチェーン中の個々のメソッドについて戻り値とその型を表示してくれる
VS2013とかにはメソッドチェーンのデバッグ機能あるぞ……
メソッドチェーン中の個々のメソッドについて戻り値とその型を表示してくれる
211デフォルトの名無しさん
2014/04/05(土) 12:34:58.04ID:zg062x0r >>1
mvcで作ればなんとなくわかる
mvcで作ればなんとなくわかる
212デフォルトの名無しさん
2014/04/05(土) 21:29:41.29ID:LGGjyQ0u オブジェクト指向を使うには、変数や関数がある程度以上の個数がないと無意味。
あとインスタンスが2個以上必要な場合じゃないと意味がない。
俺の分野ではどちらも当てはまらないので、オブジェクト指向が活用できない
という結論に至った。みんな、ありがとう。
あとインスタンスが2個以上必要な場合じゃないと意味がない。
俺の分野ではどちらも当てはまらないので、オブジェクト指向が活用できない
という結論に至った。みんな、ありがとう。
213デフォルトの名無しさん
2014/04/05(土) 21:49:36.29ID:anSZmmIR オブジェクト指向が活用できない分野ってどんな分野よ
214デフォルトの名無しさん
2014/04/05(土) 22:16:36.14ID:iKzYf4PO 書き換えて再利用とか機能の追加が少ない機械みたいな分野だったら
(構造化言語の)Cそのまんまで十分じゃないの、とは思う。
(構造化言語の)Cそのまんまで十分じゃないの、とは思う。
215デフォルトの名無しさん
2014/04/06(日) 06:09:18.41ID:IRmFVDmN >>212の日本語訳
「俺がいつも書くコードはオブジェクト指向になっていない。
だから俺の分野ではオブジェクト指向は使えない。」
「オブジェクト指向」の部分にどんな技術を入れても成立する
魔法の言い訳だな。
「俺がいつも書くコードはオブジェクト指向になっていない。
だから俺の分野ではオブジェクト指向は使えない。」
「オブジェクト指向」の部分にどんな技術を入れても成立する
魔法の言い訳だな。
216デフォルトの名無しさん
2014/04/06(日) 06:50:21.75ID:7fCDh1Rd 同じものが沢山作れる、ってのは確かにオブジェクト指向のミソだが、
インスタンスが一つだろうと、オブジェクト指向プログラミングによって得られるものは色々あるぞ
再利用性とか、単体テストのしやすさとか、拡張性とかな
あと、オブジェクト指向プログラミングの重要なデザインパターンに「シングルトン」というのがあって、こいつはインスタンスを一つに限定するものなんじゃな
インスタンス一つだから役に立たない、ってのは世の中のプログラマには通じないと思われる
インスタンスが一つだろうと、オブジェクト指向プログラミングによって得られるものは色々あるぞ
再利用性とか、単体テストのしやすさとか、拡張性とかな
あと、オブジェクト指向プログラミングの重要なデザインパターンに「シングルトン」というのがあって、こいつはインスタンスを一つに限定するものなんじゃな
インスタンス一つだから役に立たない、ってのは世の中のプログラマには通じないと思われる
217デフォルトの名無しさん
2014/04/06(日) 09:28:19.55ID:v5F7vKVc 記述側がより人間の思想に近くなったメリットと、実装側でからくり(C++ なら vtable)を生成コードに常に追加するコストとを天秤にかけたら、どっちに軍配があがるかは人それぞれだね
ライナスは OO をぼろくそにけなしているね
ライナスは OO をぼろくそにけなしているね
218デフォルトの名無しさん
2014/04/06(日) 11:55:32.65ID:X8q2hYwd >>216
> 再利用性とか、単体テストのしやすさとか、拡張性とかな
単体テストはべつにして、再利用性とか拡張性とか広い意味では複数インスタンスじゃね?
あと、同じものをたくさんじゃなくって、ちょっと違うものを作れるって言うのがミソかと。
> 再利用性とか、単体テストのしやすさとか、拡張性とかな
単体テストはべつにして、再利用性とか拡張性とか広い意味では複数インスタンスじゃね?
あと、同じものをたくさんじゃなくって、ちょっと違うものを作れるって言うのがミソかと。
219デフォルトの名無しさん
2014/04/06(日) 12:55:51.09ID:hTzu53D+ >>217
> ライナスは OO をぼろくそにけなしているね
ライナスだけじゃね?w
しかも俺らはカーネル作ってるわけじゃないから、
用途によって言語は変えるべきという正しい考え方からすると、
ライナスが何言っても何使っても関係ないよねw
> ライナスは OO をぼろくそにけなしているね
ライナスだけじゃね?w
しかも俺らはカーネル作ってるわけじゃないから、
用途によって言語は変えるべきという正しい考え方からすると、
ライナスが何言っても何使っても関係ないよねw
220デフォルトの名無しさん
2014/04/06(日) 12:56:37.04ID:hTzu53D+ どっちに軍配があがるかは人それぞれというより
用途によりけりってことだろう。
で、大概の用途にOOに軍配が上がると。
用途によりけりってことだろう。
で、大概の用途にOOに軍配が上がると。
221デフォルトの名無しさん
2014/04/06(日) 13:06:24.24ID:N1Ox9kUH ここまでの内容ならライブラリで十分。オブジェクト指向は不要。
222デフォルトの名無しさん
2014/04/06(日) 13:16:36.50ID:nZeav+Zp ライブラリとオブジェクト指向を同列に語ってる馬鹿は黙ってろよ
223デフォルトの名無しさん
2014/04/06(日) 13:29:28.28ID:d9KztC3X こういうのを見ると、やっぱりオブジェクト指向が一般的であることがよく分かるよ。
.NETにおけるSOLID設計原則とデザインパターン
http://www.infoq.com/jp/news/2013/09/solid-principles-revisited
SOLIDとは5つの設計原則の頭字語である。氏の簡潔な説明を借りれば:
単一責務の原則(Single Responsibility Principle)
すべてのオブジェクトは唯一の責務を持たなければならない。すなわち,実行することはただひとつでなければならない。
開放/閉鎖の原則(Open-Closed Principle)
クラスは拡張に対しては開いて(Open),修正に対しては閉じて(Close)いなければならない。
Liskovの置換原則(Liskov Substitution Principle)
派生クラスは親クラスの置換として使用可能でなければならない。なおかつ,同じ振る舞いをしなければならない。
インターフェイス分離の原則(Interface Segregation Principle)
使用しないインターフェースへの依存をクライアントに強制してはならない。
依存関係逆転の原則(Dependency Inversion Principle)
具体的な実装よりも抽象に依存するべきである。これはコードの分離に有効だ。
.NETにおけるSOLID設計原則とデザインパターン
http://www.infoq.com/jp/news/2013/09/solid-principles-revisited
SOLIDとは5つの設計原則の頭字語である。氏の簡潔な説明を借りれば:
単一責務の原則(Single Responsibility Principle)
すべてのオブジェクトは唯一の責務を持たなければならない。すなわち,実行することはただひとつでなければならない。
開放/閉鎖の原則(Open-Closed Principle)
クラスは拡張に対しては開いて(Open),修正に対しては閉じて(Close)いなければならない。
Liskovの置換原則(Liskov Substitution Principle)
派生クラスは親クラスの置換として使用可能でなければならない。なおかつ,同じ振る舞いをしなければならない。
インターフェイス分離の原則(Interface Segregation Principle)
使用しないインターフェースへの依存をクライアントに強制してはならない。
依存関係逆転の原則(Dependency Inversion Principle)
具体的な実装よりも抽象に依存するべきである。これはコードの分離に有効だ。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★4 [七波羅探題★]
- 中国軍機レーダー照射、トランプ氏沈黙突く 試される日本外交 [蚤の市★]
- 【地震】青森県で震度6強 長周期地震動も 津波注意報すべて解除 ★7 [ぐれ★] [ぐれ★]
- 【広島】「万引きした人を追跡」コンビニ店員の男性(46)を果物ナイフで刺したか 中国籍の少年(17)を殺人未遂容疑で現行犯逮捕 [ぐれ★]
- トランプ大統領 エヌビディア製AI半導体の中国輸出許可 安全保障重視の方針転換 [蚤の市★]
- 【サッカー】58歳カズ「オファーが来ている」 J3福島と近日中にも交渉 早ければ年内にも決断 [征夷大将軍★]
- 【悲報】高市早苗の擬人化がXで大バズりwwwwwwwwwwww [455031798]
- 高市が早くあの発言を撤回しないと、中国からもっと大きな制裁が飛んでくるぞ [805596214]
- 【動画】ファッションモデルまんこ、裸でランウェイを歩く。これがファッションだと言われて [749674962]
- 【画像】髙市さん「無職のシンママ支援を手厚くするため、世帯年収900万円以上の控除をカットします🙂」 [881878332]
- 早大名誉教授「高市内閣の高支持率はデータ操作か、支持している日本人がアホなのか」👈核心を突いてしまう [868050967]
- こんぺこ!こんぺこ!こんぺこ!🐰🏡
