知识卡片
分类与泛化的是一个关系陷阱
内容
把子类型化理解为是一个(is a)关系容易踩坑,背后混杂两种关系:分类(对象是某类型的实例,如Shep是一只博德牧羊犬)和泛化(类型是另一类型的子类型,如博德牧羊犬是一种犬)。泛化有传递性,可推到Shep是一只动物;分类不具传递性,博德牧羊犬是一个品种和犬是一个物种不能像泛化那样结合传递。先分类后接泛化成立,反过来不成立,混淆会误用子类型化。
参考来源
- 位置:《UML精粹:标准对象建模语言简明指南(第3版)》第5章《类图:进阶概念》(源文件:_epub-src/EPUB/4.xhtml)
- 结论依据:原文用Shep/博德牧羊犬/犬/品种/物种的语句组合实验说明"一些是分类(classification)……一些是泛化(generalization)……泛化是传递性的,分类则不是。可以在分类后跟着泛化,但反之不然",解释了为何部分语句组合不合理。
- 原始内容:为什么我可以结合一些语句,而不能结合另一些?原因是一些是分类(classification)——对象Shep是类型博德牧羊犬的一个实例——一些是泛化(generalization)——类型博德牧羊犬是类型犬的子类型。泛化是传递性的,分类则不是。可以在分类后跟着泛化,但反之不然。