システムが実装しなければならないさまざまな RealEstates の機能によって異なります。クラスの機能には、属性、メソッド、および関連付けが含まれます。
潜在的なすべての不動産が同じ機能 (ID、タイプ、価格、日付、担当エージェントなど) を持っていて、それらをさらに区別する必要がない場合は、関連するタイプが機能します。RealEstateType を Enum (新しい型を追加する場合はクラス) としてモデル化し、単一の RealEstate クラスに関連付けます。
別の極端な例として、異なる RealEstates に異なる機能が必要な場合は、基本抽象クラスからそれらを継承する必要があります。たとえば、地面には「面積」という属性があり、建物には「階数」という属性があります。メソッドでさえ、異なる場合もあれば、関連付けが異なる場合もあります。
あなたの例に従って、地面を家にリンクしたいと思います。これは、2 番目のバージョンでははるかに明確になりました。Ground クラスと House クラスの間の関連付けだけです。1 クラス バージョンでは、RealEstate をそれ自体にリンクし、空間的な restrictopns (非常に「醜い」設計) を追加する必要があります。
要約すると、さまざまな RealEstates の機能について考え、それらの違いに基づいて RealEstate 階層を作成してみてください。
最終的には、単一のクラスまたは数十のクラスになる可能性があります。:) この階層をできるだけ単純に(クラスを減らして)維持するようにしてください。ただし、さまざまな機能を明確にマークするのに十分です。