`
juggler
  • 浏览: 166030 次
  • 性别: Icon_minigender_1
  • 来自: 广东
社区版块
存档分类
最新评论

对象设计:角色、责任和协作(一)

阅读更多
新进一本书《对象设计:角色、责任和协作》,主讲面向对象的软件设计,很不错,正在看,现在记下一些笔记。

第一章:设计概念:
1·1
-----
这一节主要是讲软件是由对象所组成,而对象个体并不是单一的个体,而是对应相应角色,并与其它对象互动通信以达到软件运作的个体。另一个方面则是对象并不只是对现实世界的模拟,而对象的设计可以是对现实世界不存在的对象,比如说逻辑。

·“软件是由各部份组成,软件的各部份——软件对象——通过发送消息来完成信息和行为上的互动。”:如何发送消息呢?要发送消息,那么就要知道要向谁发送消息,那么如何得知别的对象的存在呢?我这样理解,一种是对象动态生成别的对象,别一种则是把别的对象告诉这个对象,而发送消息的方式就是对别的对象的方法进行调用,让别的对象去实施它的职责,以达到该对象所要完成的行为动作。这里的信息应该是触发信息,比如说一次动作请求,更为确切的就比如要查一个客户的资料,那么就会触发相关的对象进行互动,以得到相关的回答。

·“我们将真实世界中难以理解的对象分解为更小、更易于管理的软件对象,我们还可能创造出真实世界中不存在的新对象。……我们衡量成功的标准确无误是软件满足应用需求的程度,而不是对现实世界的模拟度。”:系统是由众多小对象组成的,那么我们就要分析系统,到底是由哪些对象组成,并且规定这些对象的职责和功能。那么对象就必须是现实世界必然存在的吗?不一定,最简单的数据库存取,我们为了规范化存取过程,我们会设计一个DAO对象,为了显示数据,我们可能要设计一个专门处理显示的对象,而这些都是现实中不存在的。然对象的设计并不是对现实世界的完全模拟,而是针对需求进针对性的模拟,不必要模拟往往会增加系统的复杂性,以至项目最终失败。

·“由于对象具有机械行为,并且能够插接在一起相互工作,因此它们能够组成非常复杂的机器。为了管理这种复杂性,我们将系统行为指派到具有特定角色的对象中。”:亦即把职责和功能分派到各个对象,以简化复杂性。其实按照我的理解,这个设计的过程就是一个更为复杂的过程,相对来说复杂性并没有得到简化。

·
应用系统 = 一组相互作用的对象
对象 = 一个或多个角色的实现
角色 = 一组相关的责任
责任 = 执行一项任务或掌握某种信息的义务
协作 = 对象或角色(或两者)之间的互动
契约 = 描述协作提纲的一种协定

这里对角色和对象有点不明,如若没有学过设计模式的人,会很轻易的认为角色是“类”,而对象就是类的一个实例而已。但是如若有学过设计模式,那么我们就有另一种看法,这里,角色规定的是一组责任,而这里的对象是这个责任的一种实现,而且一个角色可以用多种实现的对象,我们这样看,我们定义了一个接口,指定了要完成这个接口指定责任集的类,那么这些类就是前面所说的对象,这是面向接口编程的要义。那么这本书这里所说的是前面一种情况呢还是后面这种情况呢?不得而知。

---

学习是一种快乐,而且这本书里有很多我一直寻求的正解,希望能解开一直以来的迷惑。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics