<<UML for Java Programmers>> 第11章读书笔记

这一章提到新手做设计时的常见错误。

我最喜欢这一章,以前看的时候,为了追求所谓的速度,把书中的实例统统略过,真有点买椟还珠的味道。另外说明一下,读书笔记为什么突然跳到第11章。
最简单的原因是因为我对这一章有感觉,觉得有必要做笔记。

常见的如下:
1. 没有方法的类(MissingMethods)。没有方法的类是没有存在价值的,“programs are about behavior!”,我们应该根据行为来划分软件系统。如果不是根据行为来划分软件,说明用了其它错误的划分方法。

2. 真空类(Vapor Classes)。书中有个Light的类,这个类没有数据成员,只有两个方法:on和off,这两个方法也是做了一个简单的转换,方法里只有一句,调用了CoffeeMakerAPI的函数,没有做任何有意义的事,去掉它完全不影响软件逻辑。除了Light外,Button、Boiler和WarmerPlate也是这样的类,去掉对逻辑没有任何影响。

3. 假想的抽象(Imaginary Abstraction)。因为咖啡机的需求描述里提到了几种加热器和传感器,初学者会想当然的弄出一个传感器的抽象基类。如何判断基类是否合理呢?看有没有其它类会用到它。另外,如果抽象类的接口太泛化,也是错误抽象的一个提示。假想的基类之所以出现,是因为大家按照需求规格书,从里面挑名词,然后根据这些名词提取抽象。

4. 神一样的类(God Classes)。如果所有责任都在一个类的身上,也许你创建了一个全能类。全能类是我们要避免的,这就是我们做设计的原因。

提了这么多错误和注意事项,那么,正确的咖啡机程序该如何设计呢?

"The trick to solving this problem is to step back from the problem and separate the
details from the essential nature of the problem. Forget about boilers, valves, heaters, sensors,
and all the little details of the problem and concentrate on the underlying problem.

What is that problem? The problem is: How do you make coffee?
How do you make cofee? The simplest, and most common solution to this problem, is
to pour hot water over coffee grounds, and to collect the resulting infusion in some kind of
vessel. Where do we get the hot water from? Let’s call it a HotWaterSource. Where do
we collect the coffee? Lets call it a ContainmentVessel."

如书中所说,要忽略细节,看清问题的本质。

煮咖啡就是将热水倒在咖啡渣上,然后用个容器接收滤出的水。所以咖啡机由两个东西构成:HotWaterSource和ContainmentVessel。这两个类之间有什么样的依赖关系呢?初学者容易将方位的上下映射到类的依赖中,这是不对的。类的依赖关系应该反映message的流动,其实就是谁给谁发消息。书中将这种连线错误称之为Crossed Wires。

有了这两个类就够了吗?不够。还要添加用户界面,不然用户无法使用咖啡机。为此,作者添加了UserInterface类,负责和用户交互的一切。

这个三元组如何配合呢?怎么样来确定每个类的行为?答案是从行为触发,通过用例来看这三个类之间有哪些消息需要传递。可以用协作图将关系表达出来。完成了动态图之后,可以将静态的类图也画出来。

静态图和动态图都有了,这样就完了吗?我觉得这样就差不多了。但是作者却说“No, No, No”(OK,这一句是我想象的)。

理想中的咖啡壶已经设计好了,马上把它在代码里实现吧!

作者提到,如果将M4咖啡壶的细节掺入刚刚设计好的类中,那么刚才的抽象工作白做了。为了设计可以复用,必须将不能重用的部分分开。所以才有了后面“Use Case 1. User pushes Brew Button (Mark IV)” 等几节。一般书上都是从生活到艺术,这一章作者从艺术到生活,意料,让人耳目一新。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<br>UML:Java程序员指南<br><br>【原 书 名】 UML For Java Programmers <br>【原出版社】 Pearson Education Prentice Hall/Pearson <br>【作 者】Robert C. Martin <br>【译 者】 黄晓春 <br>【丛 书 名】 软件工程实践丛书 <br><br><br>【内容简介】<br>面向对象大师Robert Martin新作,直言不讳地指出UML的局限性,指导程序员高效地使用UML,以避免盲目使用UML所带来的灾难性后果。<br>Amazon网站读者对本书的评价:<br>● 实际的智慧、提示、技术和技巧<br>● 杰出的UML和OO设计基础读物 极佳的学习材料!<br>● 这本UML书是你惟一所需的<br>● C++程序员也应该看看这本书<br>● 有助于Java设计团队<br>● 团队程序员(和他们的经理)必读<br>● 对UML的最佳诠释,对Java程序员而言,尤其如此<br>● 杰出的UML和OO设计基础读物<br>这是世界一流面向对象大师Robert C. Martin的最新著作。作者以独特的视角,着重为Java程序员描述了UML的利与弊,指导他们何时应该使用UML,以及如何使用UML。通过本书的阅读,Java程序员将能更加恰如其分地使用UML,进一步提高开发效率。<br>可作为软件开发人员的参考书,也可供高等院校\"UML课程\"使用。本书源代码和授课用的幻灯片可在 http://www.objectmentor.com/resources/bookstore/books/UMLFJP获得。<br><br><br>www.objectmentor.com/UMLFJP<br><br><br>http://images.china-pub.com/ebook15001-20000/19998/shupi.jpg<br><br><br><br>http://www.china-pub.com/19998<br><br>
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值