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

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

软件设计模式(概念理解学习)

概述 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设...
  • szzhuyike
  • szzhuyike
  • 2015年03月05日 11:53
  • 4002

从用户角度的软件设计

如果我们使用浏览器可以进行服务端业务逻辑和客户端界面逻辑所有的编程,类似于一个比较著名的技术SharePoint,但是它还是必需要开发人员进行二次的定制开发,从开发工具的角度去理解,它是一个史上来讲最...
  • luckeast
  • luckeast
  • 2017年03月23日 11:42
  • 343

物联网需要什么样的应用开发语言?

目前来说,是没有一套专门面向物联网应用开发的语言的,这不利于推动物联网的大发展,因此,必须要选择一种适合物联网特点的开发语言。下面我们结合物联网本身的特征,分析物联网对应用开发语言的要求。然后感觉这些...
  • hellochina15
  • hellochina15
  • 2016年11月22日 20:09
  • 8432

软件设计文档国家标准

操作手册(GB8567——88) 1引言 1.1编写目的 说明编写这份操作手册的目的,指出预期的读者。 1.2前景 说明: a.  这份操作手册所描述的软件系统的名...
  • cui55
  • cui55
  • 2014年02月26日 14:33
  • 7418

程序设计模式之设计模式的重大意义

首先说说设计模式的用途: 在软件系统里面,系统的健壮性,可维护性,可扩展性 非常重要,也是一个成熟的系统必不可少的。 软件系统架构暂时没有涉及,但是无论怎么架构最后通过程序去实现,而程序并非简单功能实...
  • s228245214
  • s228245214
  • 2015年08月12日 23:04
  • 723

河南省第十届ACM程序设计大赛参赛心得

今年上半年参加了好多比赛,从前到后有 天梯赛、 蓝桥杯 、自己学校的校赛、还有第十届ACM程序设计大赛。 省赛成绩不好啦,本来并不想写些什么,但是组织内部要求内部成员必须写一篇放到自己博客上。所以就...
  • wyxeainn
  • wyxeainn
  • 2017年05月09日 21:19
  • 516

深入DAO业务设计-软件分层设计

在以后任何的数据库的开发过程之中,客户端(可以简单的把主方法当做一个客户端)程序类一定不要出现任何的JDBC代码。 从数据库的开发开始就已经开始进入到了实际的项目开发环节,随着技术的不断发展与完善,...
  • qq_34280276
  • qq_34280276
  • 2016年10月19日 21:43
  • 365

linux 内核调试技术

linux 调试 目录[-] 一  调试前的准备二  内核中的bug三  内核调试配置选项1  内核配置2  调试原子操作四  引发bug并打印信息1  BUG()和BUG...
  • linuxarmsummary
  • linuxarmsummary
  • 2014年03月29日 20:20
  • 2733

【软件设计】六大设计原则讲解

1. 单一职责原则 -Single Responsibility Principle SRP,Single Responsibility Principle: There should...
  • scboyhj__
  • scboyhj__
  • 2015年08月21日 23:05
  • 8088

Java程序设计基本知识

第一章   Java语言概述 1.      对象的三个特性:封装、继承和多态。 封装:把对象的设计者和使用者分开, 访问级别:public, protected, default, private(...
  • u013058160
  • u013058160
  • 2016年05月08日 00:44
  • 1015
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:软件设计/编程的基本技术(附图)
举报原因:
原因补充:

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