【问题标题】:Conceptualization: generalization or not?概念化:泛化与否?
【发布时间】:2014-05-26 05:49:52
【问题描述】:
我正在为一个应用程序建模,它可以让用户寻找房地产。因此,它将成为一个网站,用户可以在其中查找房屋、公寓、城堡、场地、商店、停车场、办公室的出租和销售信息。据此,我在类图中犹豫不决。我应该从类 RealEstateProperty 中概括所有类型的房地产,还是应该只将其关联到一个 TypeOfRealEstate 类,知道例如“Ground”类型也可以作为房地产的基础房屋或城堡之类的财产。停车场也可以是房地产,也可以是房屋的停车场。
任何人都知道最好的方法是什么?提前致谢。
【问题讨论】:
标签:
uml
modeling
generalization
【解决方案1】:
这取决于您的系统必须实现的不同房地产的功能。类的特性包括属性、方法和关联。
如果您所有的潜在房地产都具有相同的特征,例如 ID、类型、价格、日期和负责的代理,您无需进一步区分它们,而不是关联类型将完成工作。将 RealEstateType 建模为 Enum(甚至类,如果您希望添加新类型)并将其关联到单个 RealEstate 类。
如果不同的 RealEstates,在另一个极端,需要具有不同的特性,则需要从基本抽象类继承这些特性。例如,地面有一个属性“面积”,而建筑物有一个“楼层数”。甚至方法也可以不同,或关联。
按照您的示例,您希望将 Ground 链接到 House。这在第二个版本中更清晰 - 只是 Ground 和 House 类之间的关联。在一类版本中,您必须将 RealEstate 与其自身链接并添加空间限制(非常“丑陋”的设计)。
总而言之,尝试考虑不同房地产的特征,并根据它们的差异制定您的房地产层次结构。
您最终可以得到一个班级或几十个班级。 :) 尽量保持这种层次结构尽可能简单(更少的类),但足以清楚地标记它们的不同特征。