目录
1.设计父类时考虑不周到,等到设计或者编写子类的时候,才发现父类需要修改、增加功能等等,都很平常
2.尽量避免多次写同样的代码
3. 持续改进
4.评价软件设计的高低的几个基本原则
内容
1.软件设计/编程中,有一门基本技术叫“面向对象编程”。面向对象编程的基本思路是对象封装和继承。继承的基本思路是,所有子类共同的部分,提取、抽象后,放到父类中。
这是一个说起来容易,做起来难的事情。父类总是先设计,先实现。一个父类一般都有多个子类。没有人能够先知先觉。设计父类时考虑不周到,等到设计或者编写子类的时候,才发现父类需要修改、增加功能等等,都很平常。例如
public class RequestInfo{
public DataItem getDI(String name){
}
}
public class DataItem{
public String getValue() {
}
}
当我们经常写
String cycCode = info.getDI("cycCode") == null ? null : info.getDI("cycCode").getValue();
的时候,我们自然会想,如果在 class RequestInfo 中增加一个函数 getDIValue() 就可以写更短的代码了:
String cycCode = info.getDIValue("cycCode");
这样做的好处,代码更简洁,更易懂,也更容易维护。
同样的道理,当我们经常需要从 info 中取 int value 的时候,我们自然会知道,应该往 class RequestInfo 中增加 getIntValue().
2.在软件开发的过程中,最基本的原则是,避免多次写同样的代码。举例来说:
这是很常见的基类设计时考虑不周导致的问题,每个子类有同样的代码,。解决方法也很简单,将共同的部分放在 base class 中就可以了:
3.软件行业和其他行业一样,要想做出质量好的产品,关键在于“持续改进”。持续改进的意思是,如果发现了不好的设计,就应该修改。然而,很多时候事情并不这样简单。
例如,一个公司有两百个同样的生产线,现在有人发现了一个改进办法,可以提高效率。我们都知道,不可能把所有的生产线同时进行改造,那样对于现有的生产造成很大的影响,并且从人力物力方面,也有很大问题。更好的办法是,对于新的生产线,采用新的改进办法。原有的生产线,既然还能工作,就不用立即修改,可以在以后逐步改进。
这个例子换成软件行业的话:
一个公司有两百个类似功能的软件模块/类(比如 xxxBPI),现在有人发现了一个改进办法,可以在子类中写更少的代码,提高效率,代码更易于维护。我们都知道,不可能把所有 xxxBPI同时进行改造,那样对于现有的开发造成很大的影响,并且从人力物力方面,也有很大问题。更好的办法是,对于新的xxxBPI,采用新的改进办法。原有的代码,既然还能工作,就不用立即修改,可以在以后逐步改进。
因此,大型的软件中,新老方法并用的情况很多。比如, MS SQL Server, 很多原有的代码是从 Sybase 购买,MS 的技术专家发现了一些提高性能的办法,在经过多年,多个版本更新后,才逐步完成了改进老的代码。在开源的项目上面,也有很多项目版本说明中申明,计划采用某某技术改写原有的代码,目前完成哪些模块,计划增加哪些模块。改进和增加新功能永远是同时进行的。
上面的例子,采用持续改进的方法后,变成下面的样子:
4.评价软件设计的高低的几个基本原则
评价软件设计的高低的几个基本原则依次为:易懂,易用,稳定性,功能。
易懂:VB 的用户之所以比 VC 多,在于它易懂。用 Word 写设计文档的人比用 Rose 的人多,也在于懂 Word 的人更多。易懂意味着可以用更短的时间学会。
易用:如果 class A 和 class B 完成同样的功能,但使用 class A 需要写的代码更少,我们就说 class A 设计得比 class B 更好。因为使用 class A 写代码,代码更短,开发效率更高。代码短对于以后的维护也更容易。
稳定性,功能:软件的卖点在于稳定性,功能。之所以这两项排在前面亮项后面,同样有事实为证:Unix/Linux 的稳定性、功能超过于 Windows,但是它的用户反而少,原因就在于它输在 “易懂,易用”这两项上面。