今天借了一本《UML精粹--标准对象建模语言简明教程》(Uml Distilled: A Brief Guide to the Standard Object Modeling Language)。徐家福先生译过来的。总体上感觉:把一本好书糟蹋了。之乎者也的序自不待言。诸如“如果万一有人不小心面陷入我的陷阱,控制器对象终止,于是我就需要把兔子关入笼内,擦擦地板,重新启动系统。”之类的翻译(我查了下原著,if someone should be so careless as to fall for my trap,the controller object terminates,so I would need to put the rabbit in its cage,mop the floor,and reboot the system.),让原著中风趣的比喻变得艰涩而索然无味。而“让强制属性阙如或者示明抽象类别的例规约都是合法的。(it's legal to leave mandatory attributes empty or to show instance specifications of abstract classes.)”我不得不查看原著才明白。
尽管如此,书中(我是说原著)。还是有不少不错的内容的。于是做了些寻章摘句的工作。并附了英文原著。键盘摸得不熟,有打错的担待一下。谢谢!
  泛化(generalization):
泛化的一个典型例子是涉及业务的个人客户和公司客户。个人客户和公司客户二者既有区别又有很多的类似之处。可以把类似之处放入一个通用客户类(超类型),它以个人客户类及其公司客户类为其子类型。对软件来说,明显的解释是“继承”:公司客户类是客户类的子类。
聚合与组合(aggregation and composition):
聚合是整体-部分关系。就如同说,一辆车以引擎和车轮为其两部分。它听起来很好,但困难的是什么是聚合与关联的区别。UML包含了聚合,但几乎没有任何语义。(aggregation is the part-of relationship.it's like saying that a car has an engine and wheels as its parts. This sounds good, but the  difficult thing is considering what the difference is between aggregation and association. The UML included aggregation but with hardly any semantics.)

除聚合外UML具有另外定义的组合特性。点的一个实例可以是多边形的部分也可以是圆心,但不能二者兼是。通则是,虽然一个类可以是多个其它类的成分,任一实例却必须只能是一个拥有者的成分。类图可以示明可能拥有者的多重类,但是,每个实例却只能有单独一个对象为其拥有者。(as well as aggregation,the UML has the more defined proerty of composition. an instance of Point may be part of a polygon or may be the center of a circle, but it cannot be both.The class diagram may show multiple classes of potential owners, but any instance has only a single object as its owner.)
组合是示明按值拥有的特性、值对象的特性,或者对其它特定成分具有强烈并稍有排它的拥有性等特性的好方法。聚合是完全没有意义的。(Composition is a good way of showing properties that own by value, properties to value objects, or properties that have a strong and somewhat exclusive ownership of particular other components. Aggregation is strictly meaningless.)
分类与泛化(classification and generalization)
我常听人把子类型称为“是一(is a )”关系。我敦促你要提防这种思考方式。问题是“是一”这一短语可有不同的含义。
考察如下短语:
1.Shep 是一只牧羊犬。
2.牧羊犬是一只犬。
3.犬是一种动物。
4.牧羊犬是一属(Breed).。
5.犬是一种(species)。
现在试图把这些短语加以组合。如组合短语1 和2,便得"Shep 是一只犬";组合2,3得“牧羊犬是一种动物”;组合1、2、3得“Shep 是一种动物”。到目前为止,都很好。现在试1和4,便得“Shep 是一属”。组合2、5 得“牧羊犬是一种”,这就不太好了。(   Now try combining the phrases. If I combine phrases 1 and 2, I get "Shep is a Dog"; 2 and 3 taken together yield "Border Collies are Animals." And 1 plus 2 plus 3 gives me "Shep is an Animal." So far, so good. Now try 1 and 4: "Shep is a Breed." The combination of 2 and 5 is "A Border Collie is a Species." These are not so good.)
为什么我可以组合其中某些短语,而不可以组合别的短语?理由是,有些是分类(classification)(对象Shep是牧羊犬类型的一个实例),有些是泛化(generalization)(牧羊犬类型是犬类型的一个子类型)。泛化是传递的,分类则不然。我可以组合后接泛化的分类,反之则不然。(Why can I combine some of these phrases and not others? The reason is that some are classification—the object Shep is an instance of the type Border Collie—and some are generalization—the type Border Collie is a subtype of the type Dog. Generalization is transitive; classification is not. I can combine a classification followed by a generalization but not vice versa.)
我提出这一点是使你对“是一(is a)”谨慎对待。使用起子类不合适以及职责混淆。在这种情形,子类型更好的检验是如下一些短语:“犬是动物的种类”和“牧羊犬的每一实例都是犬的一个实例”。(  I make this point to get you to be wary of is a. Using it can lead to inappropriate use of subclassing and confused responsibilities. Better tests for subtyping in this case would be the phrases "Dogs are kinds of Animals" and "Every instance of a Border Collie is an instance of a Dog.")
附:英文原版可从fixdown下载。http://fixdown.com/soft/14631.asp

UML精粹--标准对象建模语言简明教程相关推荐

  1. [201206][UML 精粹][标准对象建模语言简明指南][第3版][Martin Fowler][著]

    [201206][UML 精粹][标准对象建模语言简明指南][第3版][Martin Fowler][著][UMLChina][潘加宇][译] 第 1 章 简介 1.1 UML 是什么 1.2 使用 ...

  2. C语言简明教程,C语言简明教程

    C语言是一种结构化的计算机程序设计语言,具有使用灵活.表达能力强,兼具高级语言和低级语言双重功能等特点,是各大院校计算机程序设计入门课程的*语言之一.本书以应用性为中心,以培养程序设计思想和程序设计能 ...

  3. c语言程序链接过程,C语言简明教程(二):C程序编译链接过程和实例对照详解...

    不像高级编程语言,在C语言开发中,了解其编译链接过程显得相对重要,因为C语言是较为底层的语言,很多时候我们调试C程序或者解决其它问题都可能会涉及到C编译链接的相关知识,例如编译动态库或者静态库.下面我 ...

  4. [C语言简明教程] 指针的进阶(上)

    文章目录 前言 一.指针是什么? 二.指针的进阶 1. 字符指针 2.指针数组 3.数组指针 3.1数组指针定义 3.2 &数组名 和 数组名 3.3 数组指针的使用 4. 数组参数.指针参数 ...

  5. [C语言简明教程] 指针的进阶(下)

    文章目录 前言 一.函数指针 二.函数指针数组 三.回调函数 总结 前言 C语言中指针的重要性是:通过指针不仅可以对数据本身,还可以对存储数据的变量地址进行操作.指针能够帮助我们快速地传递数据,减少内 ...

  6. UML与软件建模之面向对象的软件建模概述

    好久没有写写新东西了,最近闲下来了,看了一本名叫<URL与软件建模>这边书,感觉里面讲的不错,现在将我学习到的东西和大家做一个简单的分享. 横竖都是写,建模和不建模有什么区别呢?如果你是一 ...

  7. UML图系列——建模和面向对象

    在上一篇UML图系列--UML概要文章中,我提到过两个概念:面向对象.建模 用一片文章来讲这两个概念我想是很有必要的,因为UML是一个建模语言,目标是以面向对象图的方式来描述任何类型的系统. 下来开始 ...

  8. python wasm_Go WebAssembly (Wasm) 简明教程

    Go WebAssembly (Wasm) 简明教程 1 WebAssembly 简介WebAssembly是一种新的编码方式,可以在现代的网络浏览器中运行 - 它是一种低级的类汇编语言,具有紧凑的二 ...

  9. 《量化金融R语言高级教程》一1.2 波动率建模

    本节书摘来异步社区<量化金融R语言高级教程>一书中的第1章,第1.2节,作者: [匈牙利]Edina Berlinger(艾迪娜•伯林格) , 等 译者: 高蓉 责编: 胡俊英,更多章节内 ...

最新文章

  1. wpsarm64linux,WPS Office 2019 For Linux 11.1.0.9080版发布下载,附更新介绍和安装
  2. 【译】最大限度地降低多线程 C# 代码的复杂性
  3. js小笔记 -- let const的理解
  4. python实现: protobuf解释器
  5. 完美世界2020编程题-救雅典娜 英雄AB PK
  6. stm32 ARM中的RO、RW和ZI DATA
  7. php mysql自动反转义_ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法...
  8. Java集合之map 集合使用
  9. 上周热点回顾(11.27-12.3)
  10. maya golaem crowd群集测试 带自己录制的简易教程
  11. AccuMark 7.6.2 格柏服装软件
  12. cameraLink
  13. paypal无法提现?最新解决办法(实战教程)!
  14. Docker Registry 详解
  15. 时间序列预测比赛小结
  16. 系统运维工程师30岁学python_一名Linux系统运维工程师的自述
  17. 微信小程序跳转公众号h5页面
  18. 微信小程序-创建小程序+编写学生评教系统的学生登录页面
  19. VS2019离线安装包下载方法
  20. svn使用openldap验证apache访问方式

热门文章

  1. 域名的购买,备案,解析以及绑定云服务器上的项目
  2. python解决实际问题的代码_Python代码规范问题及解决
  3. BOOL 值在 debug 和 release 模式下初始化不一样!!!
  4. pd 生成mysql 脚本_PowerDesigner 如何生成数据库更新脚本
  5. 第四范式恭祝大家新春快乐!
  6. 第四范式天枢入选毕马威首届“领先消费科技50”榜单
  7. erlang精要(27)-异常处理
  8. c++17(12)-raw string,u8,L
  9. 趣学python3(30)-字典
  10. 【NLP】NLP任务增强:通过引入外部知识来提供额外信息