オブジェクト指向は遅い

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2011/08/11(木) 21:33:38.94
>>950
例えば今は四角形の面積だけど、三角形の面積を求めるモデルを新たに追加したいときShapeで共通のインターフェースを持っていると、
Viewは四角形や三角形を意識せず面積がある形ということだけを意識できるのでいいかなっと思ったりしました(後出しですいません

インターフェースの置き方って意識したことがなかった
パッケージで単純に似たもの同士まとめてたんだけど、どれが要求しているかをを意識するものなんだ

>>951
Facadeパターンですね
やっていることはわかるのだけど、どうしてそういう構造になっているとmainメソッドをModelに置くのかがわかりません
953デフォルトの名無しさん:2011/08/11(木) 21:45:40.46
>>952
ホントいうと、Observerをモデルクラス本体に置かず、
君ので言えばShapeSubjectに置いとく方がいいよ。

interface ShapeSubject
{
     public interface Observer{}
     public int getArea();
}
class TrigonModel implements ShapeSubject
{
}
class SquareModel implements ShapeSubject
{
}
954デフォルトの名無しさん:2011/08/11(木) 21:56:00.60
>>952
mainが唯一の存在で有ることと、ApplicationModelが唯一で有ることから。
まぁ、ApplicationModelを他のプログラムで最利用してもいいんだけどね。
もうひとつは、コントローラーはnew MoveControl( model, view );みたいな名前に
なるんで、名前が合わないって所。まぁ、mainをコントローラーの中に入れて、
こんな使い方でもいいかもしれないけどね。

static void main(String args[])
{
        ApplicationModel model = new ApplicationModel( args );
        ApplicationControl control = new ApplicationControl( model );
        control.execute();
}
955デフォルトの名無しさん:2011/08/12(金) 00:09:46.42
ttp://ideone.com/4qsIS
JavaのSwingを使って最小限のMVC表現を行おうとしたが…。
もともと、GUIコンポーネントをViewと言い放っていいのかどうか迷いがあったので、
それが迷ったままになってしまった。パネルの描画部分をオーバーライドして、
クラスの役割を描画であると強調したつもりだがどうだろうか。
956デフォルトの名無しさん:2011/08/12(金) 05:03:13.83
>>955
実行イメージくれくれ
957デフォルトの名無しさん:2011/08/12(金) 11:11:21.84
同じ画面に、ユーザーが円グラフのデータの一つを選択して
その値を表示したり変更したりする機能を付けたくなったらどうする?
データをソートしたくなったら?
958デフォルトの名無しさん:2011/08/12(金) 11:49:26.03
>>957
ソースコードがあればユーザが自分で付け加えられるね
REPLで実行できるなら実行中に機能を追加出来てもっと良いね
959デフォルトの名無しさん:2011/08/12(金) 12:06:14.84
これはVでこれはMみたいな議論はもう飽きた。
どうせ相手の意見を聞く気もないんだろ?
960デフォルトの名無しさん:2011/08/12(金) 12:37:40.28
もともとはアクセサーの話だったと思うが、「MVCでもアクセサーいらないよ」派はまだ息してるの?
961デフォルトの名無しさん:2011/08/12(金) 12:40:47.57
全部モデルにぶち込む君の糞設計は
>>929で分類されるところの「古典的MVC」
962デフォルトの名無しさん:2011/08/12(金) 13:09:03.95
>>957
グラフに表示してるデータを編集したいってこと?
それとも、グラフに表示してるデータの複製を編集したいってこと?
それともグラフに表示してるデータの一切れ分を編集したいってこと?
963デフォルトの名無しさん:2011/08/12(金) 13:20:24.65
>>960
MVC自体いいのかどうなのかよくわからないし
その上にさらにマシマシした構造で必要とか言われても結局よくわからない
結局、Mの都合の悪いタイミングにgetしたら不味いタイミングあっちゃうのに
なんかgetつけてるって実装が大半に見えるけどね俺には
964デフォルトの名無しさん:2011/08/12(金) 14:03:15.53
>>963
・よく分からないのに「MVCでもアクセサーいらないよ」派なのですか?
・M→Vのデータ伝播は本質的存在で、その方針は重要なインターフェイスです
・それはカプセル化や非同期処理の問題です
・日本のPGの数割はパターンに関係なくふざけたコードを書くので、間違った実装の目撃例で物事を語らないでください

ていうか「マシマシした」って何?
ラーメン?
965デフォルトの名無しさん:2011/08/12(金) 14:39:33.75
アクセサあるだけでレースコンディション発生させちゃう男のひとって・・・
966デフォルトの名無しさん:2011/08/12(金) 15:19:56.56
getImageというメソッドがあるとすると
都合の悪いタイミングで画像を見られるのを避けるには
ダブルバッファリングするだけ。
getterやめる必要はない。
967デフォルトの名無しさん:2011/08/12(金) 15:26:07.62
>>964
>・M→Vのデータ伝播は本質的存在で、その方針は重要なインターフェイスです
これをget使ってやらなきゃいけないって決まりはあるの?
968デフォルトの名無しさん:2011/08/12(金) 17:00:47.01
>>967
無いよ。get使っちゃダメって決まりも無いけど。
969デフォルトの名無しさん:2011/08/12(金) 17:26:50.13
>>962
最終的にもとのデータを変更するかどうかは関係ないでしょ
どっちにしてもビュー固有の表示状態、編集状態、選択状態は必要
970デフォルトの名無しさん:2011/08/12(金) 18:13:26.50
>>969
957本人?
971デフォルトの名無しさん:2011/08/12(金) 18:35:55.20
>>968
じゃあ、普通にオブジェクト間同士の関連を実装すればいいんちゃう?
getでどんなタイミングでもアクセスしちゃえるように作るのをMVCは正当化してないよねぇ?
MVC出した人はちょっと何がいいたいのかわからないって結論になっちゃったんじゃない?
このスレ的には
972デフォルトの名無しさん:2011/08/12(金) 18:52:56.52
だからgetあったらレースコンディション発生ってどういう理屈だよ
アホ過ぎるだろ
973デフォルトの名無しさん:2011/08/12(金) 19:17:42.68
ビューがモデルの属性X1, ... Xnを表示でき、かつそれらを
どう組み合わせて表示するかはユーザが実行中に選べるとする
(例えばX2, X4, X6, ... だけ表示する等)

このとき、getterを使う方法とObserverパターンで
各々どういうコードになるの?
974デフォルトの名無しさん:2011/08/12(金) 20:12:34.58
>>972
だってそれって呼ぶ側が注意しないといけないんでしょう?
しかるべき箇所でキチンとイベント決めてまとめるべきじゃないの?
975デフォルトの名無しさん:2011/08/12(金) 20:35:00.49
>>956
ttp://ideone.com/plain/4qsIS
MvcTest.javaという名前で保存したらそのままコンパイルできます。
976デフォルトの名無しさん:2011/08/12(金) 20:37:33.71
977デフォルトの名無しさん:2011/08/12(金) 20:57:41.60
>>974
ビューのメソッド(内部でモデルからゲッツしてる)も全部イベントとして
コントローラ経由で起動すればいいんじゃないの?
978デフォルトの名無しさん:2011/08/12(金) 21:58:49.95
まあ、そうだとしてもそのイベント名がgetじゃダメだよね
979デフォルトの名無しさん:2011/08/12(金) 22:13:45.96
もうgetter派には触れるなって。ヤツらコボラーと同じで頭が固まってんだから。
getter無しで一通りプログラムを組んだこともないし、試しに組んでみようとしようもしない。
getter無しでどう組めるか想像もできないから妄想だけで否定だけしてる。
相手するだけ無駄。
980デフォルトの名無しさん:2011/08/12(金) 22:16:41.34
>979
頭が固いのはお前では?

まず、なぜGUIに限って
getterなしにこだわるのか
その理由を答えてほしい。
981デフォルトの名無しさん:2011/08/12(金) 22:23:23.86
>>979
ブロードキャスター君、じゃなかったナローキャスター君チーッスwww
982デフォルトの名無しさん:2011/08/12(金) 22:28:20.74
まあ、getter無しで組める、というだけで
getter禁止を正当化する理由になると思うほどの低能は
相手するだけ無駄だよな。
983デフォルトの名無しさん:2011/08/12(金) 22:36:43.71
モデルに全データ/処理を突っ込む
古くさーいMVCを未だに信仰してる人に
頭固いとか言われたくないですwww
984デフォルトの名無しさん:2011/08/12(金) 22:56:09.50
副作用無くてもモナドがあれば組めるから
副作用使うの禁止、のほうが納得がいくレベル
985デフォルトの名無しさん:2011/08/12(金) 23:00:39.42
言われたくないとか言われたいとかは所詮主観だからな
986デフォルトの名無しさん:2011/08/12(金) 23:15:45.01
>>971
一応援護しとくと、getterを排除しとくメリットは、MVCやブロードキャスティングに利用することより、
オブジェクト自身の判断で値の渡し方を判断するって事が大きい。
object1.setValue(object2.getValue());なんて呼び出しじゃ、この値の渡し方を判断してるのは、
object1でもobject2でもない。例えば、object1.toValue(object2);と渡せるようにしてやったとすると、
値の渡し方を判断するのは、object1になる。object1は、object2が持ってるメソッドの中で、
今の自分の状態で最も適切に渡せるものを選んで渡すことができる。
987デフォルトの名無しさん:2011/08/12(金) 23:16:48.80
モナドって外から見れば副作用そのものじゃん
988デフォルトの名無しさん:2011/08/12(金) 23:17:05.86
オブジェクト自身の判断で値の取得方法も判断したいわあ
989デフォルトの名無しさん:2011/08/12(金) 23:25:27.94
>>986
うん。それはgetterを使わない理由であって
getterを排除する理由じゃないね。

じゃ、次。
990デフォルトの名無しさん:2011/08/12(金) 23:27:23.77
>object1.toValue(object2);

で、toValueの中でgetter使うんでしょw
991デフォルトの名無しさん:2011/08/12(金) 23:29:40.20
view.reAcquisition(model) って呼び出しだと、値の受け取りを判断するのはviewになる
reAcquisitionの中でviewはmodelが持ってるgetterの中で
今の自分の状態で最も適切に受け取れるものを選んで受け取ることができる
992デフォルトの名無しさん:2011/08/12(金) 23:30:53.88
>>986
> object1.toValue(object2);と渡せるようにしてやったとすると、

それをやるとオブジェクト間の依存度が強まることになる。
いったいobject1はobject2の何を必要としているの?

object1は大した情報を必要としていないのに、
object2を必要としてしまう。

toValueが必要とする値をobject2の型ではなく、インターフェースにしておけば、
必要なのは「そのインターフェース」と明確に最小限に
することもできるが、そんなことをするとインターフェースが多くなりすぎる。

それが例え型がない言語であったとしても、結局はなんの関数を使うのかを
インターフェースの代わりにドキュメントにまとめなきゃいけないので
結局は同じこと。
993デフォルトの名無しさん:2011/08/12(金) 23:34:52.29
>>991
> view.reAcquisition(model) って呼び出しだと、値の受け取りを判断するのはviewになる

それは、modelという”値” を渡しているだけ。
値が単純な値ではなく、複雑な構造の値になっているだけ。
結局値を渡しているのはコントローラ
994デフォルトの名無しさん:2011/08/12(金) 23:35:20.66
>>990
使う必要ないだろ。なんの"為"に使うんだよ。なんの"意味"があるんだよ。
入れる余地なんざないだろ。

//object1が、内部で文字列として持っている場合
void toValue(Numeric target)
{
       target.convertFrom( "100", 10 );
}

//object1が内部で整数として持っている場合
void toValue(Numeric target)
{
       target.convertFrom( 10 );
}
995デフォルトの名無しさん:2011/08/12(金) 23:36:59.00
>>993
object1.toValue(object2) もobject1にobject2を渡してるだけですね
馬鹿じゃね?www
996デフォルトの名無しさん:2011/08/12(金) 23:38:14.77
>>986
>>991
こんだけパラレルに書かれると分かり易いな
997デフォルトの名無しさん:2011/08/12(金) 23:38:23.89
>>994
その関数に何の意味があるの?

オブジェクトが内部で整数として持っている場合に、
整数で取り出すとき、わざわざconvertって名前の関数をつけるの?

それってさ、getterの名前を変えただけじゃね?
998デフォルトの名無しさん:2011/08/12(金) 23:38:31.11
>>992
インターフェースが増える事になんの問題が?
そんなんだったらMVCだろうが、MVVMだろうが、MVPだろうが満足に書けんだろ。
999デフォルトの名無しさん:2011/08/12(金) 23:39:45.83
>>998
引数に渡すときの、最小のインターフェースが
数値型とかじゃねーの?
1000デフォルトの名無しさん:2011/08/12(金) 23:39:56.53
>>701でFA
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。