手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:Misc

面向对象编程五大原则[转]

COPY自老狼网站,原文链接:http://laolang.xtmm.cn/post/209.htm
 
单一职责原则SRP:Single Responsibility Principle
开放封闭原则OCP:Open-Close Principle
Liskov替换原则LSP:Liskov Substitution Principle
依赖倒置原则DIP:Dependency Invertion Principle
接口隔离原则ISP:Interface Separate Principle

  在面向对象设计中,如何通过很小的设计改变就可以应对设计需求的变化,这是令设计者极为关注的问题。为此不少OO先驱提出了很多有关面向对象的设计原则用于指导OO的设计和开发。下面是几条与类设计相关的设计原则。

1. 开闭原则(the Open Closed Principle OCP)
  一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。因此在进行面向对象设计时要尽量考虑接口封装机制、抽象机制和多态技术。该原则同样适合于非面向对象设计的方法,是软件工程设计方法的重要原则之一。我们以收音机的例子为例,讲述面向对象的开闭原则。我们收听节目时需要打开收音机电源,对准电台频率和进行音量调节。但是对于不同的收音机,实现这三个步骤的细节往往有所不同。比如自动收缩电台的收音机和按钮式收缩在操作细节上并不相同。因此,我们不太可能针对每种不同类型的收音机通过一个收音机类来实现(通过重载)这些不同的操作方式。但是我们可以定义一个收音机接口,提供开机、关机、增加频率、降低频率、增加音量、降低音量六个抽象方法。不同的收音机继承并实现这六个抽象方法。这样新增收音机类型不会影响其它原有的收音机类型,收音机类型扩展极为方便。此外,已存在的收音机类型在修改其操作方法时也不会影响到其它类型的收音机。

2. 替换原则 (the Liskov Substitution Principle LSP)
  子类应当可以替换父类并出现在父类能够出现的任何地方。这个原则是Liskov于1987年提出的设计原则。它同样可以从Bertrand Meyer 的DBC (Design by Contract) 的概念推出。
  我们以学生为例,夜校生为学生的子类,因此在任何学生可以出现的地方,夜校生均可出现。这个例子有些牵强,一个能够反映这个原则的例子时圆和椭圆,圆是椭圆的一个特殊子类。因此任何出现椭圆的地方,圆均可以出现。但反过来就可能行不通。
  运用替换原则时,我们尽量把类B设计为抽象类或者接口,让C类继承类B(接口B)并实现操作A和操作B,运行时,类C实例替换B,这样我们即可进行新类的扩展(继承类B或接口B),同时无须对类A进行修改。

3. 依赖原则 (the Dependency Inversion Principle DIP)
  在进行业务设计时,与特定业务有关的依赖关系应该尽量依赖接口和抽象类,而不是依赖于具体类。具体类只负责相关业务的实现,修改具体类不影响与特定业务有关的依赖关系。
  在结构化设计中,我们可以看到底层的模块是对高层抽象模块的实现(高层抽象模块通过调用底层模块),这说明,抽象的模块要依赖具体实现相关的模块,底层模块的具体实现发生变动时将会严重影响高层抽象的模块,显然这是结构化方法的一个"硬伤"。
  面向对象方法的依赖关系刚好相反,具体实现类依赖于抽象类和接口。
  为此,我们在进行业务设计时,应尽量在接口或抽象类中定义业务方法的原型,并通过具体的实现类(子类)来实现该业务方法,业务方法内容的修改将不会影响到运行时业务方法的调用。

4. 接口分离原则(the Interface Segregation Principle ISP)
采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口要好。
  ISP原则是另外一个支持诸如COM等组件化的使能技术。缺少ISP,组件、类的可用性和移植性将大打折扣。
  这个原则的本质相当简单。如果你拥有一个针对多个客户的类,为每一个客户创建特定业务接口,然后使该客户类继承多个特定业务接口将比直接加载客户所需所有方法有效。

以上四个原则是面向对象中常常用到的原则。此外,除上述四原则外,还有一些常用的经验诸如类结构层次以三到四层为宜、类的职责明确化(一个类对应一个具体职责)等可供我们在进行面向对象设计参考。但就上面的几个原则看来,我们看到这些类在几何分布上呈现树型拓扑的关系,这是一种良好、开放式的线性关系、具有较低的设计复杂度。一般说来,在软件设计中我们应当尽量避免出现带有闭包、循环的设计关系,它们反映的是较大的耦合度和设计复杂化。

Tags: 面向对象, 原则

感慨于修剪欲望

今日看完一篇短文,相对比较感慨。文中称人的一生有非常多的欲望,人生有如盆景,而欲望就是盆景里不断长出的枝叶,如果不对枝叶进行修剪,那么盆景将会变得越来越丑陋,只有不停的修剪,盆景才能成为一个漂亮的景观。欲望也是这样,不断的修剪自己的欲望,对欲望进行合理的控制,才能更好的使自己有所求,而不是想到什么就做什么。欲望也是一个人前进的动力,如果人没有欲望,那和行尸走肉又有何区别?

借此机会,回忆一下初中一篇古文《为学》,又名《蜀鄙二僧》:

天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣。人之为学有难易乎?学之,则难者亦易矣;不学,则易者亦难矣。
蜀之鄙有二僧,其一贫,其一富。贫者语于富者曰:“吾欲之南海,何如?”
富者曰:“子何恃而往?”
曰:“吾一瓶一钵足矣。”
富者曰:“吾数年来欲买舟而下,犹未能也。子何恃而往!”
越明年,贫者自南海还,以告富者。富者有惭色。
西蜀之去南海,不知几千里也,僧富者不能至而贫者至焉。人之立志,顾不如蜀鄙之僧哉?

Tags: 生活

听说。。。

本文内容来自网上,听说是真,羡慕一下

 

Bill Joy, 前任Sun的首席科学家,当年在Berkeley时主持开发了最早版本的BSD。他还是vi和csh的作者。当然,Csh Programming Considered Harmful 是另一个话题乐。据说他想看看自己能不能写个操作系统,就在三天里写了个自己的Unix, 也就是BSD的前身。当然是传说了,但足见他的功力。另一个传说是,1980年初的时候,DARPA让BBN在Berkley Unix里加上BBN开发的TCP/IP代码。但当时还是研究生的B伯伯怒了,拒绝把BBN TCP/IP加入BSD,因为他觉得BBN的TCP/IP写得不好。于是B伯伯出手了,端的是一箭封喉,很快就写出了高性能的伯克利版TCP/IP。当时 BBN和DARPA签了巨额合同开发TCP/IP Stack,谁知他们的代码还不如一个研究生的好。于是他们开会。只见当时B伯伯穿个T-shirt出现在会议室(当时穿T-shirt不象现在,还是相当散漫的哈)。只见BBN问:你怎么写出来的?而B伯伯答:简单,你读协议,然后编程就行了。最令偶晕倒的是,B伯伯硕士毕业后决定到工业界发展,于是就到了当时只有一间办公室的Sun, 然后他就把Sparc设计出来乐。。。象这种软硬通吃的牛人,想不佩服都不行的说。据Bill Joy的同事说,一般开会的时候B伯伯总是拿一堆杂志漫不经心地读。但往往在关键之处,B伯伯发言,直切要害,提出漂亮的构想,让同事们彻底崩溃。对了,他还是Java Spec和JINI的主要作者之一。

Tags: bsd

MSN掀起签名热 红心连成片表爱国热情

msn名字前面请加(L)CHINA,让全世界看看华人的团结。请转发您的msn朋友。”4月16日,这则简短的信息在MSN用户间迅速传递,网友们通过这种方式来表达爱国热情。 

新民网记者了解到,按照上述信息的指示,在MSN名字前加上(L)CHINA后,“(L)”就会显示为一颗红心。网友苏小姐向新民网称,她吃完午饭后回到电脑桌前,发现MSN上已经是一片红心了,身在海外的朋友们也加入到了这一行列中。还有不少网友将红心后面的文字做了修改,加上了如“One world one dream”等口号。

网友苏小姐说,她的朋友在转发信息时还特地叮嘱她,要将MSN上朋友的备注调整成统一格式,让一颗颗炽热的红心连成一片,以展现中华民族强大的凝聚力和中国人民炽烈的爱国心。

新闻来源:新民网

这个贴子来自于cnBeta.com。

不过。留言更有意思。。。

mephisto 发表于 2008-04-16 15:43:16
每当一个国家的ZZ 、经济出现重大危机的时候,爱国主义的破旗就又散发出臭味来。
——列宁(苏维埃的缔造者)
回复 支持(424) 反对(79)   举报
 
 
 
匿名人士 发表于 2008-04-16 15:45:20
love China not party
回复 支持(340) 反对(27)   举报
 
 
 
匿名人士 发表于 2008-04-16 16:02:29
第一,MSN不是国产的软件;
第二,有多少老外能看到你的MSN?
第三,一个老外的MSN上能有几个中国人?
回复 支持(235) 反对(48)   举报
 
 
 
匿名人士 发表于 2008-04-16 15:47:21
抵制美国的你就不要用微软啊苹果啊 MSN啊!~ 恶心
回复 支持(187) 反对(61)   举报
 
 
 
匿名人士 发表于 2008-04-16 15:44:17
我低估了“人民”这种东西的智商
回复 支持(154) 反对(29)   举报
 
 
 
匿名人士 发表于 2008-04-16 15:57:47
总是把爱国挂在嘴上,所以一口唾沫就能吐掉
回复 支持(129) 反对(24)   举报

最后一个,我才是比较欣赏的。

荷兰的龙芯笔记本可能有猫腻[转自cnbeta]

原文链接:http://www.cnbeta.com/articles/52616.htm

荷兰的龙芯笔记本可能有猫腻

之所以关心龙芯,一来因为这是完全国产的,比汉芯要好很多,而且也买过一台福珑电脑,现在听说出笔记本,也就特别关注一下,结果,看到这条新闻,也不知道是真是假。

确实是好事多磨,希望龙芯能够一路走好。如果是假的,希望那些所谓的领导注意一下,不要为了点蝇头小利就不仔细研究对方来历。原文请看详细。

» 阅读全文

Tags: 龙芯