| kang 的个人资料Health King照片日志列表 | 帮助 |
|
Health King搞IT只不过是我di表面工作,我真正di身份是一位研究~僧
8月19日 Quit Smoking. why not?戒烟8小时:血中一氧化碳降至正常,血中氧水平增至正常; 戒烟24小时:心脏病发作的危险降低; 戒烟48小时:神经末梢的尼古丁消失,嗅觉及味觉增加; 戒烟72小时:支气管松弛使呼吸通畅,肺功能增加;戒烟2周到3个月:循环改善,肺功能增加了30%; 戒烟3个月到9个月:咳嗽、鼻窦充血、疲乏、气短等减轻,肺内纤毛重新成长,痰液容易排出,肺部清洁,减少了感染的危险,身体活力增强; 戒烟5年:心脏病的死亡率与不吸烟者相同; 戒烟10年:肺癌的死亡率降至几乎与不吸烟者相同,癌前期细胞恢复正常,其它恶性肿瘤(口腔、食道、膀胱等)的发生率降低。 7月12日 减肥之路漫漫,吾将上下而求索。 最近又维持在一个体重水平了。我现在的食谱是酱紫。
早饭:清水煮荞麦面条,放点虾皮,番茄酱。
午饭:西芹段(超市买的净菜,直接吃),橙子一个(剥好,弄成一瓣一瓣),洋葱一个(切丝),偶尔弄点黄瓜或者胡萝卜。低脂酸奶二两。上海产的一种大豆干二两。这些东西拌一起。味道还不错。
晚饭:微波炉烤红薯一个(最近盘子里面放水,烤出来的和煮的很像)。苹果一个。
然后天黑了去慢跑40分钟。周日不跑步,去游泳。
就这个样子,体重也只是维持,下降的及其缓慢。不过这个月压缩到70公斤以内的目标应该可以完成。哈哈。
原来计划是65公斤,但是目前看。我觉得还是弄到我以前刚毕业的水平60公斤比较好。怕反弹啊。这个只是一个想法,先完成65公斤的目标再说了。 7月6日 设计模式-OOD的设计原则(5)-"合成聚合复用原则" 合成(Composition)和聚合(Aggregation)都是关联(Association)的特殊种类。聚合表示整体和部分的关系,表示“拥有”;合成则是一种更强的“拥有”,部分和整体的生命周期一样。合成的新的对象完全支配其组成部分,包括它们的创建和湮灭等。一个合成关系的成分对象是不能与另一个合成关系共享的。
换句话说,合成是值的聚合(Aggregation by Value),而一般说的聚合是引用的聚合(Aggregation by Reference)。 简短的说,合成-聚合复用原则(CARP)是指,尽量使用合成/聚合,而不是使用继承。 在OOD中,有两种基本的办法可以实现复用,一种是通过合成/聚合,另外一种就是通过继承。通过合成/聚合的好处是:
它的缺点就是系统中会有较多的对象需要管理。 通过继承来进行复用的优点是:
缺点是:
要正确的选择合成/复用和继承,必须透彻的理解里氏代换原则和Coad法则。里氏代换原则前面学习过,Coad法则由Peter Coad提出,总结了一些什么时候使用继承作为复用工具的条件。只有当以下的Coad条件全部被满足时,才应当使用继承关系:
错误的使用继承而不是合成/聚合的一个常见原因是错误的把“Has-A”当成了“Is-A”。“Is-A”代表一个类是另外一个类的一种;“Has-A”代表一个类是另外一个类的一个角色,而不是另外一个类的特殊种类。 7月5日 庆贺突破75公斤大关 连续三天苹果后,今天早上过秤,72.5公斤。效果不错,一共减了2.5公斤,哈哈。然后坚持以前的兔子餐,保持住。这样离65公斤的目标就更近了。下一个近期目标是突破70公斤。预计一个月的时间。哈哈哈。 7月4日 设计模式-OOD的设计原则(4)-"接口隔离原则" 接口隔离原则(ISP):使用多个专门的接口比使用单一的总接口要好.也就是说,一个类对另外一个类的依赖性应当是建立在最小的接口上的. 这里的"接口"往往有两种不同的含义:一种是指一个类型所具有的方法特征的集合,仅仅是一种逻辑上的抽象;另外一种是指某种语言具体的"接口"定义,有严格的定义和结构.比如Java语言里面的Interface结构.对于这两种不同的含义,ISP的表达方式以及含义都有所不同.(上面说的一个类型,可以理解成一个类,我们定义了一个类,也就是定义了一种新的类型) 当我们把"接口"理解成一个类所提供的所有方法的特征集合的时候,这就是一种逻辑上的概念.接口的划分就直接带来类型的划分.这里,我们可以把接口理解成角色,一个接口就只是代表一个角色,每个角色都有它特定的一个接口,这里的这个原则可以叫做"角色隔离原则". 如果把"接口"理解成狭义的特定语言的接口,那么ISP表达的意思是说,对不同的客户端,同一个角色提供宽窄不同的接口,也就是定制服务,个性化服务.就是仅仅提供客户端需要的行为,客户端不需要的行为则隐藏起来. 在我们进行OOD的时候,一个重要的工作就是恰当的划分角色和角色对应的接口.将没有关系的接口合并在一起,是对角色和接口的污染.如果将一些看上去差不多的接口合并,并认为这是一种代码优化,这是错误的.不同的角色应该交给不同的接口,而不能都交给一个接口. 对于定制服务,这样做最大的好处就是系统的可维护性.向客户端提供接口是一种承诺,public接口后是不能改变的,因此不必要的承诺就不要做出,承诺越少越好. 6月30日 设计模式-OOD的设计原则(3)-"依赖倒转原则" "开-闭"原则是我们OOD的目标,达到这一目标的主要机制就是"依赖倒转原则".这个原则的内容是:要依赖于抽象,不要依赖于具体.
对于抽象层次来说,它是一个系统的本质的概括,是系统的商务逻辑和宏观的,战略性的决定,是必然性的体现;具体的层次则是与实现有关的算法和逻辑,一些战术性的决定,带有相当大的偶然性.传统的过程性系统设计办法倾向于使高层次的模块依赖于低层次的模块;抽象层次依赖于具体层次.这实际上就是微观决定宏观,战术决定战略,偶然决定必然.依赖倒转原则就是要把这种错误的依赖关系倒转过来.
许多的建构设计模型,例如COM,CORBA,JavaBean,EJB等,它们背后的基本原则就是DIP.
对于软件设计的两个目标,复用和可维护性来说,传统的设计侧重于具体层次模块的复用和可维护,比如算法,数据结构,函数库等等.但是,对系统的抽象是比较稳定的,它的复用是很重要的,同时,抽象层次的可维护性也应当是一个重点.就是说DIP也导致复用和可维护性的"倒转".
我们现在来看看依赖有几种,依赖也就是耦合,分为下面三种
DIP要求客户端依赖于抽象耦合,抽象不应当依赖于细节,细节应当依赖于抽象(Abstractions should not depend upon details. Details should depend upon abstractions),这个原则的另外一个表述就是"四人团"强调的那个:要针对接口编程,不要对实现编程.(Program to an interface, not an implementation),程序在需要引用一个对象时,应当尽可能的使用抽象类型作为变量的静态类型,这就是针对接口编程的含义. DIP是达到"开-闭"原则的途径. 要做到DIP,用抽象方式耦合是关键.由于一个抽象耦合总要涉及具体类从抽象类继承.并且需要保证在任何引用到某类的地方都可以改换成其子类,因此,LSP是DIP的基础.DIP是OOD的核心原则,设计模式的研究和应用都是用它作为指导原则的.DIP虽然强大,但是也很难实现.另外,DIP是假定所有的具体类都会变化,这也不是全对,有些具体类就相当稳定.使用这个类的客户端就完全可以依赖这个具体类而不用再弄一个抽象类. |
|||||
|
|