2009-04-18 15 views
1

クラスを入れ子にしたときに得られる利点を探し求めています。これを行う方法については多くの例がありますが、別のクラス内でクラスを宣言する理由については何も見つかりません。私は新しく到着した「コード・コンプリート」に相談しましたが、そこには言及もありませんでした。私は読むのが難しいという欠点があるのがわかります。入れ子クラスにはどのような理由がありますか

+0

この質問は言語に依存しないものにすることができますか? – dfa

答えて

11

通常、ネストされたクラスはそのコンテナクラスの機能をサポートするためだけに存在し、単独では実行可能ではありません。例えば、メインクラスのコンストラクタを管理しやすくするために、より多くの数の初期化パラメータを収集することができます。メインクラスをサポートする特殊なコレクションを継承することもできます。

意味的には、別のクラスとの違いはありませんが、ネストはクラスを単独で使用しないという明確なメッセージを送信します。

+1

"[...]しかし、ネスティングはクラスが意味を持たないという明確なメッセージを送信します。"私が思うように重要なポイントです。 +1! – Gregor

0

親クラスにいくつかのモデルが必要ですが、それ以外のクラスはすべてではありません。内部表現/データのためのヘルパー。

0

私はたいていプライベートと宣言していますので、外部クラスの内部でのみ必要な機能に使用でき、不要な補助クラスの名前空間をきれいに保つことができます。

0

私の見解では、ネストクラスは必須ではありません。私は通常、小さなオブジェクトの場合にのみクラスをネストし、特定のクラスにのみ関連します。

2

入れ子になったクラスを作って終わるいくつかの設計上の決定があります

  • 使用すると、2つのクラス間のより明確な関係を作りたいです。 a。名前が同じ名前空間内の2つのクラスのコンテキストサービングクラスで囲まれたトップレベルのネストしたクラスとして
  • コンテキスト依存クラスが
  • 「これらの事がtogheter行く」この依存関係が明確になることをより明示的である名前空間の汚染
  • を回避します
  • は、ソースファイルの数を減らす

ので、入れ子になったクラスの背後にある2つの原則があります。依存より良い組織が

0

外部クラスの実装に関わる概念をモデル化するためにネストされたクラスを使用するかもしれませんが、他のコンテキストでネストされたクラスを使用することは意味を持たないように、ネストされたクラスは、その公開APIの一部ではない可視性を持ち、外部クラスの詳細に明示的に依存することがあります。

一般的なパターンは、ネストされたクラスがパブリックインターフェイスを実装し、その外部クラスが戻り型がパブリックインターフェイスであるメソッドを介してネストされたクラスのインスタンスを公開することです。反復子パターンはこれの一例です。

関連する問題