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

浙公网安备 33010602011771号