整理:vcc

1: 1107016 : ----------------------------------
*原文*(*jdev*于2001/07/22 02:21粘贴) *软件设计的一些体会和建议。 *
---------------------------------------------------------------------------
从对国内一些IT站点中内容的观察,觉得整体上软件编制的水平和国外有很多的差距:国内程序员有着很大的热情,但是相对缺乏实际软件的编制经验,而且过
多偏向与程序的编制,忽略了软件系统的设计和技术的开发,也是形成这种差距的主要原因.从本人从事软件行业近10年的经历,提出下面一些大家熟识的内容和
大家进行交流.
1. 程序设计语言选用的原则
就目前的趋势来说,IT业流行的有3种:
C/C++,Java和VB.C/C++是和操作系统最接近的程序设计语言,也是做有效的程序设计语言,Microsoft公司的Windows操作系统
就是用C/C++编制的,但是C/C++相对其它语言来说是最难操作的语言,一个好的C/C++程序员往往至少有7,8年的实际工作经验;VB是大家比较
熟悉的,也是在国内比较流行的入门快,比较容易地就可以编制一些简单的程序,它的缺陷就是编制大型软件时,性能上会有很多限制;Java的形成和发展才不
过6年的时间,但从一开始就和Internet和网络结合在一起,以及"Write Once, Run
Anywhere",加上鲜明的OOP的思想,再加上硬件成本的降低,Java逐渐成为程序设计的主流.
程序设计语言的选用往往取决于IT业的需要,就目前的趋势来说,C/C++主要应用在应用程序的底层,也就是说应用在对性能要求很高,和系统接触很紧密的
软件上,如实时系统,数据库,硬件借口,通讯软件和ERP软件等上,即Back-End.VB大多应用在Front-End,即用在人机界面上;Java
由于J2EE的出现,逐渐成为服务器端的事实标准,即应用在Middleware那层,Java/Corba现在是最流行的词汇.事实上,Java程序通
过JDBC,Java Connection Architecture等可以和Back-End的数据库,Legacy
System等相连接,又可以直接通过Java
Swing来编制GUI界面和用户交流,本身围绕J2EE的结构通过JNDI,RMI/IIOP来实现分布式运算(Distributed
Computing)以及Clustering来提高系统的可靠性,增强系统处理需求的能力,特别是基于Web的处理能力,还能够通过Messaging
(JMX)和JavaMail等来和其他系统交换信息,加上业界逐步对XML,XSLT,UDDI,Web
Services等新标准的认可,而这些标准无一不和Java语言有着紧密的联系,Java的发展也是在所难免的一种趋势.
2.OOP,Client/Server, Distributed Computing
OOP泛指Object-Oriented
Programming,是一种面向对象的程序设计,也是近年比较推崇的程序设计方式,因为它基于元件(Component),最大限度地重复利用,真正
做到"让最专业的人从事最拿手的事",从而保证了软件的合理性和节省了成本.比较流行的OOP语言包括C/C++,Java和VB,从应用的角度来说,J
ava从很大程度上实现了OOP的初衷,而C/C++和VB在实际应用中并没有完全做到OOP的要求.
Client/Server是以前比较通用的一种模式,主要特点是C/S关系的固定.
Distributed
Computing(分布式计算)是对C/S模式的扩展,最大特点就是相对C/S结构来说,Server端程序可以不固定,甚至可以动态进行调整,亦即相
对Client来说,Client不必确切知道Server端的具体情况而可以完成实际的操作.Naming Service是Distributed
Computing中最通用的一种实现方式,DNS,LDAP就是最通用的方式,对Java语言而言,JNDI提供了一种通用的方式;对Corba程序设
计而言,Corba Naming Service就是实际解决的方法.
3.协议(Protocol)和基于TCP/IP的程序设计
网络程序的编制不外于基于IP的TCP和UDP,更多的则基于TCP/IP.协议(Protocol)是基于TCP/IP的网络程序间(Client/S
erver, Server/Server,
Client/Client)信息交换的标准方式,通过确切定义的协议,即使使用不同的程序语言(C/C++.Java,VB等)的程序都可以进行通讯,
所以协议是网络程序的核心.大家熟悉的HTTP, SMTP, POP3,
IMAP等都是Internet上比较通用的协议.另外,象Napster也是一种新兴的P2P(Peer-to-Peer)的协议,SOAP也是一种逐
渐流行的协议,SOAP同时是Microsoft的.Net的基础,也是Web Services的基础.
4.系统的设计和程序的设计
系统的设计往往更着重于程序运营的环境,性能,通讯等方面,是一种更宏观,更负责的设计,也可能更为抽象.程序的设计着重于功能的实现.
下面通过一个实例来简单介绍.这个例子是我最近刚刚实现的一个,也是美国某大型通讯公司实时系统的一部分,系统涉及到了Corba
Notification Service, Messaging
Service(SonicMQ)和其它技术.这个实时系统从不同Domain或其它网络中采集实时信息,再进行处理,达到对整个网络进行实时监控的目的
.
从系统的角度来说,会有不同的数据流,对某一数据流,有Front-End的Adapter来接收相应的实时信息,再通过中间的系统处理送至Back-E
nd相应的处理程序中去.我们把每一个系统中相对独立的处理程序综合其特征,称为Service,所有不论Front-End,Middle-End还是
Back-End的系统构成都是作为Service的具体实例(Instance).然后通过建立ServiceManager来管理整个系统中的功能.
作为Service,就具有以下的特征;
- dependentServices: 这是当前Service的一个Dependent Service的一个列表, Dependent
Service是这样的Service, 就是这个Service的运行一定要在本Service已经运行的前提下才具有实际意义.
- requiredServices: 这是当前Service的一个Required Service的一个列表, Required
Service是这样的Service, 就是当前Servic一定要在这个Service已经运行的前提下才具有实际意义.
- initializeService(): 每个Service必须在运行前进行特定的初始化;
- clearService(): 每个Service必须在运行结束时清理系统环境;
- start(), stop(), pause(), restore(): 作为一个Service, 要能够被启动结束,暂停和恢复运行.
- getRunningStatus(): 返回Service实时的运行状态
- getStatus(): 返回Service实时的其它更多信息
如果用Java语言来实现就大致为:
public interface Service {
// dependent services
public void addDependentService(Service) throws ServiceException;
public Collection listDependentServices() throws ServiceException;
public void removeDependentService(Service) throws ServiceException;
// required Services
public void addRequiredService(Service) throws ServiceException;
public Collection listRequiredServices() throws ServiceException;
public void removeRequiredService(Service) throws ServiceException;
// initialize
public void initializeService() throws ServiceException;
// clear
public void clearService() throws ServiceException;
// start, stop, pause, restore
public void start() throws ServiceException;
public void stop() throws ServiceException;
public void pause() throws ServiceException;
public void restore() throws ServiceException;
// runningStatus
public synchronized int getRunningStatus() throws ServiceException;
// status
public synchronized Properties getStatus() throws ServiceException;
}
5. Layer Independence and Information Exchange
软件发展的方向必然会走向OPP和分布式运算(Distributed Computing),软件
功能和软件的程序设计语言、编译环境、运行环境独立,系统间信息交流和
系统无关。就象基于TCP/IP的各种Protocol构成了Internet的基础,Java和
C#向系统独立挺进,XML以及派生出来的各种交换膜是将构成商业服务间信息
交换的核心。
我们正处于一个崭新的时代,中国的软件事业即使从现在开始从头也不是太晚。
本人真心希望通过上面的文章来介绍一些当前软件编制和设计的趋势,也希望能够以自己的微薄之力,为中国软件事业的发展做一点贡献.
---------------------------------------------------------------------------


2: 1107029 : ----------------------------------
*原文*(*timeson*于2001/07/22 10:17粘贴) *回复: 软件设计的一些体会和建议。 *
---------------------------------------------------------------------------
说的很中肯啊,看来您从事开发有相当长的时间了,能不能就软件工程多发表一下高见???
我的email:rlinux@163.net
---------------------------------------------------------------------------