摘要: 类和对象的关系--使用关系原则4.1 尽量减少类的协作的数量,即减少使用者和被使用者的数量。 协作意味着一定程度的耦合,但是完全没有协作的类也是没有意义的,最多只能作为一个库使用。 通过抽象,依赖接口,可以最大程度减少依赖的实现类,对使用者来说,只看到接口的依赖,而具体的实现的依赖可以通后后期绑定来配置依赖关系。 如 菜单----〉牛肉 ----〉羊肉 ----〉鸡肉 可以抽象为 菜单---->肉类<===牛肉 <===羊肉 <===鸡肉 其中---->代表使用,<====代表实现4.2 尽量减少类和协作者之间传递的消息的数量。 4.3 尽量减少类与协作者之 阅读全文
posted @ 2012-10-23 16:31 怡馨 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 4.5 如果类包含另一个类的对象,那么包含类应当向被包含的对象发送消息(调用方法)。 也就是说,所有的包含关系都应当是使用关系。 如果不是这样,那么包含的类有什么用处呢?当然,面向过程的开发人员会想到可能有一个Get方法供其它类使用这个包含的对象,那么按照“数据隐藏原则”,为什么不让使用包含类的类直接包含被包含的这个对象呢?包含一个对象一定是需要使用它才包含。 比如说汽车包含了发动机,如果违背这条原则的话则定义如下:[cpp] view plaincopyclass汽车{发动机m_发动机;发动机Get发动机(){returnm_发动机;}}//对于使用驾驶员来说,汽车的操作如下:发动机a=汽车 阅读全文
posted @ 2012-10-23 15:57 怡馨 阅读(667) 评论(0) 推荐(0) 编辑
摘要: OOD沉思录 之 导引 一个对象一定会有如下4个属性: 1,它的身份标示,可能只是它在内存中的地址; 2,它的类的属性(通常是静态属性)和这些属性的值(通常是动态的); 3,它的类的行为(从实现者的角度看); 3,它的公开接口(从用户的角度看).2.1 所有数据都应该隐藏在它所在的类内部. 考虑最简单的点Point类(X,Y),再考虑可能点的实现是用的极坐标,那么是否该领悟到这一点了?2.2,类的使用者必须依赖类的公共接口,但类不能依赖它的使用者. 房子可以依赖闹钟,但是闹钟不能依赖房子,否则这个闹钟就不能放到别的地方了2.3,尽量减少类的的方法的数量 几年前,部分人所提倡的原则与此正好相反, 阅读全文
posted @ 2012-10-23 15:52 怡馨 阅读(491) 评论(0) 推荐(0) 编辑
摘要: 前言 此文译自CodeProject上<How I explained OOD to my wife>一文,该文章在Top Articles上排名第3,读了之后觉得非常好,就翻译出来,供不想读英文的同学参考学习。 作者(Shubho)的妻子(Farhana)打算重新做一名软件工程师(她本来是,后来因为他们孩子出生放弃了),于是作者就试图根据自己在软件开发设计方面的经验帮助她学习面向对象设计(OOD)。 自作者从事软件开发开始,作者常常注意到不管技术问题看起来多复杂,如果从现实生活的角度解释并以对答的方式讨论,那么它将变得更简单。现在他们把在OOD方面有些富有成效的对话分享出来,你可 阅读全文
posted @ 2012-10-23 11:38 怡馨 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 前几天,园子里评论比较高的一篇文章是《如何向妻子解释OOD》,这 篇文章用交谈的方式,用生活中的示例来讲述面向对象编程的一些相关概念。一般这样的文章读起来都会朗朗上口,也非常好理解,因为都是生活中实际的例子。但 是也有读者在下面的评论里说,他以前经常看一些用小猫小狗,汽车等用来讲解面向对象的文章,看的时候很有感觉,但是事后很快就遗忘了,更别说应用到自己的 项目中。实际上这不难理解,面向对象本身的目的就是提高抽象层次。更抽象的东西当然也就更难理解,也更难操作。所以大部分面向对象的书 籍也都以一些具体的示例来讲解,这样才好将一些东西落实,不然容易给人一种泛泛而谈的感觉。但是,因为每个人的项目都各有 阅读全文
posted @ 2012-10-23 11:36 怡馨 阅读(331) 评论(0) 推荐(0) 编辑
摘要: 封装封装、继承和多态是面向对象“三大金刚”。这其中封装可谓三大金刚之首。封装(或称信息隐藏)亦即不对使用者公开类型的内部实现手段,只对外提供一些接口,使用者只能通过这些公开的接口与类型进行交谈。封装不好实际上继承和多态也是无稽之谈,即使不无稽也会风雨飘摇,使用者可能绕过你精心构造的对象层次,直接访问对象的数据,因为直接访问一切看起来那么自然而然,很简单,很直观也很容易,不需要经过大脑。面向对象面 向对象是一种将数据和行为绑定在一起的编程方法,虽然在面向过程的时代,也可以使用模块化设计将数据以及使用这些数据的行为绑定在一起,但是毕竟那是靠程 序员的个人自律。使用者还是可以轻松的无视这些约定,这样 阅读全文
posted @ 2012-10-23 11:35 怡馨 阅读(398) 评论(0) 推荐(0) 编辑
摘要: 多少次有人问我如何构建一个比较好的类阶层次,如何使用面向对象进行设计,或者问为什么我看了那么多面向对象和设计模式的书一到使用的时候却总是写出面向过程的代码。每当我碰到这些问题的时候我总是回答,其实我也不知道。真的,其实我也不知道。虽然我总是张口闭口面向对象,总是看到一个问题后就谈这个有点XXX模式的影子,但大部分时候碰到一个问题我还是一片空白,不知道如何去分析设计和实现出好的面向对象。所以,我只想谈谈我是如何实践面向对象的,这对我自己有用但不一定对你有用。嗯,回到正题。回顾编程方法的发展史,我想不外乎两个字:抽象。从 最早的汇编语言中使用的子例程到结构化编程,然后到面向对象、面向组件以及面向服 阅读全文
posted @ 2012-10-23 11:33 怡馨 阅读(293) 评论(0) 推荐(0) 编辑