8.2.5.1 类名中是否有形容词
如果存在“形容词(的)名词”这样的类名,例如“待支付(的)订单”、“合适(的)会议室”,可以先把形容词从类名移除,转成类的一个状态属性。很多时候形容词和名词之间没有“的”,也要能识别出来。
图8-55 移除形容词为状态属性
状态属性只是临时的建模产物。在后续的建模步骤中,状态属性中包含的知识会放到更合理的位置。
★“名词的名词”
有时候,名词前面的修饰词可能是名词。例如,“员工的部门”中的“员工”是名词。如果出现这样的类名,那不是什么状态属性,而是在识别类时没有识别出该有的“员工”和“部门”类。
有一些用语比较模糊,要注意理清楚真正的含义,并用更严谨的用语来表达。
例如,“会员订单”,看起来和“员工的部门”相似。经过进一步调研发现,其真实意思不是“某个会员所下的订单”,而是“下单者身份是会员的订单”。此时,“下单者身份是会员”就成了修饰“订单”的形容词,那么可以从类名删除“会员”,把“下单者身份是会员”作为“订单”的一个状态属性。当然,这个状态属性的计算可能也是通过“订单”和“会员”的关联来达到的。
图8-56 名词前面的名词
碰到类似的含糊用语,可以用以下方法辨别:
形容词修饰名词,相当于在该名词所代表概念的实例全集中取一个子集,它应该存在一个补集,二者的并集等于此概念的实例全集。
例如,“待支付订单”相当于在在订单全集中取一个子集,同时还应该存在“非待支付(已支付)订单”——如果不存在“非待支付订单”,划分出“待支付订单”也就没有意义了。“待支付订单”和“非待支付订单”实例集的并集即为订单实例的全集。
而“员工的部门”则不同,存在补集“非员工的部门”吗?
移除形容词的限度
图8-55中,“合适会议室”缩减为“会议室”,但“会议室”也可以看作“会议的室”,是否需要再缩减为“室(房间)”?
这要看系统所关注核心域知识的范围。
如果做一个“会议室管理系统”,关注到“会议室”就可以了;如果做一个“物业管理系统”,合适的类可能是“房间(室)”,“作为会议室使用”可以暂时作为“房间”的状态属性,后续步骤在处理状态属性时,可能会添加“用途”类,“会议室”是用途的一个实例。