软件设计/编程的基本技术(附图)

原创 2004年09月08日 13:37:00

目录

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,但是它的用户反而少,原因就在于它输在 “易懂,易用”这两项上面。

软件设计中的算法

说到算法这一块,有大量的知识等着我们去了解,去学习,去探究。 【定义】 算法是对特定问题求解步骤的一种描述,它是指令的有序序列,其中每一条指令表示一个或多个操作。 【特性】 1 有穷性(Finite...
  • zx15732623832
  • zx15732623832
  • 2016-10-16 20:00:06
  • 294

由学习《软件设计重构》所想到的代码review(一)

前言 对于一个程序员来讲如何来最直接的来衡量他的技术能力和产出呢?我想最直观的作法是看他的代码编写能力,就拿我经常接触的一些程序员来看,他们买了很多技术重构类书籍,但是看完后代码编写能力并没有显著提高...
  • u013970991
  • u013970991
  • 2017-02-28 11:09:19
  • 2771

专利学习笔记7:说明书附图尺寸

    在CPC中设置说明书附图时,是有尺寸要求的,本文对此做简要介绍。    CPC要求说明书附图不能还有颜色信息,且尺寸不超过165mm*245mm,分辨率在72dpi-300dpi之间。    ...
  • qingwufeiyang12346
  • qingwufeiyang12346
  • 2018-03-16 01:34:44
  • 72

程序设计方法包括三个基本步骤

  • 2011年12月20日 23:58
  • 194KB
  • 下载

《Android内核剖析》的附图

  • 2011年08月30日 09:47
  • 12.55MB
  • 下载

浅谈聊天软件设计

PS:不是搞设计开发大佬,也不是某高校毕业的高材生,只是分享一些自己开发中的方法.实现的是低并发IM系统,千发级,只做于个人研究使用.1.TCP or UDP 的选择也是让人头疼的问题①TCP :它的...
  • qq_20198003
  • qq_20198003
  • 2018-03-29 23:43:55
  • 76

防御性编程技巧

在防御性编程的大框架之下,有许多常识性的规则。人们在想到防御性编程的时候,通常都会想到“断言”,这没有错。我们将在后面对此进行讨论。但是,还是有一些简单的编程习惯可以极大地提高代码的安全性。尽管看上去...
  • everpenny
  • everpenny
  • 2011-04-11 22:06:00
  • 4010

【转】移动机器人控制软件的设计与实现

  移动机器人的应用现在非常多,做一个移动机器人似乎也很容易,车体自己可以加工,也可以去买现成的;避障可以用超声阵列;导航可以用激光测距LMS;定位可以用电子地图加LMS加陀螺仪;驱动可以用各种电机及...
  • classicalmusiclover
  • classicalmusiclover
  • 2008-08-30 03:16:00
  • 3360

常用软件开发框架图

  
  • gonxi
  • gonxi
  • 2006-11-17 11:19:00
  • 2838

程序设计的画图工具

程序设计时经常需要画图,这里是一些画图工具,自行搜索去用吧 draw.io edraw max processon Staruml astah dia...
  • meloseven
  • meloseven
  • 2017-04-12 16:14:07
  • 384
收藏助手
不良信息举报
您举报文章:软件设计/编程的基本技术(附图)
举报原因:
原因补充:

(最多只允许输入30个字)