8.2.4.6 命名所用的语言
这里说的不是编程语言,而是汉语、英语、日语……
给核心域元素命名,使用的语言应该首先考虑精确体现核心域内涵和方便开发团队思考和交流核心域知识。该用汉语就用汉语,该用英语就用英语,该用日语就用日语。
以前经常会考虑转换到编程语言时需要改名的问题。在设计工作流,如果我们使用的编程语言只能用英语命名类、属性、操作等——更严谨的说法应该是编译器广泛支持的字符集比较小,那么还需要一个对编程语言合法的名字。
建模工具例如EA,一般会提供别名(Alias),真实名称用编译器支持的字符集,再加一个别名用于显示。
随着时代的发展,编译器、DBMS等支持的字符集越来越大,上面提到的问题慢慢不再是问题。如果团队成员更熟悉汉语,那么在代码中使用汉语命名即可,省去蹩脚英语或者模糊的汉语拼音缩写(啥?你说“可以加注释嘛”?)给后续工作带来的麻烦。
其他如在文本编辑器中编码时切换输入法、版式不好看、中文标点符号等问题,这和特定编程语言的语法有关,如果能尽量在图形建模时表达核心域逻辑,生成尽可能多的编程语言文本,这方面的麻烦就会小很多。
以上所说仅是针对目标系统的核心域元素的命名,不涉及非核心域部分。非核心域部分内容,和计算机和软件领域有关。这方面的“外语”,不管是计算机和软件专业的各个概念,还是编程语言的关键字,要求软件人员熟练掌握是理所应当的。
例如,浑元形意太极掌门马老师找我们为他的门派搞一套“修炼辅助系统”。作为软件开发人员,能认真去体会马老师说的“化劲”、“武德”、“真气”、“掌门”之类的概念就已经不易,还要把它们变成英语就更难为人了,估计马老师自己也不知道。
但是,作为软件开发人员,不知道什么叫DTO,什么叫Iterator就不应该了,因此,命名为“武德DTO”之类是没有问题的。
如果目标系统是面向国际的,那怎么办呢?还是前面说的,首先考虑精确体现核心域内涵和方便开发团队思考和交流核心域知识。该用汉语就用汉语,该用英语就用英语,该用日语就用日语。
8.2.4.7 类命名用单数
类的名称已经是一个抽象概念,既代表属于这个类的所有对象的集合,也指代集合中的任何一个对象。
例如,“人”这个概念既代表所有符合“人”的特征的对象的集合,我们可以说“人是一种动物”;同时,“人”可以代表“任何一个人的个体”,我们可以说“人有姓名、身高”。这两种用法,分别对应于后文要讲解的泛化和关联关系。
如果用复数表达,例如汉语“人们”,英语“people”,第二种用法就很别扭了,实例“某个人们”是什么?特别是在和其他类关联时,如果本方多重性为多,又该如何处理?
图8-54 类命名用单数
如果“某个人们”另有含义,那么应该有另外一个类。例如,图8-54中的“组织”。“组织”和“人”关联,“人”一端的多重性为多,此时,“人”一端的角色名,也就是“组织”中类型为“人”的属性名,可以用复数“人们”或“people”代表“人”的集合。
有一些常见的开发习惯,如数据库表名用复数,甚至有的框架在类转换表时,直接就在名称后面加上s,理由是表里有很多行。其实"类"、"表"的概念已经隐含了"多个对象"、"多行"的意思,不用再加了。而且,如果英语不熟,还得费心思去想正确的复数形式,何必呢?
8.2.4.8 自测题
扫码或访问http://www.umlchina.com/book/quiz8_2_4.html完成在线测试,做到全对以获得答案。
1. [单选]
针对下图,以下描述最正确的是:
A) 这是“打车”领域的分析类图。
B) 这是“迪迪打车”系统的核心域类图。
C) 这是“打车”领域的核心域类图。
D) 这是“迪迪打车”系统的领域类图。
2. [多选]
给类命名时,要注意不要在类名的最后加"情况"、"信息"、"记录"、"数据"、"表"等。请问,针对以下哪些系统的核心域建模,类名中可以出现刚才提到的这些文字?
A) 雨量数据信息监测系统
B) DBMS(数据库管理系统)
C) 疫情信息情况数据查询系统
D) 搜索引擎
3. [单选]
关于“宝贝”和“商品”,经过讨论和思考,建模人员认为在目前所关注范围内这两个词可以认为相同,“商品”更适合作为分析模型中实体类的名字,那么,以下说法正确的是:
A) 实体类起名“商品”,但如果某类涉众觉得“宝贝”更顺眼,和他交互的界面上依然可以写“宝贝”。
B) 所开发系统的所有成分应一律使用“商品”,以建立“通用语言”。
C) 实体类一律使用“商品”,和人交互的界面上一律使用“宝贝”。
D) 应该以“宝贝”为抓手,将“商品”下沉到底层架构,击穿程序员心智,打出一套敏捷组合拳。
4. [单选]
以下给类和属性命名,最合理的是:
A)
B)
C)
D)
5. [单选]
关于去除分析模型中不该有的内容,以下做法合适的是:
A) 需求规约(用例规约)里没提到的内容要去除,提到的内容要保留。
B) 观察模型中各元素的命名,是名词(包括名词化后的动词)的保留,其他去除。
C) 观察模型中各元素的命名,涉及计算机、软件、网络术语的内容要去除。
D) 逐个思考模型中的元素,如果去除它会不会影响到功能。
6. [多选]
以餐馆的取号机为目标系统。食客输入有几人就餐,请求取号,系统打印出排号单,上面的信息有餐台类型(大中小……),排队号码。
请问:如果对目标系统使用面向对象分析,根据以上信息判断,以下选项中,属于系统的分析类且命名合适的有:
A) 食客
B) 取号界面
C) 取号控制
D) 餐台类型
E) 餐台
7. [多选]
软件开发人员和涉众交流某个问题时,涉众提到一个他工作中的专业术语“差动保护”,开发人员很难理解。对此,以下说法错误的有:
A) 开发人员应该认真去研究相关的领域知识。
B) 说明“差动保护”不是双方能用于沟通的“通用语言(Ubiquitous Language)”,开发人员应该带领相关涉众建立方便开发人员理解和沟通领域知识的“通用语言”。
C) 有的岗位的涉众学历较低、能力较差、知识面较窄,对领域的认识有时还不如开发人员,对这类涉众所说的,如果听不懂,可以先处理其他好理解的问题,然后有空再来处理该涉众的这个问题。
D) 开发人员应该用敏捷+DDD打法,给涉众赋能,连接涉众心智,通过通用语言(Ubiquitous Language)拉齐水位,形成闭环。
8. [单选]
产品经理王婉菲精读《软件方法》(上),做对书上所有题目以及所有强化自测题,所写的用例规约提交给潘老师评点也得到了好评。这天,王婉菲把一份用例规约交给架构师刘庚宏,刘庚宏做面向对象的分析时,发现得到的类图中,“人员”这个类没有“姓名”属性,以下描述最正确的可能是:
A) 系统目前用不到“姓名”的信息。
B) 用例规约不能覆盖所有需求,需要补一份软件需求规约。
C) “人员”有“姓名”属性是缺省的,觉得哪里缺,自己加上就可以。
D) 王婉菲应该在用例规约中补充相应的内容再交给刘庚宏。
9. [多选]
A公司正在开发“新一代供应链系统”,目标组织定位为动力电池厂商B公司,以下可以算作领域专家的有:
A) A公司架构师张三,曾负责公司多个供应链系统的业务流程建模、实体-关系建模。
B) 著名教材《供应链管理》的作者、某高校教授李四。
C) B公司仓库助理王五,熟练使用公司当前的供应链系统的仓储相关功能。
D) B公司创始人、动力电池专家尼古拉斯·赵六。
10. [单选]
除了中国之外,世界上很多国家也有传统医学。例如,印国的阿育吠陀医学已经延续了五千年。阿育吠陀医学(以下简称印医)认为世界万物包括人类由土、水、火、气和空间五种元素组成,人体有中脉、左脉、右脉三条脉络,然后形成七个脉轮,一万两千个脉的支道。关于致病和治病,印医也有一套十分庞杂的知识体系,包括使用牛的粪尿、水蛭吸血以及念咒语等。
近年来,印医逐渐没落,印国的印医药管理局为了振兴印医,委托A公司开发一套名为“随身老印医”的系统推广全国。该系统打算封装印医知识体系和著名老印医的经验,让印国患者可随时享受正宗的印医服务。
针对“随身老印医”系统的分析工作流,以下说法正确的是:
A) 应该用现代医学知识建立该系统的分析模型,为患者提供更好的服务。
B) 印医的知识体系是否科学,不影响软件开发。
C) A公司开发人员可以和印医领域专家协作,用软件开发术语来帮助提升印医术语,得到通用语言。
D) 可以借此机会构建一套名为“印医驱动设计的敏锐建模方法”的全新软件开发方法学。
11. [多选]
以下文字中存在“形容词用作名词”的有:
A) 假烟假酒假朋友,假情假意假温柔。
B) 我怕我的眼泪,我的白发,像羞耻的笑话。
C) 在华丽的城市,等待醒来。
D) 凋零下的无暇,是收获谜底的代价。
12. [单选]
过去几年,核酸检测成为日常生活的一部分。假设某系统需要某个类来记住人们每一次核酸检测的时间、方式(咽拭子、鼻拭子、肛拭子)、结果等,以下选项中最适合作为这个类的名字的是:
A) 核酸检测
B) 核酸检测事件
C) 核酸检测记录
D) 核酸检测单
13. [多选]
关于任务和分派,以下类图中命名合适的有:
A)
B)
C)
D)
14. [单选]
以下类图,抛开其他方面的问题不谈,只谈类名和属性名。
如果在不修改类个数的情况下,删除冗余属性、类名和属性名中的冗余内容,大概有多少比例的内容可以删除?计算方法:(被删除的类名和属性名字数/图中原有的类名和属性名字数)×100%,2个英文字符算一个字。
A) 36%
B) 46%
C) 56%
D) 66%
8.2.5 审查类和属性
8.2.5.1 类名中是否有形容词
如果存在“形容词(的)名词”这样的类名,例如“待支付(的)订单”、“合适(的)会议室”,可以