5年前wild7lifeと申します。件名の通りの質問になります。クラス設計初心者で以下のようなクラス設計はありなのか教えて頂きたいです。Deviceクラスが持つdefaultsize変数をAreaクラスの処理でも使用するのですが、その際、Areaクラスにもdefaultsize変数を持たせるべきなのか、引数で渡すべきなのか、一般的な考えだとどうなのでしょうか?それともAreaクラスにdefaultsize等各種変数を持たせておき、Deviceクラス側の処理ではareaクラス側から取得してくるべきなのでしょうか。分かりづらくて申し訳ありませんが、アドバイスを頂けると幸いです。5年前defaultsize変数が何なのか不明瞭です。defaultsize変数の値はどのように決まりますか。defaultSizeは不変性を持っていますか。DeviceがdefaultSizeを所持している必然性はありますか。DeviceとAreaの関係性が不明瞭です。携帯から失礼します、wild7lifeです。説明不足ですみません。イメージとしては大きな領域(この1番大きな単位をDeviceとしてます)があってその領域を4分割まで出来るといったものになります。分割単位も決まっていますが、分割しなくても可のため、分割後のサイズ等を持たせるつもりのAreaにdefaultSize、分割単位の変数を持たせるのもどうかなぁと考えてます。分割単位の値は外部からファイル読み込みで取得し、この値が変更されることはありません。分割単位とはなんですか?それぞれの型の役割と関係性がわからないと答えようがありません。肝心のdefaultSizeが何なのかもわかりません。※DeviceクラスのdefaultSize変数とその他変数によりsizeの値を求めますsizeの値を求めるのに、setですか?書き間違いでなければ、変ですね。defaultSizeを所持すべきなのは、defaultSizeを所持する必然性を持つクラスです。defaultSize」とした場合、不自然でないクラスです。それを決めるには、defaultSizeが何の値なのかがわからないと判断できません。繰り返しDeviceとAreaの関係を問うてるのは、それぞれのクラスの役割がわからないので、本当にDeviceがAreaを包含しているのが正しいのかどうか、から疑っているからです。最初の投稿を見る限り、AreaをDeviceが包含しています。これは正しいですか?私はそれぞれの役割を知らないので判断できないですから、これが正しいかご自身で判断して下さい。詳細にそれぞれの役割を説明して下さい。回2分割の場合Areaクラスを2つ持つ。n分割する場合Areaクラスはn個もつ。defaultSizeをどう持つべきなのかは、DeviceクラスとAreaクラスのサイズがどう関連するかによります。defaultSizeはプログラム起動時に表示するサイズのことなのであれば、Device、Areaそれぞれ独立して持ってもいいでしょう。なくてAreaのdefaultSizeはDeviceのdefaultSizeから常に計算するということであればDeviceでのみ持てばよいことになります。分割単位の値は外部からファイル読み込みで取得ということは、Deviceクラスで読み込んで、Areaクラスに分割単位の値をセットすればいいのでDeviceクラスでのみ持てばいい感じがしますが・・・ただしこれは一般的な考え方とは違うかもしれません。そもそもプログラムに一般的な解なんてありません。実装しやすいと思うのであればどんどん実装してください。5年前nullptrさん、へにっくすさんアドバイスありがとうございます。質問に対しての回答という形になりますが、もう少し詳しくまとめさせていただきました。defaultSizeはなにの値なのですか?Deviceのサイズですか?Areaのサイズですか?分割単位のサイズですか?A1)defaultSizeは分割する前のArea1つのサイズになります。Deviceはなにをするクラスですか?A2)複数のAreaが持てるデータを保持するクラスになります。Areaはなにをするクラスですか?A3)使用者が指定したデータ(現在はファイル名、とサイズを持つFile)を保持するクラスになります。DeviceとAreaはどういう関係なんですか?包括の関係になります。A4)Device自体にサイズを持たせるのではなくAreaに持たせようかと自分では考えてます。よって領域を分割していないときはAreaを1つ持つイメージです。分割単位とはなんですか?A5)Deviceが持てるAreaの分割する際の単位になります。100MBであれば120MBのAreaは作れないが300MBであれば可能といった感じになります。Q6)sizeの値を求めるのに、setですか?書き間違いでなければ、変ですね。A6)すみません、値を求めると書いているのにSetはないですね。せん何のプログラムかはっきりしませんが、おそらくdefaultSizeというのは幅や高さを持つものではなく、データのサイズなのですね。AreaやDeviceなどという名前から幾何学系かと思いました。ここも憶測になります。「何がしたいプログラムなのか」はっきりしていただけるとこちらの想像の手間が省けます。複数のAreaが持てるデータを保持するクラスになります。複数のエリアが持てるデータとはなんですか?A1)defaultSizeは分割する前のArea1つのサイズになります。全体のサイズということですね。部品をもう少し細かくして考えてみましょうか。Sizeクラスを作ってみたとします。ここでDataはあくまでもデータの最小単位を持っているだけに過ぎず、全体のサイズを知っているのは不自然です。Dataにはサイズとファイル名だけ持たせておけばいいのです。全体のサイズ(defaultSize)を保持していて、全体のサイズと分割単位から細かいデータを作成し、管理するクラスを、DataManagerとします。Dataを構築する際に、DataManager側でサイズを計算して、渡してあげればよい話です。今回は全体のサイズ(defaultSize)が変化しないとのことですから、構築の際に指定してあげれば良いだけの話かと思います。仮に変化するとしても、全体のサイズが変化した時にDevice側から再計算した値を渡せばいいだけだと思います。ここでのDataとAreaに違いはありますでしょうか。DataManagerはDeviceに値しませんか。体調を崩してしまい、返信が遅れてしまいました。申し訳ありませんでした。ここでのDataとAreaに違いはありますでしょうか。DataManagerはDeviceに値しませんか。Dataが複数のデータを持っているとすれば違いはありません。説明を読んだ感じでは、DataManagerはDeviceと考えて問題なさそうです。渡してあげる方針で設計をしてみようと思います。最後になりますが、数々の助言ありがとうございました。ミクプラは自由にリンクできます。