11.5笔记

  昨天看的那章书,主要讲述继承和组合在面向对象设计中的作用和概念,今天这章书就更深一步简述代码的重用。
  如果写代码重用能降低系统的开发与维护成本,所以大家在设计程序的过程中都会考虑到代码重用的问题,重用并非面向对象独有的特性,在非OO语言中也有很多代码重用的例子,所以为了减低开发成本而是用代码重用并非一定要遵从OO规范,但是面向对象对重用提供了很多有利于代码重用的机制。所以遵从OO规范还是有必要的。

  书中提出“创建可重用代码的一种方法就是创建框架”,听到框架我很自然地想到网页设计的DIV+CSS的设计方式,它网页的结构与内容分开,使得网页的结构与内容互相不影响,当你登陆一个新闻网站,你打开几个新闻页面,你会发现这个页面的结构都是一样的,新闻内容都放在网页相同的位置中。 这里有很明显的重用,设计一个页面框架,当我需要增加一个新闻的时候就直接重用框架,把内容放到构架规定的内容位置就完成了,不用增加一个新闻要重新制作一个页面。同样的理念我们可以搬到系统的设计中。

  同时也提出“契约”一词(我第一次接触),认为契约(contract)是要求开发人员遵守应用编程接口规范所需的机制。 就是规定大家都这样做,就好像什么标准一样。就是你必须这样做。

 

  抽象类
  抽象类包含一个或多个没有提供任何具体实现的方法。怎样为之抽象?我自己理解就是一个没有实体的对象。好像一个岗位,老师,学生。这个就是抽象类,他们没有实体,但同时他们有他们需要完成的职责。例如:你到士多店跟售货员说要买一瓶饮料。售货员会问你要那种饮料。这里的饮料就是抽象类,因为他代表了多个对象,你必须提出来你具体需要怎样的饮料。抽象类在面向对象中不能实例化。
  契约规定所有饮料必须使用相同的语法来进行购买。例如,每种饮料都有一个buy()的方法。当我们需要买那种饮料的时候,直接使用该饮料的buy()方法。如果没有契约,那么可能每种饮料自己有自己的购买方法,当需要购买该饮料的时候就要先查阅说明文档,了解它的购买方法。还规定每个类对自己的动作负责,就是类自己内部要提供bug()方法的实现。 (本来想加个UML图来说明下的,不过不知道用什么软件来绘图,用Word又很麻烦,算了,自己明白就好)
  抽象类还可以提供一些实现,就好像饮料都会放进冰箱里面,这个行为所有饮料都一样的,当我们设计抽象类的时候可以把这个行为实现,不用在每个饮料中各自实现。

 

  接口
  接口跟抽象类一样也是一种保证框架契约的有效方法,但同抽象类不一样的是,接口不能提供实现,只能提供抽象方法。用interface关键字来定义接口。

 

  不用之处与应用范围
  在创建一个类的时候只能继承一个抽象类,接口就可以继承多个。他们可以同时存在,抽象类通常用于要创建的对象中有共性的时候,例如饮料都需要购买,都有价钱,那么我们就可以创建一个饮料的抽象类,里面有抽象方法bug()、属性price:integer。接口通常用于需要创建的对象中共性不强的时候。例如饮料包装的种类不一样,有瓶装、玻璃瓶等等,我们就可以创建一个接口,里面有一个包装方法的抽象方法pack()。同时饮料可以同时继承抽象类跟接口。然后在各自的类中实现抽象方法。

 

 

-------------------
  还有一些内容没写完,不过没时间啦,20分钟之后学校就要断网咯。
  今天过得还好吧,比较平凡。昨天说的衣服已经给钱了,希望送到来的时候不用失望就好。怕买到不好的东西,本来我不太想在网上买的,因为很难判断好坏,但宿舍的人一直坚持说服我。最后我还是决定买了,一直没试过。哈哈
  晚安啦。。 

posted @ 2009-11-05 23:40  尐傑.net  阅读(126)  评论(0编辑  收藏  举报