软件设计/编程的基本技术(附图)
目录
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,但是它的用户反而少,原因就在于它输在 “易懂,易用”这两项上面。
相关文章
- 技术解析丨C++元编程之Parser Combinator
- Linux驱动技术(三) _DMA编程
- 云+,技术思维升级之道
- 网络I/o编程模型8 IO的零拷贝技术
- 技术总监到底要不要写代码?
- 逸创云客服获“金耳唛杯”年度中国最佳客户中心技术产品奖
- 赛门铁克在2015财年发现终端技术需求复兴
- k8s 各种网络方案 - 每天5分钟玩转 Docker 容器技术(170)
- 外部 Storage Provider - 每天5分钟玩转 Docker 容器技术(149)
- 【技术写作】《风格的要素》中的编程格言 / The Elements of Style
- Autodesk hackathon 技术参考资料
- GTC面向全球AI开发者的会议,未来那些AI技术将会造福人类。
- 【项目精选】基于网络爬虫技术的网络新闻分析(视频+论文+源码)
- 专家称SOA技术应该采取云计算定价模式
- 跨浏览器指纹追踪技术:毫无障碍的查看你的浏览记录
- “云计算”技术首次引入呼叫中心领域
- 基于微服务和Docker容器技术的PaaS云平台架构设计
- 一个23岁的男孩没技术能不能学软件测试,是不是注定要打工一辈子?
- WCF技术剖析之三十一: WCF事务编程[下篇]
- WCF技术剖析之三十一:WCF事务编程[上篇]
- WCF技术剖析之三十:一个很有用的WCF调用编程技巧[下篇]
- WCF技术剖析之三十:一个很有用的WCF调用编程技巧[上篇]
- WCF技术剖析之二十七: 如何将一个服务发布成WSDL[编程篇]
- 听说中国最顶尖的原创安全技术都聚集在此了