トップページ⇒tech
1001コメント438KB

-OOP限定-プログラム設計相談室

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2005/09/24(土) 16:35:59
全部publicでいいじゃん!ってならないようにするスレです。
0302デフォルトの名無しさん2008/12/06(土) 06:03:41
エントリーポイントを増やすのが目的なんだろうけど、
うざったいってのはよく分かる。

IService ← テンプレート・メソッド パターン
↑
AbstractLogic ← テンプレート・メソッド パターン
↑
DomainLogic

としてBaseCollectとやらはコンポジションでもっとけと。
0303デフォルトの名無しさん2008/12/06(土) 09:36:21
問題ない。次
0304デフォルトの名無しさん2008/12/06(土) 19:23:37
IService はインターフェースで Run メソッドが定義されてる。

クライアントは、
DomainLogic dl = new DomainLogic();
dl.Run();

あれ?スーパークラス使わないの?
IService はどうした?
IService は?

カスが
0305デフォルトの名無しさん2008/12/06(土) 19:26:08
>>304 は >>300 の続きね
0306デフォルトの名無しさん2008/12/06(土) 19:33:02
で、お前ならどうしたいのよ
0307デフォルトの名無しさん2008/12/06(土) 19:36:49
黙れカスが
0308デフォルトの名無しさん2008/12/06(土) 19:48:28
で、お前ならどうしたいのよ
0309デフォルトの名無しさん2009/01/25(日) 05:15:15
>>1
> 全部publicでいいじゃん!ってならないようにするスレです。

あーあorz
プログラミングまだまだ初心者で、C#勉強している途中だけど、
このスレ開いて、>>1を読んでしまった・・・。忘れようとしても忘れられない。

意識しないようにすると意識してします。

将来プログラマになった際、仕事中「全部publicでいいじゃん」というレスが頭に思い浮かんで、
忘れよう忘れようとしても逆に頭にこびりついて、何かとんでもないミスをして入社早々首になりそう・・・。

逆に、記憶に逆らって、全部privateにしなきゃと意識するとコーディングが全然遅々として進まなかったり。

スレ開かなきゃ良かった・・・。
0310デフォルトの名無しさん2009/01/25(日) 06:31:57
クラスを作らなければpublicもprivateも迷う必要は無いのだよ。
0311デフォルトの名無しさん2009/01/25(日) 13:12:03
クラスベースのOOPLしか触ったことがないのですね
0312デフォルトの名無しさん2009/01/25(日) 13:16:53
メンバ変数はprivateかprotectedが基本
メンバ関数はpublicが基本
0313デフォルトの名無しさん2009/01/26(月) 19:49:32
>忘れよう忘れようとしても逆に頭にこびりついて、何かとんでもないミスをして入社早々首になりそう・・・。

そんな性格の人はこの職業向いてないよ。
このスレのおかげで早めに気づいてよかったね。
0314デフォルトの名無しさん2009/01/26(月) 22:33:06
それは性格ではない
0315デフォルトの名無しさん2009/01/27(火) 01:07:17
なる前からそんな心配してるのは性格じゃね?
0316デフォルトの名無しさん2009/01/27(火) 01:54:17
人間の性質じゃないか!
0317デフォルトの名無しさん2009/01/27(火) 01:57:43
>全部publicでいいじゃん!ってならないようにする

こんなOOPで当たり前の常識をすぐ理解できない時点で向いてない
0318デフォルトの名無しさん2009/01/27(火) 12:47:27
OOPで当たり前の常識のアクセス修飾子の存在を理解で来ていているのに
OOPで当たり前の常識を理解できていないとな
0319デフォルトの名無しさん2009/01/27(火) 19:08:50
メソッドの一部をpublicにしなかったとしてfriendがある時必要となったとする。おまいは
その時どうしてんだ?
friendにすぐにするのか。一瞬くらいは正しかったのか?って考えるだろう
0320デフォルトの名無しさん2009/01/27(火) 23:36:38
てかfriendとかいらね
publicかprivateで十分

早くpublic(in hoge::piyo, child)とか修飾できるようにならないかなー
0321デフォルトの名無しさん2009/01/30(金) 16:31:51
>>319
クラスライブラリなら考えると思う。
実務の仕様変更で必要となったのならなにも憂慮することなく
すぐfriendにする。

最近C++やってないなあ。
Javaの同じパッケージのクラスからだけ呼べるデフォルトスコープは
わかりにくいよね。修飾子で明示的にして欲しい。
0322デフォルトの名無しさん2009/02/27(金) 01:47:05
interfaceベースの設計は冗長だが作りやすいな。
迷うとinterface(規格)→abstract(ひな形)→具体クラスってのが多い。
0323デフォルトの名無しさん2009/03/15(日) 01:29:18
ちょw
0324デフォルトの名無しさん2009/04/08(水) 03:15:33
あるある
0325デフォルトの名無しさん2009/04/08(水) 08:05:11
>>322
インタフェース指向設計にも載ってるやり方だけど、
結局、Java系OOPLの現状の中での最適解って感じで
果たしてそうあるべきものかと問われると
はなはだ疑問に感じる部分だよなぁ。
0326デフォルトの名無しさん2009/05/11(月) 23:31:23
相互依存は悪!って思ってるんだけど、(C++とかだと互いにincludeしあってとかで)
今考えてるもので、なんか結局相互依存しちゃうクラス関係orz。
今考えてるのは、ネットワークプログラミングで、

コネクションを表すclass Connectionがあって、これをベースに
class ServerConnection, class ClientConnectionがある。
で、こいつらを一つにまとめておくコンテナで、
class ConnectionManager;
というものを作った。

最初に、
ConnectionManager ConnMgmt;
ServerConnection SConn( ConnMgmt );
とかやって、
//コンストラクタで自分を登録
ServerConnection::ServerConnection( ConnMgmt ){ ConnMgmt.Add( this ); }

void ServerConnection::Accept(){
 //ここで、サーバーソケットに接続してきたクライアント用のインスタンスを生成
 ClientConnection *CConn = new ClientConnection( Socket_.Accept() );
 //で、このクライアントコネクションをコネクションマネージャに登録するのに、
ConnMgmt_.Add( CConn );
}

みたいな、ConnectionManager <-> Connectionで相互依存っぽい気がする。
何か解決方法はないっすかね?
0327デフォルトの名無しさん2009/05/12(火) 06:19:46
>>326
徹夜明けでjavaerの俺からすると
とりあえず
・ServerConnectionはそもそもConnectionなのか
・ServerConnectionの作成はServerConnectionFactoryにしたほうがよさそう
あとManagerなのになぜにMgmtなのか不思議
03283262009/05/12(火) 20:53:27
徹夜明け乙でレスってくれてうれしいんだけど、
聞きたいのはそこじゃないw
0329デフォルトの名無しさん2009/05/13(水) 02:21:49
そのサンプルだけから判断するとServer側はServerSocketでConnectionじゃない。
ServerSocketとClientConnectionはManagerを知らなくていいんじゃね?
利用側のクラスをConnectionEventListenerの派生にして
ServerSocket.AddListener(this);
EventLisner#doEvent()の中でMgmt.Add(ClientConnection);
Managerはシングルトン
0330デフォルトの名無しさん2009/05/20(水) 00:32:18
PCからマイコンを経由して表示機(7セグLEDやLCD等)を制御します
表示機クラスとして抽象化するとして、表示関数のインターフェイスについて質問があります

実際に使用する表示機は
7セグLEDなら1行4文字
LCDならサイズによって異なりますがY行X文字

これを踏まえると
void myPrintf(int X , int Y , const char str);
という形にして1行しか表示できないユニットに関してはYを無視する形にすればいいのかなと考えます。

しかし、今後カラーLCDを使用したり反転・点滅等のエフェクトを追加しようとすると
void myPrintf(int X , int Y , const char str , int color , int effect);
と、7セグLEDのような単純な表示機では使わないような引数がどんどん増えていってしまいます。

しかもインターフェイスに変更を加えることになってしまうのであまり宜しくないようにも思います。

こういう場合どういう風に設計すれば良いのか、今後の変更に備えるための工夫等はどうしたらよいでしょうか?
0331デフォルトの名無しさん2009/05/20(水) 12:16:58
俺が(javaとかc#とかC++のテンプレのよーな機能のある言語で)作ると

java:
// 表示機
// L: "1行4文字"や"Y行X文字"といった機器ごとの表示位置の表現
abstract class Display<L extends Location> {
  public abstract void print(L location, char ch);
}
// 表示位置の表現(ただのmarker interface)
interface Location { }

// 7セグLED表示機
final class LED7Segment extends Display<Location7Segment> {
  public void print(Location7Segment location, ch) { location.getX()とgetY()をつかってchを表示 }
}
final class Location7Segment implements Location {
  public Location7Segment(int x, int y) {...}
  public void getX() {...}
  public void getY() {...}
}

// LCD->にたよーなもの.

Locationは"表示の形式"ということで,もし,Windowsのウィンドウに表示するような場合などはFormatみたいな形でまとめるのもいいかも
0332デフォルトの名無しさん2009/05/20(水) 12:30:50
引数を増やすんじゃなくて、コマンドを増やすべきだよな
0333デフォルトの名無しさん2009/05/20(水) 13:01:06
>>330
ああ,エフェクト追加のために今後のことを考えて設計か
「エフェクト」ってのがどういう性質なのか決めないと何も始まらないので,
そっからはじめたら?
0334デフォルトの名無しさん2009/05/20(水) 17:07:45
テンプレートって良くわからんよなぁ
>>331なんておそらく難しいことはしてないと思うのだが
じゃあ、テンプレートはどういうときに使えるのか、どう実装するのか?っていわれたら自分なら全力で逃げたい
0335デフォルトの名無しさん2009/05/22(金) 11:46:25
最近MVCパターンに変わってPACって言うのを良く聞くけど

P→V+C
C→M+α
A→データ層?

と言うように見えるけどPACのCに相当する部分がMVCのMに専念出来ないような
+αの分、不必要な作業が肥大化していきそうに思えるのは気のせいだろうか?
0336デフォルトの名無しさん2009/05/22(金) 13:18:51
>>335
まさかもう俺の考え付くソフトウェア構築モデルがあるとはしたなかった
ありがとん
0337デフォルトの名無しさん2009/05/22(金) 13:42:33
Observerパターン っていうのがいまいち解らない

よくModelとViewの関係で例えられるけど
subjectからobserverにメッセージを送るシステムの骨組みだけ提供するから
あとはそれを継承してModelとViewで好き勝手やってくれってこと?
0338デフォルトの名無しさん2009/05/22(金) 21:03:48
observerは単なるコールバックの仕組みだ
レベルが違う話をごっちゃにしたらダメ
0339デフォルトの名無しさん2009/05/22(金) 21:14:27
>>326
管理責任はManagerにあるんだから、
Managerにジェネレータやファクトリーの機能を持たせればOKだと思われ。
0340デフォルトの名無しさん2009/05/23(土) 01:14:21
>>335,336
PACなんて10年前からあんだろ
RADツールで作成するときとか既成のボタンとか流用するから
VとCは不可分じゃね?それにMVCのMは大ざっぱ過ぎね?
機能毎にグループ分けしてグループ間の行き来はレイヤーわけようぜ
って感じじゃなかったかな。

Web開発ならVとCはキレイに分けられるし、今はMVCつっても
サービス層、Dao層とかわかれてるしグループ分けならnamespace
(Javaならpackage)で行ってるし、PACがMVCの次の世代っていう
考え方は今は当てはまらないと思うよ。
0341デフォルトの名無しさん2009/05/23(土) 02:23:25
>>340
10年前は開発なんてしてなかった
0342デフォルトの名無しさん2009/05/24(日) 02:14:28
MVCモデル自体がWEBのUI層の設計がやりにくく、
ロジック層との融合不可能な環境がでかくなった時代背景に
注目されたモデルだからね。

Delphi位に柔軟性があるRAD環境ではそれほどレイヤ間の分離を
意識しなくてよかったのはあるやね。
UIの強化、DB項目の追加、機能追加等に備えて無意識にPAC(って言うの?)的な
分けはやっていた人達も少なくはなかったけど。

VBだと何故か殆ど全部不可分だったけどw
0343デフォルトの名無しさん2009/05/25(月) 02:14:10
MVCは1980年代のWebアプリなんてなかった時代にsmalltalkで発達して、
VB/Delphiのフォームにポトペタのコンポーネント思考には会わなかったけど
WebではしっくりくるからWebサービスの発達と共に浸透したんだよ。
まあ確かにそれまではUIとロジック一緒にしても保守できる程度の規模の
システムでしかなかったという見方は出来るけど。

Delphiが強力ったって、Delphiから入って仕事覚えた人はあんまりVBerと
変わらないっていう印象だなあ。フォームにポトペタで設計なんか考えない感じ。
クラス派生時に可視性を下げることしかできないっていうルールが
多態性とか検討するのを阻害するしね。Delphiの場合はTAbstractButtonみたいな
ベースで考え得る機能をできるだけ網羅して、具象化するときに機能制限して使う。
コンポーネントのひな形を全部Delphi側で用意して開発者は利用するだけという考えなら
確かにクラス数が少なくていいけど、柔軟性にかけるよね。

あーなんか言葉足らずでうまく伝わらない気がするな。ちゃんと書くと長いからいいや。
0344デフォルトの名無しさん2009/06/04(木) 22:55:00
>>343
GUIのためのMVCと、WebのMVCは全然別ものだよ。
一緒なのは名前だけ。
0345tor.rootkit.de2009/08/17(月) 17:57:50
自動焼人 ★ = 自動保守 ◆KAWORUKOFI = 自動保守#K9K?_D[L

名言集 その4
『俺、100人規模の集団サイバーテロの主犯だったこともあるんだぜ』

http://yutori7.2ch.net/test/read.cgi/news4vip/1249830540/ のID:PVAf+dux0 = 自動焼人 ★

> 965 :以下、名無しにかわりましてVIPがお送りします [sage] :2009/08/10(月) 00:02:09.35 ID:PVAf+dux0
> まぁ何だ。
> 俺の過去の経歴に比べたら、割れ厨なんて鼻くそレベルなんだけどなw
> 100人規模の集団サイバーテロの主犯とか、いろいろとな。


----------------------------------------------
この自動焼人 ★メールマガジンの配信停止をご希望される方は
http://qb5.2ch.net/test/read.cgi/sec2chd/1250169591/
にて自動焼人 ★までご連絡ください
0346デフォルトの名無しさん2009/08/17(月) 20:31:45
コピペ君って馬鹿だな、まで読んだ。
0347デフォルトの名無しさん2010/03/05(金) 10:13:16
質問させてください。
EntryとEntryManagerという二つのクラスがあって、
EntryManagerが、複数存在するEntryインスタンスを生成、管理してます。
Entryが、他のEntryにアクセスできるようにしたいのですが、
そうなると、EntryManager<->Entryというお互いに依存関係ができてしまうと思います。
これは悪い設計でしょうか?
また、このような場合のためのデザインパターンなどはありますか?
0348デフォルトの名無しさん2010/03/05(金) 10:25:56
> Entryが、他のEntryにアクセスできるようにしたいのですが、

このような場合にインスタンスが、他の兄弟インスタンスや型を知るような依存はしたくない。
多数あるインスタンスが、多対多の関係になることは避けたい。

> そうなると、EntryManager<->Entryというお互いに依存関係ができてしまうと思います。

GoFのMediatorパターンでは、相互作用はMediatorに記述され、
ColleagueはMediatorとだけやり取りして、他のColleagueへは直接関与しない。
少なくとも一対多の関係にしておくことができる。
0349デフォルトの名無しさん2010/04/12(月) 05:36:42
>>343
経験というかバックグラウンドがちゃんとあるひとなら伝わるけど
馬鹿に伝えるのは難しいよね
0350デフォルトの名無しさん2010/04/12(月) 16:07:49
Delphiの強力(協力)な所は一応オープンソースな所かと。
0351デフォルトの名無しさん2010/04/29(木) 21:41:13
相談です
http://apr.2chan.net/jun/b/src/1272544702094.jpg
画像にあるUML図のように
AとB
どちらでプログラムを組むのがいいのでしょうか?
利点などあったら提示してくれると助かります
0352デフォルトの名無しさん2010/04/30(金) 00:25:14
何がしたいのかを先に言え
0353デフォルトの名無しさん2010/04/30(金) 02:56:56
Bが正しいかどうかは解らないけど、Aはおかしく見えるね。
03543512010/04/30(金) 18:37:48
色んなWebサイトの解析を行いたいです
AはMFCを参考に
Bはjavaを参考に考えました

Webサイトの解析と、それを元に一定の処理を行うというものです
作っている段階でバージョンアップ(修正)もでてくると予想してます
0355デフォルトの名無しさん2010/04/30(金) 22:44:52
IniFileという具体的なクラスをDataやOperationみたいな抽象的なクラスが
継承しているのは不自然に感じるけど、MFCにそんな構造あったっけ?

もしかして、継承と関連の記号を取り違えていないか?
0356デフォルトの名無しさん2010/05/01(土) 11:33:10
Cマガの人はBの設計を
「構造体に毛のはえた設計」と言ってました
Cマガは現在廃刊になってます
0357デフォルトの名無しさん2010/05/04(火) 15:50:23
社員研修での課題「社員管理DBのサーバークライアントプログラム」

DBーサーバーークライアントー表示

こういうのをクラス図として提出されてどうしようかと悩んだ
私の説明が端折り過ぎたのが原因だろうがこれはあんまりだ
0358デフォルトの名無しさん2010/05/04(火) 18:04:52
>>357
べつに いいん・・・
よくねーよw
0359デフォルトの名無しさん2010/05/04(火) 19:48:07
ガンダムOO(オブジェクト指向)
0360デフォルトの名無しさん2010/05/08(土) 15:21:19
DB -> なんて読む?
オレは最初データベースと読んでいたが、
なんとアニメの欄にDBの文字が・・・

まさかデータベースのアニメ(!キバヤシ風)

と思ってクリックしたらドラゴンボールだよ!
0361デフォルトの名無しさん2010/05/08(土) 16:29:01
うんうん、自分だけにしか分からない面白いことってあるよね(にっこり
0362デフォルトの名無しさん2010/05/23(日) 04:06:32
あれだよね
野球ってbatファイル
ピッチャーが開始するまで誰も動かないor動けない
んで、みんなピッチャーに依存してる
ヒットも守備の重箱の隅をつつくようなところに打たないとでない

でオブジェクト指向はサッカー
監督がこういうふうに試合をしてくれって指示だけだし
あとはオブジェクトがメッセージ(ボール)をつないで試合を展開する感じ
0363デフォルトの名無しさん2010/05/23(日) 05:54:51
>>362
その辺にしておかないと大変なことになってる
0364デフォルトの名無しさん2010/05/23(日) 06:19:18
冗談は国会の中だけにしておけ
0365デフォルトの名無しさん2010/06/03(木) 17:35:34
5月末までには・・・
ぁぅあんっぅあああああーーーーーーーーーー
かい〜いぃぃいいい〜〜〜さああああん
0366デフォルトの名無しさん2010/06/03(木) 23:24:58
946 名無しさん@十周年 [] 2010/06/03(木) 20:19:17 ID:LHeT8X150 Be:

    もう…おかしいでしょ。どう考えても何をねつ造しても事実はこうなのですから
    ↓

    http://www.nicovideo.jp/watch/sm10915996
    キラー小里議員、赤松広隆君不信任決議案で爆弾発言!
    平成22年5月31日衆議院本会議農林水産大臣赤松広隆君不信任決議案(174国会決9賛成の討論で壇上に上がった小里泰弘議員から、爆弾発言!マスコミは一切伝えてません。

    http://www.nicovideo.jp/watch/sm10815799
    “独裁者”小沢一郎とフジテレビ「黒い密約」疑惑を追求�A*拡散希望
0367デフォルトの名無しさん2010/06/12(土) 19:21:14
OOPで組んでると少しは逆アセンブラ対策になる?
0368デフォルトの名無しさん2010/06/12(土) 19:52:16
>>367 はぁ?
0369デフォルトの名無しさん2010/06/12(土) 21:22:47
>>368
おい!
0370デフォルトの名無しさん2010/09/05(日) 13:57:48
全部privateで良いじゃん!
0371デフォルトの名無しさん2010/09/28(火) 13:24:46
デザインパターンとバッドノウハウって何が違うの?
0372デフォルトの名無しさん2010/09/28(火) 13:32:36
>>371
場当たり的に逃げ道を探して回避する(根本的な問題は完治しない)のがバッドノウハウ
本質的な部分を見直して考慮された見通しの良い(とされている)考え方がデザパタ
0373デフォルトの名無しさん2010/09/29(水) 02:57:51
>>372
なるほど

ところでデザパタに対して含みを持たせてるのは、
本質的に解決できていないものも含まれていると感じているから?
だとすると、問題を解決する方法として見たとき、バットノウハウとデザパタの境界は
案外曖昧だったりするのでしょうか

違う側面からの解説もキボンヌ
0374デフォルトの名無しさん2010/09/29(水) 03:07:38
デザパタに含まれないものがバッドノウハウ
0375デフォルトの名無しさん2010/09/29(水) 06:20:55
バッドノウハウは「緊急時のおけるやむをえない場合のパターン」とも考えられる。
それが急を要しない状況で使われたとき「バッドノウハウ」と呼ばれる気がする。
0376デフォルトの名無しさん2010/09/29(水) 07:12:03
バッドノウハウって具体的にどんなの?
0377デフォルトの名無しさん2010/09/29(水) 08:11:02
ブラウザのバグを回避するために特定のブラウザの時だけ本来すべきではない
スクリプト書いて対処したりとか、プログラムの美しさを損なうやつ。
0378デフォルトの名無しさん2010/09/29(水) 08:41:11
それって「●●パターン」って名乗るには恥ずかしすぎるな
0379デフォルトの名無しさん2010/09/29(水) 13:58:19
>>377
WEBプログラムのクライアントサイドこそバッドノウハウの宝庫だな。
あとはJavaのVMごとにあるバグの回避で実装変えたりとかな。
0380デフォルトの名無しさん2010/09/29(水) 14:24:03
>>379
>JavaのVMごとにあるバグの回避で実装変えたり

したことないなあ。どんなのあった?JVMにバグがある場合は
アップデートで乗り切ってるなウチは。tomcatのHttpSession#getSessionId()で
バージョンによってセッション切れの時の挙動が違って回避プログラム書いたけど
まさにバッドノウハウだよね。OOとも何の関係もない
0381デフォルトの名無しさん2010/09/29(水) 14:39:42
SUNのVMとWEBLOGICのVMで一部ちがったところがあったりな。
でも8年くらい前の話だ。
0382デフォルトの名無しさん2010/10/10(日) 00:44:37
MVCアーキテクチャの質問です。
例えば運動方程式を解いて物体の運動を視覚的に表示するプログラムを考えます。
DirectXやOpenGLのようなものは使わず、普通のウィンドウシステムの上で動かすとします。
このとき、フレームレートとか画面の大きさというような情報は誰が持つべきなのでしょうか?

Mがフレームレートの情報を持って、自分からイベントループにコールバックを登録する構造なら、
物体が自律的に運動するさまを自然に表現できますが、
反面、Mがウィンドウシステムに依存することになり、何か変な感じもします。
逆にこれをCが持つとすれば、Mは位置と運動量と時刻くらいしか持たないことになり、
ちょっとMの仕事が少なすぎる気がします。

画面の大きさに関しては、常識的にはVの領分でしょうが、現在の位置に加えて軌跡も表示したい場合、
どこかに画面と同じ大きさのビットマップを持つ必要が出てきます。これはMにあたるでしょう。
0383デフォルトの名無しさん2010/10/10(日) 20:10:55
仕事が多いとか少ないとかを分担の基準にするべきじゃない。
つか、ビットマップはVだろ…
いや軌跡をビットマップにプロットするモデルと、ビットマップを表示するビューに分ける、
とか考えられなくもないけど、そこまでするほどの例題とも思えない。
0384デフォルトの名無しさん2010/10/10(日) 23:48:35
>>382
Mに持たせるインターフェイスのデザインをどうするか、どんなものが好ましいのかにもよりますが、
VCペアが問い合わせてくる、ある時刻での物体の正確な位置を返す仕事であれば、Mの責務です。
0385デフォルトの名無しさん2010/10/11(月) 00:08:48
画像で返す必要があるのかってこと。
モデル側にあるってことは、交換可能な全てのモデルに位置を画像で返す機能をつけることになるが…。
数値だけ返して、画像への描画は別の部分が担当するのではまずいの?
0386デフォルトの名無しさん2010/10/11(月) 00:32:40
物体の運動に直接影響するものは全部モデルだろ
ウィンドウサイズなどの情報を抽象化するMを設ける
0387デフォルトの名無しさん2010/10/11(月) 02:16:40
多段MVCかPACにご興味のあるかたはいらっしゃいますか!!?
0388デフォルトの名無しさん2010/10/11(月) 10:22:43
>>382
Model(M)からは、軌跡の集まりを返すだけにし、その表現はPresentation Model(PM)から返すようにするってのは?

V <-- PM <-- M

PMが不要なプロパティを表示する時は、単に無視するか、透過的に扱うようにする。
03893822010/10/12(火) 21:36:29
>>388
軌跡が初等関数で書けるようなものであれば係数を求めて渡すだけですが、
そうでない場合、まさか全ての時刻での座標を覚えておくわけにもいきませんから、
ビットマップを埋めることで軌跡を「求める」ことになるでしょう。
もっと極端な例では、マンデルブロ集合のモデルは必然的に解像度の情報を持つことになります。
0390デフォルトの名無しさん2010/10/12(火) 21:38:48
いまやプログラミングはマルチパラダイムの世界なのに純粋なOOPが役に立つの?
0391デフォルトの名無しさん2010/10/13(水) 00:57:24
>>389
> まさか全ての時刻での座標を覚えておくわけにもいきませんから、

むしろ、保持しておいた方がいいと思うけどね。
オンメモりに乗らないくらいの巨大データなら、ファイルなり、DBなりに保存(キャッシュ)する。
または、間引いて保持する。

また、適当な間隔で間引かれたサンプリングデータをもとに、
オンデマンドで表示領域分のデータを計算すれば、全領域を保持する必要はなくなると思うよ。

この辺は、OOPとは関係ない実装の泥臭い部分になるけど。
0392デフォルトの名無しさん2010/10/13(水) 10:06:32
ビットマップにとっておいてる時点ですべての座標を記憶してるじゃん。
ビットマップの方がメモり喰うのわかってないの?
MVCのVがモニタだろうがプリンタだろうがMは影響を受けないように作るべきで、
どんなサイズでどういう風に表示するかはVが決める。表示内容はMだけど
見た目はVが決める。ビットマップで持ったらVで見た目決められないし
0393デフォルトの名無しさん2010/10/13(水) 19:39:58
>>392は>>391に対するレスか?

全ての座標とは、軌跡上の全ての座標を保持するという意味で書いたんだ。
軌跡以外の点までは保持する必要はないってことね。
例えば、放物線なら、放物線上の点の集まりのみを保持する。

うまく伝えられなくてゴメンね。
0394デフォルトの名無しさん2010/10/13(水) 19:50:14
>>393だとまだ誤解受けそうだから補足。

座標とは、UI上の座標ではなく、ある時刻の計算値のことね。

運動方程式なら、パラメーターを設定すれば、(時刻, X, Y, Z)の集合が計算できるので、その値を保持。

表示する際は、範囲と倍率を考慮して、UI座標に座標変換する。
0395デフォルトの名無しさん2010/10/14(木) 07:37:50
1024×768ドット16色のビットマップは384kb。3点のXY座標を単精度で持てば1時点あたり24バイト。1/30秒ごとに記録すると9分程度でビットマップの大きさを越えることになる。
0396デフォルトの名無しさん2010/10/14(木) 11:17:13
なんだか全く関係ないな
0397デフォルトの名無しさん2010/10/14(木) 23:04:15
データサイズうんぬん言ってる時点でOOと大分関係ないんだけど
最終的に1034x768のbmpに納めればいい情報ならshortのx,yの2点でいいし、
bmpで持つくらいなら1024x768のbooleanの配列で持った方がまだマシ。
同じだけの情報記録できてサイズが小さくてデータが利用しやすいから。
Viewの実装がなんだろうとModelのビジネスロジックは変わらない、
それがMVC。Mの時点で最終表示系を決めたらVの仕事はなんだよw
0398デフォルトの名無しさん2010/10/14(木) 23:11:25
boolean使うくらいならbyte使うだろ
扱いが面倒で記憶域の無駄遣い
0399デフォルトの名無しさん2010/10/15(金) 13:40:38
>扱いが面倒で記憶域の無駄遣い
おまえは何を言っているんだ?w
0400デフォルトの名無しさん2010/10/15(金) 20:28:50
booleanだったら「ビットマップと同じだけの情報」にはならないだろ
要求がはっきりしないけど、例えば同じ座標を通った回数を区別する必要がある場合はどうする?
その必要がないとしても、boolean使ったからってそれほど節約にはならないよ。1バイトなんだから。
そもそも、軌跡を描画するなら普通に考えてビットマップに描いていくのが効率がいいので
内部で二重にバッファ持つ意味がない
0401デフォルトの名無しさん2010/10/15(金) 20:59:43
>>400
UIで、スケール変更して、拡大表示するときは、どうするの?

ビットマップから切り出して、拡大表示させる?
ジャギーでるよ。

その都度、再計算させる?
再計算のコストが高かったら?
レスポンス悪くなるよ。

軌跡の計算結果をもつことは、メモリ効率を悪くしてるかもしれないけど、
最悪、拡大時は補間してレスポンスの悪化を防ぐことも一応可能よ。

ビットマップもジャギー出さずに、補間して拡大するアルゴリズムあるのかな?
■ このスレッドは過去ログ倉庫に格納されています