|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
唉!都是钱闹的1.Swing和.net开发比较------从市场份额看.net开发主要占据大部分的中小型和中型的的桌面开发,原因是它封装了很多工具
措施一:改写类的实例办法
经由过程类承继完成代码重用不是准确的代码重用手艺,因而它并非最幻想的代码重用机制。换句话说,假如不承继全部类的一切办法和数据成员,我们没法重用该类内里的单个办法。承继老是带来一些过剩的办法和数据成员,它们老是使得重用类内里某个办法的代码庞大化。别的,派生类对父类的依附干系也使得代码进一步庞大化:对父类的修改大概影响子类;修正父类大概子类中的恣意一个类时,我们很难记得哪个办法被子类掩盖、哪个办法没有被子类掩盖;最后,子类中的掩盖办法是不是要挪用父类中的对应办法偶然其实不不言而喻。
任何办法,只需它实行的是某个单一观点的义务,就其自己而言,它就应当是首选的可重用代码。为了重用这类代码,我们必需回回到面向历程的编程形式,把类的实例办法移出成为全局性的历程。为了进步这类历程的可重用性,历程代码应当象静态工具办法一样编写:它只能利用本人的输出参数,只能挪用其他全局性的历程,不克不及利用任何非部分的变量。这类对内部依附干系的限定简化了历程的使用,使得历程可以便利地用于任何中央。固然,因为这类构造体例老是使得代码具有更明晰的布局,即便是不思索重用性的代码也一样可以从中获益。
在Java中,办法不克不及离开类而独自存在。为此,我们能够把相干的历程构造成为自力的类,并把这些历程界说为公用静态办法。
比方,关于上面这个类:
classPolygon{
.
.
publicintgetPerimeter(){...}
publicbooleanisConvex(){...}
publicbooleancontainsPoint(Pointp){...}
.
.
}
我们能够把它改写成:
classPolygon{
.
.
publicintgetPerimeter(){returnpPolygon.computePerimeter(this);}
publicbooleanisConvex(){returnpPolygon.isConvex(this);}
publicbooleancontainsPoint(Pointp){returnpPolygon.containsPoint(this,p);}
.
}
个中,pPolygon是:
classpPolygon{
staticpublicintcomputePerimeter(Polygonpolygon){...}
staticpublicbooleanisConvex(Polygonpolygon){...}
staticpublicboolean
containsPoint(Polygonpolygon,Pointp){...}
}
从类的名字pPolygon能够看出,该类所封装的历程次要与Polygon范例的对象有关。名字后面的p暗示该类的独一目标是构造公用静态历程。在Java中,类的名字以小写字母开首是一种非尺度的做法,但象pPloygon如许的类现实上其实不提供一般Java类的功效。也就是说,它其实不代表着一类对象,它只是Java言语构造代码的一种机制。
在下面这个例子中,修改代码的最后的效果是使得使用Polygon功效的客户代码不用再从Polygon承继。Polygon类的功效如今已由pPolygon类以历程为单元提供。客户代码只利用本人必要的代码,无需体贴Polygon类中本人不必要的功效。但它其实不意味着在这类旧式历程化编程中类的感化有所减弱。恰好相反,在组织和封装对象数据成员的过程当中,类起到了不成或缺的感化,并且正如本文接下来所先容的,类经由过程多重接话柄现多态性的才能自己也带来了出色的代码重用支持。但是,因为用实例办法封装代码功效并非首选的代码重用手腕,以是经由过程类承继到达代码重用和多态性撑持也不是最幻想的。
<p>
比如模式、敏捷方法什么的,这些思想好,但是实施的人没有理解而且没有正确运用这些知识导致了开发周期的延长。比如说对象,通过getName()方法不能获取对象的名字。 |
|