软件开发定制协议

2024-07-23

软件开发定制协议(共10篇)

1.软件开发定制协议 篇一

定制联建房屋协议书

甲方:

身份证:

电话: 乙方:

身份证:

电话:

为了更好地满足客户对住房的个性化需求,根据《中华人呢么共和国合同法》及其他现有法律、法规规定,甲乙双方在平等、自愿、协商一致的基础上就定制(联建)房屋达成如下协议:

一、定制(联建)房屋的坐落位置

定制(联建)房屋位于世全兴安名城

号商住楼

起第 开间店铺上方,土地规划用途为商住。

二、定制(联建)房屋的基本情况

乙方所定的房屋为本项目中的地上第 层套房(具体见附件一),该房屋协议约定建筑面积(含公摊面积)约

平方米,该房屋的用途为

,属框架结构,层高为

米,建筑层数为地上

层,地下

层。

三、计价方式与价款:

甲乙双方约定按建筑面积(含公摊面积)计算定制(联建)房屋价款:该房屋单价按建筑面积(含公摊面积)每平方米

元,总价款为人民币

佰元整()。

四、付款方式:乙方须按如下约定分期付款给甲方。在协议签订之日付定制(联建)房屋定金人民币

整()。

第一期:在本协议签订之日乙方在 年

日支付总价款的50%(含定金),即人民币

佰元整()。

第二期:当该房屋所在的建筑工程主体封顶之日,乙方再付人民币

佰元整()。

第三期:【可留人民币

拾万元整()办理按揭贷款】,其它前期款项必须按合同分期付款交清为止。

五、房屋装修:所定制(联建)房屋室内地板不抹面,外墙铝合金窗安装完整,阳台栏杆完整;楼梯间踏步、扶手、电梯安装完整,水、电(约每平方88元)管道进户;排水直管安装完整;楼梯间的公共进户门由各层套房用户共同出资安装,平均分摊费用;其余由乙方负责。

六、其它约定:

1、该房屋在工程验收前所发生的建筑费用概由甲方承担,房屋交付使用之日起所发生的费用概由乙方承担。

2、该房屋产权办理、水电、燃气、有线电视、电话、宽带网立户手续由甲方负责汇总上报办理,乙方配合,由此所发生的税、费等全部由乙方承担。若开发商或政府有关部门预收以上税、费,乙方应按要求及时交纳。

3、该房屋施工以建筑施工设计图为准,若乙方需变更,则须由甲方报经有关部门同意方可变更,否则,不予以变更。

4、乙方所定制(联建)的房屋如在正式商品房买卖合同签订之前需要更名的,甲方应予以同意,但在正式商品房买卖合同签订之后的,则由乙方自行负责,甲方不予变更。

5、本协议作为甲乙双方明确买卖关系的依据,待甲方与世全房地产开发商联系后,安排乙方另与世全房地产开发商签订正式商品房买卖合同,并进行备案。正式商品房买卖合同与本协议约定的套房为同一套房,正式商品房买卖合同签订后,除其中的售价及付款方式以本协议为准外,其余条款按正式商品房买卖合同执行。

6、因整个区域工程项目施工进度不同,所以甲方无法单方面确定产权证办理和水、电立户的时间,甲乙双方应本着诚信、谅解、合作的原则进行沟通协商,甲方要尽量争取早日办证和水电立户手续。

7、顶层以上的空间使用权、楼宇命名权归甲方所有,乙方无权干涉。

8、房屋面积确认及差异处理:房屋根据协议确定计价方式,协议建筑面积若与产权登记面积有差异,则以产权登记面积为准,按产权登记建筑面积(含公摊面积)结算房款,多还少补。

9、该房屋所在工程设计的地下停车位及停车间产权属甲方所有,其售租问题待工程结束后确定,乙方若要购买或使用则另行协商,售价以当时的市场价为准。

10、该房屋在本幢楼工程竣工验收合格后,予以交房;如果乙方要求提前交房使用,经双方协商,可以提前交付使用。

11、本套房平面图以最后的建筑竣工图为准。

12、违约约定:若乙方不能按时付款,则按应付未付款额日千分之一的违约金赔偿给甲方,但逾期不得超过壹个月。如逾期超过壹个月的,甲方有权单方面解除本协议,收回房屋

2.软件开发定制协议 篇二

1 应用软件编程模型的提出

.NET是微软公司推出的新一代互联网软件和服务战略,是一种面向网络、支持各种用户终端的开发平台环境。.NET平台创建了组件,并将组件作为其基本的元素。从本质上看,.NET组件是一个用任何.NET语言以插件形式开发的可互换的软件部件,它可以与其他应用程序实现互操作。.NET组件是以程序集[1](Assembly)的形式表现的。

.NET组件的最大优点在于,它深化了“模块化”编程的思想,为开发人员提供了一个“搭积木”的编程模型:多个组件模块通过一定的引用逻辑组装成一个有机的整体,即一个应用系统。这样就降低了系统设计的难度,同时增强了应用软件的可维护性。

然而,.NET组件也存在一些不足之处。⑴复用程度较低。众所周知,软件复用可以降低软件开发的复杂度,提高开发效率。但目前许多开发人员所积累的组件都是针对某个具体的应用项目而设计的,难以被其他应用软件所复用[2]。即使复用了个别组件,也由于复用粒度不大而不能取得明显效果。⑵耦合程度较高。同前文所述,多个组件是通过源代码级的引用关系而组合成一个整体的,这个整体具有不可分割性。即使仅仅修改其中的一个组件都得重新编译、部署整个应用系统。这样就增加了系统扩展和更新的难度。

如何弥补上述不足呢?首先,可以提取某一应用领域的共性,建立若干个基于复用目的的公共组件,并将这些组件按一定应用逻辑封装成一个复用粒度更大的应用框架,该应用框架提供对外扩展的接口,该接口就像电脑主机的USB接口一样,可以即插即用。然后,可以根据用户的具体业务需求分批完成若干个支持上述接口的专用组件———插件。最后,应用框架和插件通过接口即插即用而组合成一个应用软件。这样,就形成了“可定制应用软件=应用框架+插件”的编程模型。该模型的突出特点如下:(1)基于.NET平台,具有能与COM组件互操作、X-COPY部署等优点[1]。(2)同时支持“搭积木”和“接口”编程思想。(3)大粒度应用框架的复用,降低了软件复杂度,实现了软件敏捷开发。(4)即插即用的接口设计,大大提高了软件的可扩展性、可定制性、可维护性。

2 应用框架的设计

2.1 设计目标

本应用框架是定位于支持多层软件结构的桌面应用或智能客户端的可运行原型系统。其主要特点如下:(1)支持多层软件结构。具有支持用户界面层、业务逻辑层、数据访问层等的组件。(2)支持智能客户端。所谓智能客户端,是一个可扩展的能集成不同应用的桌面应用程序,它具有在线升级、离线运用、个性化用户界面等特征[3]。(3)不加载任何插件就可运行的原型系统。通过配置文件和插件可以敏捷定制一个应用软件。

2.2 体系结构

支持插件架构的应用框架体系结构,核心部分是由主应用程序组件、共享接口组件、插件和配置文件组成[4],次要部分包括被多个插件引用的公共基础组件(如通用数据访问组件等)和一些辅助工具(如在线升级器、XML文件编辑器、程序集查看器等),如图1所示。

2.3 动态运行机制

整个应用框架是个高内聚的系统,应用框架的运行由不同组件、模块分工协调完成。现对应用框架运行机制做总体设计如下:

(1)主应用程序MainApplication启动时读取系统配置文件App.config中的appSettings配置节,设置应用软件的标题。

(2)然后调用插件管理类PlugInController的LoadPlugIns () 方法。该方法利用.NET的反射特性[4]在主应用程序所在目录的plugins子目录下逐个搜索可用的插件(所有合法的插件类型前加有属性标志PlugIn),并将插件的相关信息(在PlugInAttribute和PlugInInfo类中定义)收集到一个SortedList类型集合体当中。同时通过插件属性标志PlugInAttribute的初始化参数得到菜单文本信息,根据菜单文本在主窗体中添加对应菜单项并注册菜单点击事件。

(3)当点击某菜单项时发生菜单点击事件,该事件调用LaunchPlugIn () 方法来实例化类型。

(4) LaunchPlugIn () 方法先根据(2)中的集合体记录找到与所点击菜单项对应的程序集和类型信息;再进行两种判断:该类型是继承自Form类还是Iplug接口。如果是Form类就实例化一个窗体,并将其加入到MDI主窗体中,最后调用Show () 方法;如果是Iplug接口就调用run方法,该方法已在对应插件中实现。

2.4 接口设计

如图1所示,本应用框架与插件进行通信的接口被封装在SharedApi.dll里面。本应用框架提供两种类型的接口[5]:⑴框架与插件交互的对偶接口Iplug和Ihost:其中主应用程序必须实现Ihost,而插件必须实现Iplug。⑵具有元数据特征的属性标志类[1]PlugInAttribute(以后简称插件属性):只要是给主应用程序定做的插件,其相应类型必须在前面添加插件属性,并且必须给出插件属性的两个位置参数。这两个参数分别对应的菜单项及其父菜单项的菜单文本。

2.4.1 框架与插件交互的接口

2.4.2 插件属性标志

2.5 配置文件

应用程序使用配置文件可以更好地适应需求的变化。本应用框架的配置文件为.NET框架所支持的标准XML文档。由于XML是Internet上数据交换的通用语言,所以在智能客户端应用中配置文件可以方便地从服务器传递到客户端[1]。本配置文件可以为主应用程序、插件、通用数据访问组件、在线更新组件所共用。以下给出配置文件App.config的示例代码:

2.6 对插件的即插即用

如图1所示,在主应用程序中包含一个插件管理类PlugInController,它提供两个重要方法,是实现机制的关键。

(1) LoadPlugIns () 方法:负责遍历plugins子目录的所有程序集,将合法插件的相关信息(菜单文本信息、程序集名称和程序集包含类型信息)记入在一个plugArray集合体中,以提供LaunchPlugIn () 方法中相关参数。同时,还调用GetMenus () 私有方法,根据菜单文本信息在主窗体中添加对应菜单项并注册菜单点击事件。

(2) LaunchPlugIn () 方法:负责响应菜单点击事件。判断两种不同的插件类型(Form类或Iplug类),进行类型实例化,并调用相应类型的方法Show () 或Run () 。

需要注意的是,在主窗体加载事件调用LoadPlugIns () 之后,plugins子目录中的所有插件都将被锁定,如要进行删除或更新操作,就会出现“文件正被另一个人或程序使用”的错误信息,这样就阻碍了在线更新功能的实现。这里给出一个简单的解决办法:.NET框架有一个影像复制(Shadow Copy)特性,当在一个应用程序域(appdomain)中启用shadow Copy时,装载在该应用程序域的所有程序集将被复制到一个影像复制缓冲目录,并从缓冲目录中使用这些程序集,这样就解除了对原有文件的锁定,可以对原文件进行随意更改[6]。以下给出LoadPlugIns () 方法的核心代码:

2.7 用户界面设计

2.7.1 用户界面的结构

应用框架的用户界面设计为多文档界面[1](MDI)结构。如图1所示,在主应用程序中有一个MainForm类,该类定义了父窗体界面(主要由菜单栏、工作区、状态栏组成),并提供退出系统、多窗体排列等基本功能。如图2所示。插件窗体为子窗体,其子窗体界面及功能由相应插件完成。

2.7.2 动态菜单的生成

图2所示菜单为不添加任何插件时父窗体的所有菜单项。当有插件添加时由LoadPlugIns () 方法调用GetMenus () 方法,动态添加其他菜单项。GetMenus () 方法首先根据插件信息中的父菜单文本 (pmenutext) 确定子菜单项的位置。如果父菜单已存在,则在该父菜单下添加子菜单项。如果父菜单不存在,则先创建父菜单项,再在该父菜单下添加子菜单项。同时对每个菜单项的点击事件进行注册。其核心代码如下:

2.8 在线更新组件设计

.NET框架所具有的X-COPY安装(不写注册表)的特性,再加上在线更新的功能,就可实现接近“零成本”的软件部署。在线更新组件可以普通插件或独立程序(如图1中UpDater.exe)的形式提供。如果采用普通插件的形式,有必要创建一个独立的线程完成文件下载任务,以免影响主应用程序的正常运行。

在线更新组件UpDater.exe设计的原理如下:UpDater.exe可在不启动主应用程序的情况下实现应用系统的自动更新。首先读取系统配置文件App.config中的Update配置节,获取更新资源的网络地址和已安装组件的当前版本。然后根据网络地址找到服务器上存放所有待更新资源的文件夹,该文件夹同时包含一个以修改日期命名清单文件,把该修改日期与当前版本相比较,如果前者大于后者,就将清单文件中列举的所有文件依次下载到本地目标位置。接着将Update配置节中的版本重写为修改日期。如果前者等于后者,则说明无需更新。最后,自动关闭更新程序。

以下是资源清单文件2006-12-01.xml的示例代码:

2.9 通用数据访问组件设计

在图1中,DataAccess.dll组件负责为数据库应用程序提供基础服务。其主要作用是采用简单工厂(Simple Factory)设计模式,对外屏蔽数据源类型的差异,实现对OLE DB、SQL Server等数据库的通用访问[7]。它提供读取配置文件信息(连接字符串、查询字符串),返回数据库连接接口(IDbConnection)和数据适配器接口(IDbDataAdapter)等功能。本组件在实践中可以通过在线更新不断完善。

3 插件

以上已经初步建立起一个基于插件架构的应用框架。该应用框架本身就是一个可运行的系统。它是经过测试的大量相关代码的封装,也是一个面向特定问题域的完整的设计封装,非系统设计人员无须详细了解。但是对于为用户开发插件的程序员,必须明确插件编写的如下要求。

(1)一个有效的插件类型只能继承自Form基类或者Iplug接口。

(2)一个有效的插件类型必须在其类型前加上PlugIn属性标志。

(3)插件编写,不要在一个插件中捆绑3个以上类型[5]。否则会降低系统运行效率。

(4)插件加载时会在主窗体中自动添加一个菜单项,如需要实现多层菜单可在插件中以上下文菜单形式提供。

4 应用软件的定制

应用框架设计的目的是为了复用该框架,实现应用软件的敏捷定制。作为示例,假定要为某中学定制一个学生管理信息系统。要定制该应用软件,需要开展的主要工作是:调查分析用户需求,编写适应用户需求的插件,最后会通过网络部署插件。以下仅给出两个插件的编写范例。

4.1学籍信息编辑插件

4.2信息系统帮助插件

5 结语

综上所述,应用框架的设计并复用可以使应用软件的开发不必每次“从零”做起,大大降低了软件开发的复杂度,缩短了开发周期;插件的即插即用可以使应用软件随时更新、扩展所需的功能。因此,“应用框架+插件”的编程模型,实现了应用软件的敏捷定制,具有良好的应用前景。

参考文献

[1]Christian Nagel, Bill Evjen, Jay Glynn.C#高级编程[M].第4版, 北京:清华大学出版社, 2006.

[2]杨海澜.基于组件技术的学籍管理信息系统研究[J].武汉交通职业学院学报, 2006, 7 (1) :70-71.

[3]王介之, 陈志刚.利用WEB服务实现智能客户端应用[J].计算技术与自动化, 2005, 24 (1) :85-86.

[4]JasonClark.Let Users Add Functionality to Your.NET Applications with Macros and Plug-Ins[J/OL].MSDN Magazine, October2003.

[5]Joel Pobar.Dodge Common Performance Pitfalls to Craft Speedy Applications[J/OL].MSDN Magazine, July2005.

[6]Junfeng Zhang.AppDomain and Shadow Copy[EB/OL].http://blogs.msdn.com/junfeng/archive/2004/02/09/69919.aspx, Febru ary09, 2004.

3.为中小企业定制软件 篇三

中小企业在我国国民经济中占有重要的地位。据统计,我国的中小企业吸纳了75%左右的城镇人口和农业转移劳动力就业,对GDP的贡献超过了60%,对税收的贡献超过了50%。而创新项目中65%的专利、80%的产品开发也来自于中小企业。由此可见,中小企业是一群具有实力、并且非常活跃的企业群体。

在如今世界经济不景气的情况下,中小企业的信息化尤为关键,可增加它们的竞争能力,提升管理水平。可事实情况是,能满足中小企业信息化需求的管理软件少而又少,更谈不上把握中小企业的个性化需求了。

“智能化、人性化以及软件适应企业是中小企业管理软件市场发展的必然方向,谁把握了这个方向,谁就能满足中小企业的信息化需求。”任我行软件公司副总经理宁洪说,公司研发团队对于整个管理软件环境的变化、信息技术的发展趋势,甚至电脑操作方式进行了研究后发现,尊重用户操作及浏览习惯,把对于软件的操控权最大程度地交给用户,是保证软件“简单、易用、智能化、人性化”的重要思路。

任我行公司认为,全国中小企业大概有1000万家,任我行旗下的系列软件占到30%的市场,其中正版用户为60万。通过10多年的发展,任我行公司逐步了解了中小企业的需求,并于最近发布了第二代管理软件——管家婆辉煌Ⅱ、财贸双全Ⅱ系列产品。

无论大型企业的管理软件还是中小企业的管理软件,一般来说,只要是通用管理软件,基本只能满足80%的用户需求,而针对20%的需求需要定制。但这些定制化工作不但消耗企业的资源,也让厂商投入了大量的时间和精力,却只能为一家企业服务。为此,如何能让软件适应企业,成为任我行公司研究的方向。

此次发布的新产品是任我行公司转变服务理念的表现,通过“让企业适应软件”向“让软件适应企业”理念的转变,解决了客户个性化需求与软件功能之间的矛盾。譬如,在管家婆II中,用户可根据需求调整菜单,更可利用鼠标右键菜单的灵活设计,让软件功能呈乘数级增加。而用户用不着的一些功能,也可以通过简单的操作简化或剔除。

4.软件开发定制协议 篇四

一、EduOffice数字音乐教学软件

《EduOffice数字音乐教学软件》 由“EduOffice数字音乐教学授课软件”、“EduOffice音乐教学备课软件”、“EduOffice谱音同步工具软件”三款软件构成。

授课软件配有丰富的教学资源和教学工具,可实现音乐普及教学中的“听赏与歌唱”教学,及“乐理与器乐”教学;独立的备课软件,方便教师制作个性化的教学课件;特有的谱音同步工具软件,能让曲谱的音符、歌词与范唱、伴奏音频同步播放,让歌唱教学“活”起来。

EduOffice数字音乐教学授课软件 1.课本课件

配有教育部审定义务教育课程标准教学用书配套课本课件,有效减轻老师的备课负担。所有课件均可进行乐谱播放,播放过程中可任意选择定位乐谱和歌词,并可变速变调。

2.音乐听赏课件

提供海量音乐听赏课件,满足不同年级的听赏需求。

3.范唱聆听与七式学唱

五线谱乐谱、简谱乐谱均可进行范唱播放、节奏播放、旋律播放、哼唱播放、唱名播放、试唱播放、伴唱播放。

范唱播放,播放该曲目完整的演唱、演奏示范; 节奏播放,人声演唱歌曲节奏,代替教师打拍子;

旋律播放,钢琴演奏该曲目旋律,还可设置128种演奏音色; 哼唱播放,人声哼唱歌曲旋律; 唱名播放,人声演唱歌曲音符的唱名; 试唱播放,人声演唱歌曲的歌词; 伴唱播放,播放歌曲伴奏。支持到白板的互相转换,方便讲解。4.选谱播放

在同一页面内可以分别播放五线谱和简谱乐谱。可从任意位置选择任意范围进行播放。可跨小节播放,可播放单音符。

5.选词播放

可通过选择任意歌词确定播放范围,包括多段落与跨段落歌词选择。支持段落、反复、跳转、省略等播放顺序标记,能实现乐谱的完整正确播放。包括终止符在中间位置。

6.更改音色、调式、速度

播放时可改变音色、调性、速度;还可直接操作电子琴或电钢琴的音色按钮改变音色进行播放,或调用电子琴或电钢琴的音色通过电子琴或电钢琴的扬声器发声。用户也可自行添加VSTI音色库播放。

7.集成化多媒体播放

音频、视频、动画多媒体教学资源播放器实现了音乐聆听、音乐欣赏、音响与音乐体验、音乐与相关文化感受。音频可实现变速、移调播放,视频、动画按教学需要切换演示,还可进行播放控制,播放中的动画、视频可进行板书标注讲解。

8.识读乐谱 支持五线谱课件教学、简谱课件教学、五线谱与简谱混合排版课件教学。乐谱课件可以进行播放视听,播放开始时自动识别拍号,方便学生掌握节拍,还可显示标注了拼音的歌词,满足低年级的教学需要。

9.一键显隐音名、唱名、线间

虚拟键盘可一键显隐音名、唱名,包含等音显示,并可随调式同步转换;可在虚拟键盘上直接弹奏发声,并在五线谱表标记出相应位置,使学生在学习中潜意识地吸收与利用基础乐理知识。一键显隐五线谱谱表线间关系,使得线间知识学习更加直观。

10.调式、音程尺、和弦尺与节拍器

系统支持15种调式讲解,13组音程尺,32组和弦尺同时对照讲解。

在五线谱表与模拟音乐键盘上的唱名随调号而改变,可直观地显示五线谱表与调号、音名、唱名之间的关系。

从小二度、大二度到纯八度等13种音程组,支持音程、根音、冠音、度数、音数等各种音程知识教学。定位音程根音位置,可以方便在五线谱表与模拟音乐键盘上找到不同性质的音程。

32组示范和弦,可进行三和弦、七和弦等各种和弦内容教学。定位和弦的低音位置,可以方便在五线谱表与模拟音乐键盘上展示原位和弦及转位和弦,以及不同和弦的比对与讲解等。

节拍器,可根据需要设置不同节拍,播放速度,方便节奏教学。

11.等音讲解工具

虚拟钢琴键盘上的等音,可以根据键盘触摸区域直接输入,并在五线谱表上显示有升音符和降音符的变音音符。

系统具有乐理讲解模式,在讲解模式下自动记录键盘弹奏的音符、音程尺与和弦尺输入的音符组在五线谱上的位置,并可进行板书标注,使得乐理讲解更流畅。

12.琴谱音同步映射

MIDI键盘、虚拟钢琴键盘与五线谱表相互映射,五线谱表线间显示,方便理解与讲解三者同步操作与显示,教学内容直观地展示,使学生更易理解。

13.音乐知识库

提供20多万字的音乐知识库,包含乐理知识、中西方乐器知识、中国音乐(民乐演奏形式、中国曲艺、中国戏曲)、西方音乐、名曲名家等。音乐知识库对音乐课本中所出现过及涉及到的音乐知识进行图文讲解,并含有对名词的解释,帮助学生理解课本内容

1)一键切换88键和61键音乐键盘

2)可以即兴录制弹奏内容,反复回放、并支持导出MIDI文件方便传播,分享

3)内置白板讲解功能,提供铅笔、笔迹颜色、板擦、漫游等功能,可以在五线谱谱表上直接标注,使得乐理知识讲解更加方便

EduOffice音乐教学备课软件 1.独立备课软件

教师可完整按自己的教案设计,轻松完成一堂高质量表现力丰富的课件备课。

2.全音乐元素混编混排

支持五线谱、简谱、图像、音频、视频、动画、文本、表格、图形混合编辑排版,可以输入文本,插入标题字、常用图形、表格,可对表格进行编辑,单元格合并、拆分。

3.五线谱课件编辑与制作

五线谱课件的编辑与制作,包括音符组输入、和弦输入、歌词输入,并具有符尾自动调整功能;也可手动选择符尾的摆放位置,便于多声部乐谱的编排,提高了老师备课效率。

4.简谱课件编排与制作

简谱课件的编辑与制作,可选择一个或多个音符添加减时线等,为教师的备课内容提供更多素材。

5.音乐符号的无障碍输入

文本框与表格可插入任何形式的音符、谱表、谱号、调号、拍号、乐理符号、演奏记号等。

6.音乐符号库

完备的音乐符号库,包括基础的谱表、谱号、调号、拍号、音符、歌词等;同时也包括变音记号、演奏记号、谱曲标注等,更具体地展现乐谱信息,帮助学生理解乐谱内容所传达的情感,支持乐理课件及音乐知识课件编辑与制作。

7.歌词智能关联与标注拼音

具有歌词智能对齐与歌词自动添加拼音、多音字功能;谱表、音符、连音线、小节线、歌词等元素能智能关联、移动。

支持五线谱、简谱乐谱与文本、表格混合编辑,可将谱表中的乐符和乐符组直接拖动至文本或表格中,可设置文本或表格中乐符的大小、颜色、行间距。

8.音符字符化

音符可插入文本框或表格内,以字符方式进行编辑;也可随时将字符化的音符提取出来恢复成音符状态。

9.教研交流

音符及乐谱片段可直接拷贝到Word、PPT等软件中,便于教研交流。

10.谱音同步软件

制作包含范唱、伴唱的音乐课件。

教学资源 1.课本课件

提供14套音乐课本课件,乐曲配套的可播放乐谱课件,满足不同地区不同年级的教学需求。

2.音乐听赏课件

提供海量音乐听赏课件,满足不同年级的听赏需求。

3.基础乐理课件

提供十万字左右的基础乐理课件,对音乐课本中所出现过及涉及到的音乐知识进行图文讲解,并含有对名词的解释,帮助学生理解课本内容。

4.中外音乐课件

提供民乐演奏形式、中国曲艺、中国戏曲、西方音乐、名曲介绍、音乐家介绍等中外音乐知识课件,近十万字的中外音乐课件富有各国家、各民族、各地区音乐形态特征,方便教师调用讲解中华民族文化,音乐文化多样性等内容。

5.乐器百科课件

包含中国乐器、西洋乐器在内的十五种类乐器知识课件,数万字的乐器百科课件方便备课所需、授课演示,有效提高教师备、授课效率。

6.完备的乐谱符号库 提供完备的乐谱符号库,包括谱表、谱号、调号、拍号、音符、音符组、歌词等。

7.丰富的乐谱标注符号库

提供各种反复线、强弱线等变音演奏标记;速度术语、力度术语、表情术语、演奏法术语、声部术语、曲体名称等演奏记号;各种谱曲标注符号。音名、唱名、形声字、指法记号。

8.教学图库

5.软件开发员工保密协议 篇五

甲方:

住所:

法定代表人:

乙方:

住所:

身份证号码:

因乙方现为甲方提供服务和履行职务,已经(或将要)知悉甲方的商业秘密。为了明确乙方的保密义务,有效保护甲方的商业秘密,防止该商业秘密被公开披露或以任何形式泄漏,根据《中华人民共和国合同法》、《中华人民共和国反不正当竞争法》《中华人民共和国劳动合同法》及国务院有关部委的规定,甲、乙双方本着平等、自愿、公平和诚实信用的原则签订本保密协议。

第一条:商业秘密

1,本协议所称商业秘密包括:技术信息、专有技术、经营信息和甲方公司《文件管理办法》中列为绝密、机密级的各项文件。乙方对此商业秘密承担保密义务。本协议之签订可认为甲方已对公司的商业秘密采取了合理的保密措施。

2、技术信息指甲方拥有或获得的一切技术信息,包括但是不限于有关开发和产品销售的技术方案、软件开发设计文档、软件源代码、软件加密算法、软件加密器材、数据库、实验结果、技术数据、以及其它技术文档、涉及商业秘密的业务函电等一切有关的信息。

3、专有技术指甲方拥有的有关生产和产品销售的技术知识、信息、技术资料、制作工艺、制作方法、经验、方法或其组合,并且未在任何地方公开过其完整形式的、未作为工业产权来保护的其他技术。

4、经营信息指有关商业活动的市场行销策略、货源情报、定价政策、不公开的财务资料、合同、交易相对人资料、客户名单等销售和经营信息。

5、甲方依照法律规定(如在缔约过程中知悉其他相对人的商业秘密)和在有关协议的约定(如技术合同)中对外承担保密义务的事项,也属本保密协议所称的商业秘密。

6、乙方在甲方任职期间所完成的与甲方业务相关的发明创造、作品、计算机软件、技术秘密或其他商业秘密信息,原则上归甲方所有。

乙方主张由其本人享有知识产权的,应当及时向甲方申明。经甲方核实,认为确属于非职务成果的,由乙方享有知识产权,甲方不得在未经乙方明确授权的前提下利用这些成果进行生产、经营,亦不得自由向第三方转让。乙方没有申明的,推定其属于职务成果,甲方可以使用这些成果进行生产、经营或者向第三方转让。即使日后证明实际上是非职务成果的,乙方亦不得要求甲方承担任何经济责任。乙方申明后,甲方对成果的权属有异议的,可以通过协商解决;协商不成的,通过仲裁或诉讼途径解决。

7、乙方因职务上的需要所持有或保管的一切记录着甲方秘密信息的文件、资料、图表、笔记、报告、信件、传真、磁带、磁盘、计算机、加密狗以及其他任何形式的载体,均归甲方所有,而无论这些秘密信息有无商业上的价值。

若记录着秘密信息的载体是由乙方自备的,则视为乙方已同意将这些载体物的所有权在甲方需要的时候转让给甲方。甲方应当在乙方返还这些载体时,给予乙方相当于载体本身价值的经济补偿。

但当记录着秘密信息的载体是由乙方自备的,且秘密信息可以从载体上消除或复制出来时,可以由甲方将秘密信息复制到甲方享有所有权的其他载体上,并把原载体上的秘密信息消除。此种情况乙方无须将载体返还,甲方也无须给予乙方经济补偿。

第二条:保密义务人

乙方为本协议所称的保密义务人。保密义务人是指为甲方提供相关服务而知悉甲方商业秘密,并且在甲方领取报酬或工资的人员。

甲方向保密义务人支付的报酬或工资中已包含保密费,此处不再重复支付。

保密义务人同意为甲方公司利益尽最佳努力,在履行职务期间不组织、参加或计划组织、参加任何竞争企业,或从事任何不正当使用公司商业秘密的行为。

第三条:保密义务人的保密义务

1,保密义务人对其因身份、职务、职业或技术关系而知悉的公司商业秘密应严格保守,保证不被披露或使用,包括意外或过失。即使这些信息甚至可能是全部地由保密义务人本人因工作而构思或取得的。

2,在服务关系存续期间,乙方未经甲方许可,不得以竞争为目的、或出于私利、或为第三人谋利、或为故意加害于公司,擅自披露、使用商业秘密、制造再现商业秘密的器材、取走与商业秘密有关的物件;不得刺探与本职工作或本身业务无关的商业秘密;不得直接或间接地向公司内部、外部的无关人员泄露;不得向不承担保密义务的任何第三人披露甲方的商业秘密;不得允许(出借、赠与、出租、转让等处分甲方商业秘密的行为皆属于“允许”)或协助不承担保密义务的任何第三人使用甲方的商业秘密;不得复制或公开包含公司商业秘密的文件或文件副本;对因工作所保管、接触的有关本公司或公司客户的文件应妥善对待,未经许可不得超出工作范围使用。

3,如果发现商业秘密被泄露或者自己过失泄露商业秘密,应当采取有效措施防止泄密进一步扩大,并及时向甲方报告。

4,服务关系结束后,公司保密义务人应将与工作有关的技术资料、源代码、工作相关工具、客户名单等交还公司。

5,鉴于保密义务人在职期间,获得或制作的商业秘密(包括技术秘密和经营秘密)对公司在竞争中的巨大价值,在劳动合同关系存续期间和终止之后,保密义务人均承认公司因投资、支付劳动报酬而对这些商业秘密的所有权,因此保密义务人同意甲方按下列方式执行:

(1)保密义务人因各种原因离开公司,自离开公司之日起年内不得自营或为公司的竞争者提供服务,不得从事与其在公司生产、研究、开发、经营、销售有关的相关工作(包括受雇他人或自行从事),并对其所获取的商业秘密严加保守,不得以任何理由或借口予以泄露。甲方按《中华人民共和国劳动合同法》的规定向乙方支付补偿金。

(2)乙方应提前一个月向甲方提出解除劳动合同的申请。在此期间,甲方有权调动乙方的劳动岗位。

乙方如违反本项规定的,应承担本协议第五条规定的违约责任。

第四条:保密义务的终止

1、公司授权同意披露或使用商业秘密。

2、有关的信息、技术等已进入公共领域。

3、乙方是否在职、劳动合同是否履行完毕,均不影响其保密义务的承担。

第五条:违约责任

1,保密义务人违反协议中的保密义务,应承担违约责任,如有违约行为须向甲方支付违约金50000元(人民币大写伍万元)。

2,乙方如将商业秘密泄露给第三人或使用商业秘密使公司遭受损失的,乙方应对甲方进行赔偿,其赔偿数额不少于由于其违反义务所给甲方带来的损失。

3,前款所述损失赔偿按照如下方式计算:

①损失赔偿为甲方因乙方的违约或侵权行为所受到的实际经济损失,计算方法是:因乙方的违约及侵权行为导致甲方的产品销售数量下降,其销售数量减少的总数乘以每件产品利润所得之积;

②如果甲方的损失按照方法①所述的计算方法难以计算的,损失赔偿额为乙方因违约或侵权行为所获得的全部利润。计算方法是乙方从每件与违约或侵权行为直接相关的产品获得的利润乘以在市场上销售的总数所得之积;或者以不低于甲方商业秘密许可使用费的合理数额作为损失赔偿额。

③甲方因调查乙方的违约或侵权行为而支付的合理费用,如律师费、公证费、取证费等,应当包含在损失赔偿额之内。

④因乙方的违约或侵权行为侵犯了甲方的商业秘密权利的,甲方可以选择根据本协议要求乙方承担违约责任,或者根据国家有关法律、法规要求乙方承担侵权责任。

4,因乙方恶意泄露商业秘密给公司造成严重后果的,公司将通过法律手段追究其侵权责任,直至追究其刑事责任。

第六条:争议的解决方法

因执行本协议而发生纠纷的,可以由双方协商解决或共同委托双方信任的第三方调解。协商、调解不成,或者一方不愿意协商、调解的,将提交仲裁。

第七条:双方确认

在签署本协议前,双方已经详细审阅了协议的内容,并完全了解协议各条款的法律含义。

第八条:协议的效力和变更

1,本协议自双方签字或盖章后生效。

2,本协议的任何修改必须经过双方的书面同意。

第九条本协议壹式两份,甲乙双方各执壹份。

甲方(盖章):乙方(签字):

甲方经办人(签字):身份证号码:

6.软件开发项目个人承包协议 篇六

甲方:广州xx生态科技有限公司

乙方: 身份证:

甲乙双方就“xxxxxx平台系统”开发项目签订个人包干协议,乙方为甲方在职员工,根据甲方公司项目管理及绩效考核方式,与乙方签订工作协议:

1、甲方评估项目开发时间及开发需求给乙方,乙方根据项目时间节点完成系统开发要求,甲方只考核乙方开发成果;

2、在项目开发阶段,甲方有权提出修改意见并评估乙方的进度时间;

3、个人项目包干期间,甲方不限制乙方办公地点及上班时间,需要与其他同事对接的工作内容必须提前沟通协调好;

4、乙方月薪为人民币:元,现“XXXX平台系统”包干项目所需时间2个月,即2018年7月日至2018年9月日完成系统开发及对接,总薪酬为人民币元,社保、公积金及其他公司福利正常享受,开发期间,甲方每月发放乙方人民币3500元,项目测试合格并交付后,发放余款元;

7.软件开发定制协议 篇七

数据密集型系统是以数据为核心,对数据进行收集、分析、处理与展现的软件应用系统[1]。当前,数据密集型系统已经广泛应用于电信、金融、政府、制造等,积累了大规模数据的行业与领域。就数据密集型系统本身的结构而言,它一般具有系统规模大、多应用类型、多层次结构等特点。其中,多层次特性表示一个完整的数据密集型系统,可以被划分为不同实现层次,并由不同的子系统按照一定的规则进行集成后得到。在组成数据密集型系统的一组子系统中,数据展现子系统主要负责以各种方式可视化地展现系统所处理的数据以及处理的结果,例如一种通行做法是以报表的形式展现数据。报表本身又可分为多种类型( 由国家、行业规定的报表,或者企业自定义的报表) ,每种报表也可由不同的数据项组合而成。另外,图表也是一种较为常见的数据展现形式。

通过分析不同的数据密集型系统,我们发现这些系统在数据展现方面具有类似的功能,例如类似的数据预处理以及数据集展现方式等。此外,还包括权限控制等这一类与数据处理、显示无直接关联,但影响子系统使用的功能[2,3]。另一方面,不同的应用对数据展现的需求也存在差异,例如商业报表系统主要以表格的形式展示数据,而地质信息展示平台则需要根据地理坐标等数据在地图上进行绘制。

为了降低重复开发数据展现子系统的工作量,保持数据展现效果的一致性,可以采用软件产品线开发方法以定制化的方式来开发一个数据展现子系统。软件产品线是针对特定领域的、具有一组相似特征,并从预先生产的核心资产开发而来的软件产品的集合[4,5],其开发方法依赖于领域核心平台,通过对领域内的可变性进行定制的方式开发出单个软件产品。相比于传统的面向领域的软件产品线,集成在不同领域应用产品中的数据展现子系统可以视作为一种跨领域的特殊类型的软件产品线。一方面,这种产品线同样涉及需求的共性/可变性分析、可变点的定制方案设计等活动; 另一方面,数据展现子系统中的可变性类型更为丰富,例如,商业报表系统在生成的报表范围以及单个报表的内部结构等不同层次方面都存在可变性,同时针对这些可变点的定制也涉及更多的角色与时间点。因此,需要针对这些特性化的需求改造软件产品线的分析与构建过程以及特定的数据展现子系统的定制化开发过程。

基于以上实际需求,本文旨在搭建一个面向数据展现子系统的软件产品线,并归纳出基于可变点的数据展现子系统的定制化开发方法。首先,本文提出一种扩展可变性类型的软件产品线特征模型元模型,该元模型从数据功能维度和数据展现维度对特征属性进行了扩充,涵盖更多语义。其次,基于该元模型总结出一套针对需求文档的特征建模过程,并为识别出的不同类型的可变性提出了相应的可变点实现技术方案。再次,为了支持基于可变点的子系统实例的定制化开发,提出一套两阶段( 开发者定制和用户定制) 的可变点定制过程。该过程用于确定在某个阶段应被定制的可变点,并且保证可变点定制结果的一致性。最后,本文基于两阶段定制过程,设计并实现一个半自动化的可变点定制工具。另外,使用该工具配置了一个数据示例系统,验证了可变点实现方案与定制过程的可行性。

1 相关工作

与本文相关的工作分为数据展现子系统的构造以及软件产品线开发方法两个方面。

文献[2,3]分别介绍了基于Web的多维数据平台和地质数据平台的构造过程。开发者基于分模块的原则针对单个数据展现系统分析其需求并设计其架构,设计出的模块包括数据收集、数据存储、数据访问、数据处理和数据展现等。与之相比,本文的工作面向一组具有相似需求的数据展现子系统,采用软件产品线的方法分析其需求的共性与可变性,并以可变点定制的方式支持快速的应用产品开发。

传统的软件产品线开发方法涉及从需求文档到特征模型、再到软件体系结构的映射过程。在软件产品线开发中,特征建模是反映产品线中共性和可变性的一种手段,目的是将领域需求映射为用分层的树状结构表示的特征模型[6,7]。特征建模中一项重要的工作是可变性识别。可变性是指产品线所涵盖的各个产品之间的差异性[8]。可变性一般会关联到某个可变点上。可变点是可变性在产品线所覆盖的软件产品中的具体体现,而变体则是软件产品中各个可变点上各种特定的可变性实例[9]。Kang提出的FORM方法对从特征模型到系统设计的过程进行了细化[10],将领域工程划分为领域分析和领域结构设计[11]。在领域分析中,开发者需要从特征模型中抽取候选对象,并将这些候选模块组织成对象模型。在领域体系结构设计中,将不同层次的软件体系结构抽象为逐步细化的不同层次的模型: 子系统模型、进程模型和模块模型。此外,不同的特征从不同的层次对问题域进行了抽象,对于这些不同的特征,可以将其建模为不同的对象。文献[11]中,提出了一系列对不同类型特征建模的原则,如将服务特征建模为服务状态隐藏对象,将操作特征建模为用户角色对象等。文献[12]提出了一种改进过的面向特征的模型映射方法,该方法将软件体系结构分为三种视图,使不同类型的特征对应于不同的视图,即软件开发的不同阶段。

对已经建模完成的特征模型进行实现也是软件产品线中一个重要的主题。在文献[13]中,对影响可变性实现的因素进行了阐述,对从可变性的识别到实现的整个过程进行了详细的介绍,并提出了一些对于不同可变性的实现技术,如常量条件、变量条件等。在文献[14]中,针对不同的特征约束形式推荐了模块的设计方法。在代码级别的实现方面,文献[15,16]进行了较为详细的阐述,包括聚合/代理、继承、框架、反射等面向对象的实现方法,也有面向方面的实现方法。

2 可变性扩展及特征元模型

2. 1 数据展现子系统的特点分析

基于对数据密集型系统的实际开发经验,软件开发人员发现这些不同的数据密集系统存在结构上的共性,总结出分层、分模块开发的原则。这样能够使不同的层次/模块之间只通过接口和固定的数据格式与约束进行通信,降低模块之间的耦合度。与此同时,这种分层、分模块的开发方式也能够提高系统的可维护性和可复用性。当用户需求发生变动、某个模块的结构或功能发生变化时,其他模块并不会受到影响。

在数据展现子系统中,数据展现部分,或者称为数据展现模块的主要功能是将从数据存储模块或者数据处理模块中的得到的数据集合以约定好的方式展现给使用者。此外,还可能存在一些辅助功能,如用户权限设置,打印格式设置等。本文认为,数据展现模块的输入是一个符合预先定义好的格式的数据集,输出是不同类型的数据显示。

在开发的过程中,开发者需要和用户合作对输入数据集的格式进行定义。对于某个特定的数据展现子系统而言,会存在具有多个不同定义的数据集; 而对于两个或者一组数据展现子系统而言,会出现它们的数据集定义大部分相同,只存在少许差异的现象。图1 列出了两个商业系统的数据集部分定义,该数据集以报表的形式出现。对比之后可以看出,两个数据集定义大部分都相同,只是在“本月数”大项之下所细分的方式不同。当有多个用户的数据集定义出现如示例1 和示例2 中所示的“大部分相同,少部分不同”的情况时,开发人员可以定制一个通用模版,将部分的数据集定义工作交由具体的用户完成,减少开发人员的工作量。这在开发多个相似系统时对于人力成本的节约尤为突出。



2. 2 特征元模型

本文的目的是使用产品线来进行面向不同领域,不同行业的数据展现子系统产品的开发。针对数据展现子系统的特点,我们对可变性类型和约束类型进行了不同维度上的扩展。加入扩展可变性类型和扩展约束类型的的特征元模型如图2 所示。在该元模型中,特征模型类Feature Model代表着整个特征模型,其中包含若干对应单个特征的类Feature。一个Feature可以是复合的,即可以包含若干个其他Feature。当存在Feature间的聚集关系时,这个关系对应的是特征模型中特征之间的层次关系。和经典的特征模型相同,在本文提出的元模型中,层次关系分为Mandatory、Optional、Alternative与Or四种,由Variable Type属性进行描述。

首先,我们对特征的类型进行了扩展。在元模型中,特征类型由Feature Type属性描述,分为数据集特征和非数据集特征。我们将描述数据集性质的特征称为数据集特征。例如,对一张报表的表头、细目等元素的展现等。相对地,描述系统中除数据集之外其他部分的特征称为非数据集特征。不同领域的不同应用产品对数据集有不一样的要求,根据前文所述数据集的特点,又可以将数据集特征细化为组级特征和组内特征。组级特征对应于数据集本身的定义,组级特征将数据集作为一个整体来分析,主要关注该数据集和数据展现子系统的关系; 组内特征对应于数据集内部的定义,组内特征主要关注数据集内部的定义和不同数据集之间的相似关系。在元模型中,Feature Layer属性描述的是特征所处的层级,其取值范围为NULL、Group Level和InGroup Level。当特征不属于数据集特征时,其取值为NULL; 当特征属于数据集特征时,则根据其描述的内容选择取值为Group Level或者In Grouplevel。

其次,我们对特征的依赖关系进行了扩展。在元模型中,约束由Constraint关系描述,Target属性指向和当前Feature存在约束关系的另一个Feature实体,其中的Constraint Type属性取值在Require、Exclude、Influence和Sequence中选择。在数据展现子系统产品线中,扩展增加了影响和顺序关系。影响关系表示的是模型中一个特征变体的实现手段或者配置会对另一个特征变体的实现造成影响,但并没有两个变体必须同时绑定的限制。例如在数据展现子系统中,对数据集的合法性检查公式会受到数据集自身定义的影响,那么可以称“数据集定义”对“数据集合法性检查”具有影响关系。顺序关系表示的是两个特征所对应的功能在软件使用过程中固定的执行先后顺序。例如,在每次进行数据集显示之前必须对当前用户的权限进行检查,以确定该用户可以查看哪些显示的数据,那么称“用户权限检查”和“数据集显示”具有顺序关系。

最后,我们对特征的绑定属性进行了扩展。在元模型中,绑定属性由Bind Option关系描述,其中包含Bind Time和BindRole属性。Bind Time属性代表着该特征的绑定时间,其取值范围为Compile-Time、Load-time和Run-Time。BindRole属性代表着该特征的绑定者,其取值在Developer和User中选择,分别代表着开发者绑定该特征和用户绑定该特征。通常来讲,产品的组装及变体的绑定是根据各个可变点约定的绑定时间由开发者进行定制。在实际的应用场景中,会出现通过交互性机制使用户决定可变点变体绑定的情况。对这类可变点的分析、建模及实现不能仅仅依靠可变点绑定时间属性,因为这样并不能识别该可变点是由用户负责选择变体还是由程序根据条件自行选择。在本文中我们扩展增加了绑定角色属性。

3 面向文档的特征建模过程及特征实现设计

数据展现子系统产品线的开发流程总体遵循经典软件产品线的开发流程,需要经过需求规约、明确数据展现子系统范围、特征建模、特征实现等一系列活动。首先,通过分析功能描述文档和数据集定义文档,可以得到特征的规约描述及特征之间的层次关系。其次,通过对用例文档进行分析,可以得到特征之间的约束关系。通过这两步分析,开发者可以确定数据展现子系统的特征模型并将特征模型以特定方式进行存储。最终可根据存储的特征模型采取不同的策略提出特征的实现方案。

在具体的执行过程中,相比经典软件产品线,数据展现子系统产品线对数据集特征和非数据集特征需要有不同的规约和实现策略,这是由数据集本身的性质所决定的。数据集特征有以下两个特点: ( 1) 包含的特征数量大。在数据密集型系统中,需要被处理并显示的数据集其类型和数量都可能会很庞大。( 2)数据集定义变化迅速。数据密集型系统的业务覆盖面和业务逻辑通常会不断的变化,导致在业务中使用的数据集集合持续的发生改变。

3. 1 特征规约

对于非数据集特征,其特征规约的来源为功能描述文档。功能描述文档主要包含对数据展现子系统所能完成的功能的列举,对应于一组能够满足用户需求的功能项。开发人员遵循一定的规则对特征进行规约,如将功能描述对应为功能特征,将功能或整个系统的约束描述对应为非功能特征等。随后通过产品—特征矩阵方法确定特征之间的层次关系,以及每个特征的可变性类型,初步确定特征模型。

对于数据集特征,其特征规约的来源为数据集定义文档。数据定义文档不仅和需求文档一样描述了该数据集的名称和在系统中表示的含义,而且定义了数据集内部的具体组织方式。对数据集特征的规约也要分为两部分: 数据集描述和内部结构定义。数据集介绍部分的规约可以参照非数据集特征的规约方法。对于数据集内部结构,可以使用XML进行定义。一个使用XML的数据集内部结构定义应如下所示。

我们使用< Data Set > 来定义一个完整的数据集,其中可以包含任意个用< Block > 标签表示的块。块在数据集中是一个相对独立的部分,以商业报表举例,块对应其中大型报表中每个独立的子表。每个块中有若干个组,使用< Group > 标签表示。组表示数据集中的复合属性集,例如图1 中的“本月支出”就属于复合属性,对应数据集内部结构定义的< Group > 。在数据集定义中,每个< Group > 内可以包含任意个其他的< Group > 标签。 < Attribute > 标签对应的是单个的属性,可以出现在<Block > 标签或者< Group > 标签中。

在对于数据展现子系统的分析中,曾经提到在实际场景中会出现需要对多个数据集抽象出一个模版,在不同用户对系统的使用过程中各自进行定制的情况。在数据集定义中本文引入了抽象类型的概念,类似于面向对象技术中的抽象类,对于抽象部分可以通过不同的实现手段形成用户需要的不同的数据集。如果一个< Block > 、< Group > 或< Attribute > 是抽象类型,可以将其标签中的Type设为Abstract。

若要确定哪些块、复合属性、单个属性属于抽象类型,那么需要由开发人员对相似的数据集进行分析,并对其中数据集定义的重合部分进行提取,得到带有抽象部分的数据集定义。本文把每个数据集看作一个特征,被提取出的数据集模版成为这些相似数据集的父特征,这些父特征覆盖了多个产品。在产品的定制中,存在抽象部分的特征需要被其覆盖的一组产品分别定制,即对组内特征进行的定制。而由于在定义中不存在抽象部分的数据集一般对应于单个产品,因此它们不需要被再次定制。

3. 2 特征约束确定

表示需求的特征之间的约束关系能够从用例文档中获得。首先对于需求文档中的每一个用例,要分析出该用例对应哪些特征以及特征的执行顺序。其次,要对该用例所包含的特征进行分析,确定是否存在约束关系。开发者可以根据以下用例场景来识别约束关系的类型。

1) 如果某个特征A在执行中需要“用到”其他的特征B或者B的执行结果,即在用例流程中去掉B后,A不能正确运行,则认为特征A依赖特征B,记作require( A,B) 。

2) 如果某个特征A和特征B同时出现在一个用例之中时,A和B的执行关系总是确定的,并且A总是在前或者B总是在前,则认为特征A和特征B具有顺序关系,记作Sequence( A,B) 或Sequence( B,A) 。

3) 如果在用例中,特征A的变体或者参数选择会对特征B的执行逻辑或顺序产生影响,则认为特征A影响特征B,记作Influence( A,B) 。

在对每一个用例进行分析后,我们可以得到特征—特征约束对,并对特征的Constraint属性集进行赋值。此外,在该步骤中还可以确定Bind-Time和Bind-Role的值。通常在为用户部署该子系统之前就需要确认的变体所在可变点的Bind-Role为Developer,用户在得到该子系统之后才能决定的变体所在可变点的Bind-Role为User。在系统开始运行前就需要确定的变体所在可变点的Bind-Time一般为Compile-time,在系统启动时才进行一次或者永久设置的变体所在可变点的Bind-time为LoadTime,在系统运行中需要用户动态地进行设置变体所在可变点的Bind-Time为Run-time。

3. 3 特征模型存储

软件产品线是在不断演化的,需要对这些可变点进行管理使之能适应未来可能的演化。同时,用户的需求也会发生变化,这有可能造成所绑定变体的改变。本文中使用特征配置库对特征进行管理。该配置库可以存储可变点的位置和对变体的选择,并保证了系统本身的相对独立。当变体绑定发生改变时,可以只对配置库进行改变而不侵入代码本身。

一般来说,特征配置库要存储以下四种内容: ( 1) 存储特征模型,具体的定义如图2 中的元模型所示,包括特征的层次关系、特征的属性以及特征之间的约束关系。( 2) 数据展现子系统产品线所覆盖的专业领域软件产品,它体现为一个产品列表。( 3) 存储特征的范围矩阵,即每个特征覆盖的产品。( 4) 特征实现方法,不同类型可变特征的存储方式与内容各不相同,例如可通过配置文件、参数或者数据集定义的方式。一个较为完整的特征配置库定义如下所示。

其中,< Repository > 是第一级标签,标记着特征配置库的开始和结束,在其下有四个二级标签,分别是< Feature Model > 、< Product List > 、< Feature Scope > 和< Feature Implement > 。它们分别对应需要存储在特征配置库中的四类内容,即特征模型、产品列表、特征范围矩阵和特征实现方法。 < Feature Model > 的具体定义可以参考前文对特征模型元模型的定义。在< Product List > 中,可以有任意个< Product > 标签,其中存储了产品的名称、版本号和对产品的文字描述。 < Feature Scope > 中可以有任意个< Feature > 标签,它们对应于< Feature Model > 中的特征定义,在< Feature > 中的每个< Product > 标签代表着特征覆盖了这个产品。 < Feature Implement > 中同样可以有任意个<Feature > 标签,其中的< Variable Type > 对应了< Feature Model >中的同名定义,< Config Option > 就是在对特征进行设计实现时选择的特征实现手法,可以有参数、配置文件等不同的取值。其中,< Parameter > 标签对应< Config Option > 的内容指向特征对应实现参数或配置文件的地址,例如当< Config Option > 取值为参数形式时,< Parameter > 可以存储一组参数和这些参数对应的变体描述; 当< Config Option > 取值为配置文件形式时,< Parameter > 可以存储该配置文件的地址。

3. 4 特征实现

对特征的实现同样要针对数据集特征和非数据集特征两部分分别进行。对于非数据集特征,其实现方式可以借鉴文献[15 - 17]中提出的原则,对不同类型的特征,如Mandatory、Optional、Or和Alternative可以使用不同的方法。例如,可以使用设计模式、继承、参数化方法和面向方面编程等方法进行实现。

对数据集特征的实现指的是对组内特征的定制,即对带有抽象块、抽象复合属性和抽象属性的数据集模版的定制。通常来说对于这样的组内特征的定制场景都是相对一致的,即改变数据集中部分内容的定义。对于这样的场景可以使用配置文件进行实现,数据集特征可以通过对配置文件的修改完成对变体的绑定。一段典型的数据集特征实现代码如下所示。每个数据集实例对应一个Config File配置文件,当该实例初始化时,读入数据集模版Data Set Template,并由用户配置其中的抽象部分。初始化完毕之后,基于该数据集可执行填表、显示等一系列操作。

4 两阶段可变点定制过程

本文提出了两阶段配置数据展现子系统的策略,即开发者配置和用户配置,分别通过开发者配置工具和用户配置工具完成。开发者配置工具主要完成的工作有两项: ( 1) 对Bind-Role属性值为Developer的特征进行配置。( 2) 选择用户配置工具可以选择的变体范围。而用户配置工具的主要工作就是从开发者配置工具选择的变体范围中进行选择和配置。两阶段的可变点定制流程如图3 所示。

从两个角度来明确特征的总体定制顺序。一方面,对于绑定角色不同的特征存在定制顺序。在产品线的每一次迭代过程中,开发者定制在前,用户定制在后,开发者定制的结果是用户定制的前提。另一方面,具有关联的特征之间存在定制顺序。对绑定角色的定制顺序算法如算法4 所示,该算法根据特征的绑定角色属性对特征进行分类。首先,要获得标注为开发者配置的特征列表Dev Config List,由开发者按照该特征列表进行配置。其次,需要获得覆盖了当前专业领域产品的特征列表UserConfig List,该列表根据特征配置库中的特征范围部分得到。最后用户根据User Config List列表对相应特征进行定制。

而对于已经确定的特征列表,如DevC onfigL ist,UserC onfigL ist的特征定制顺序算法如算法5所示。在定制中,有以下几个原则可以作为确定特征顺序的参考。(1)对于特征层次关系,定制的顺序为先定制子特征,再定制父特征。(2)对于特征依赖关系require(A,B),定制的顺序为先定制被依赖特征B,再定制特征A。(3)对于特征顺序关系A和特征B之间的顺序关系Sequence(A,B),按照其顺序的先后关系对特征A、B进行定制。(4)对于特征影响关系influence(A,B),按照先定制影响特征A,后定制被影响特征B的顺序进行。

5 工具与实例

5. 1 工具实现

本文对数据展现子系统的定制需要经过开发者定制和用户定制两个阶段,可变点定制工具也分为开发者定制工具和用户定制工具两部分来实现。开发者定制工具和用户定制工具的设计结构如图4 所示。

在实际的定制流程中,数据展现子系统向定制工具提供一个定制接口,使定制工具可以对特征进行变体绑定。不同特征接口具有不同的实现方法,例如由开发者工具维护一个整体的特征库,其中存放了覆盖整个数据展现子系统产品线的特征定义。当需要进行某一个具体的数据展现子系统的定制时,首先由开发者工具在总体的特征库中进行选择,对Bind-Role属性为Developer的特征进行定制,然后将选择好的Bind-Role属性为User的特征及其相关信息复制到特定的数据展现子系统中的特征库,并把该未定制完成的子系统分发给用户。用户收到该子系统后,通过用户配置工具读取子系统中的配置库信息,并根据工具提供的特征绑定顺序依次进行定制。

5. 2 实例分析

商业报表系统是面向企业或事业单位的一个专业领域应用系统,其中存储有大量以报表形式存在的数据集。同时,该系统具有数据展现的需求。本节以商业报表系统为示例进行系统定制,以验证配置工具和配制方法的有效性。在进行定制之前,要先进行特征的建模和约束确定工作。对数据展现子系统的功能进行分类总结和分析建模后,生成的非数据集特征模型如图5所示。由于篇幅原因,本文仅在图6 中展示数据集特征所对应的部分XML语句。

对数据展现子系统的定制取决于存放在特征配置库中的对数据集特征和非数据集特征的分析结果,由配置工具根据算法4 和算法5 中所述算法确定定制步骤,并引导开发者和用户进行可变点配置工作。在开发者和用户的两阶段定制完成后,我们对生成的数据展现子系统进行测试,其功能符合预期。

6 结语

8.合作开发软件协议书 篇八

乙方:_______,身份证号_______

丙方:_______,身份证号_______

丁方:_______,工商执照号_____

鉴于,协议各方均为计算机软件专业开发人员,能够进行创造性的软件开发活动。并且,协议各方有意愿共同从事_______软件的开发工作。为了规范各方的权利义务,在《中华人民共和国合同法》及其他相关法规政策的原则指导下,订立本协议书,各方共同遵守:

第一条、合作宗旨

为完成______软件的开发工作,并共同享有开发成果而合作。

第二条 合作项目和范围

协议各方共同开发______软件,合作范围包括软件的代码编写、调试、测试等开发工作。

第三条 合作期限

合作期限为一年。

第四条 合作方式

1.协议各方按照软件编程工作的正常分工进行编写,任何一方不得随意更改软件的重大功能和事项,以免对其余各方造成履约困难。

2.合作各方应坚持勤勉努力诚实信用的原则,进行各方分别负责的软件的编程工作,并考虑到各方软件的兼容和接合。如部分合作人发生特殊技术困难,其余合作方有义务为其提供合理适当的技术帮助。

第五条 知识产权

1.各方编写的软件源代码、技术文档及汇编而成的程序本身,其著作权均由合作方共同享有。

2.各作各方在编写软件的过程中,不得有侵犯他人知识产权的行为,否则,应对外承担全部侵权责任。

第六条 协议变更

1.经合作各方协商同意,本协议可以作相应变更;

2.任何合作方未经与其他各方协商,擅自变更本协议条款或者将本协议权利义务转让他人,均为无效。

第七条 禁止行为

1.未经全体合作人同意,禁止任何合作人私自以团体名义进行业务活动;如其业务获得利益归合作各方共有,造成损失按实际损失赔偿。

2.禁止合作人经营与团队相竞争的业务。

3.禁止合作方泄露本协议所涉及的相关商业秘密。

4.如合作人违反上述各条,应按实际损失赔偿。

第八条 合作的终止

合作开发活动因以下事由之一得终止:

①全体合作人同意终止合作关系;②合作项目因技术原因,根本不能完成;③合作项目违反法律被撤销。

第九条 纠纷的解决

合作各方之间如发生纠纷,应共同协商,本着有利于事业发展的原则予以解决。如协商不成,可以诉诸法院。

第十条 本协议如有未尽事宜,应由合作人集体讨论补充或修改。补充和修改的内容与本协议具有同等效力。

各方签署:

甲方:

乙方:

9.网站委托开发协议 篇九

甲方:

乙方:

(以下简称甲方)(以下简称乙方)

本着互惠互利原则,甲方就委托乙方为其开发建设网站等有关事项,与乙方友好协商,签订如下协议:

一、网站建设名称:

二、服务内容:

甲方委托乙方为其开发网站前后台系统,设计制作整个站点网页,并将该网页内容发送至互联网上,同时乙方负责维护甲方客户网站的正常运行(如因乙方设计原因出现网站不能正常运行;乙方应通过QQ、电话、EMAIL、现场服务等方式协助甲方的系统维护,乙方有义务及时响应和认真服务,努力确保甲方所委托开发系统的正常使用;客户在实际操作中有问题向乙方咨询和不改变整体架构下改动几个网站栏目或增加几个小图标)。如客户需要修改页面框架结构或增加其他功能服务项目的,需要委托乙方进行二次开发的,开发费用另行协商。

三、建设期限:

1、甲方根据实际需要,对接来的网站业务委托乙方外包开发制作,乙方在收到甲方网站首页栏目和部分图片资料后进行首页制作,原则上首页制作应不超过七个工作日交付甲方。

2、乙方首页制作完成后交与甲方,甲方根据客户反馈对网站提出进一步的修改意见,交乙方进行完善工作,待首页最终版面确定后由乙方进行前后台程序开发,乙方在网站建设过程中应与甲方保持联系。

3、整个网站建设周期以不超过二十个工作日为准。

4、验收标准:a.程序正常运行;b.方案中提到的功能全部实现;c.项目按时完成5、验收期限为15天;

四、结算方式

双方对接来的网站根据难易程度进行协商,确定网站建设费用计元,自网站正式开通上网之日起且客户未提出疑议的,甲方必须在一个月内支付乙方网站开发

费,乙方以发票形式向甲方结算(发票税费由乙方自理).五、甲方的义务和权利

1、甲方有按本协议规定向乙方提供网站建设相关资料的义务。

2、甲方有按本协议规定享受有质量保证的网站建设服务和网站维护服务。

3、甲方有权利根据客户需要向乙方索取网站开发的FTP帐号、密码及源代码等相关内容。

六、乙方的义务和权利

1、乙方在网站建设中为甲方提供的所有组成部分均不违反国家各项法律法规、公共道德准则或侵犯第三方的权益;

2、未经甲方授权,甲方委托乙方维护的网站内容不会受到任何形式的修改;

3、乙方有按本协议规定向甲方获取相应费用的权利。

七、协议的变更和终止:

本协议有效期一年,自网站运行之日年月日起至年月日止。

在协议有效期内双方中任何一方欲变更或解除协议必须提前十五天至三十天采取书面形式通知对方。如双方在协议期满前没有异议,自次年起甲方根据实际情况再向乙方续签网站维护协议。

八、不可抗力:因自然灾害、战争、火灾、地震等人力不可抗拒因素导致甲乙双方或一方不能履行或不能完全履行本协议时,双方不承担违约责任。

九、本协议未尽事宜,双方另行协商解决。

十、本协议一式两份,甲乙双方各执一份,经双方签字盖章生效。具有同等法律效力。甲方:

乙方:

法定代表人

或授权代表人签字:(单位盖章)

签字日期:年月日

法定代表人

或授权代表人签字:(单位盖章)

10.软件开发定制协议 篇十

关键词:复合数据类型,JTable组件,MVC模式,事件代理,渲染器

0 引 言

自从SUN于1998年推出包含Swing轻量级组件的JDK1.2版后, Java中JTable、JTree等复合数据类型组件在图形界面方面的应用深受用户青睐。但由于该类组件复杂的事件处理机制与渲染机制, 使Java GUI设计者难以掌握其强大、灵活的定制功能。本文结合Swing包MVC模式的设计原理, 以JTable在实际开发过程中的应用为例, 对此类复合数据类型的MVC架构及在GUI的定制开发应用进行了详细的分析实现。

1 MVC模式

1.1 模式的分类

现代科学和工程学能够发展到今天, 有赖于规则的制定, 模式的研究也不例外[1]。模式的研究起源于建筑工程设计大师Christopher Alexander关于城市规划和建筑设计的著作, 到1987年人们开始把模式理论引进到软件设计领域中。

在软件开发业中模式往往被介绍为“设计模式”[2], 根据其行为目的分为创建型、结构型、行为型模式。然而, 从严格意义上, 软件业界将模式分为架构模式、设计模式、成例模式三类。

1.2 MVC是一种架构模式

MVC模式是一种复杂的架构模式, 由Trygve Reenskaug提出, 是目前一种较成熟的软件开发模式, Microsoft的MFC基础类及Java2的Swing组件都遵循了MVC思想。

MVC模式是动态网站开发及企业级程序架构的常用开发模式, 它可以分离数据访问和数据表现, 即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离, 从软件设计角度看, 一个应用被分成三层——模型层、视图层和控制层。模型封装了业务数据和公开方法, 视图实现对模型数据的显示, 向用户提供可交互的人机界面, 控制端封装的是外界作用于模型的操作, 负责响应用户的请求, 根据请求类型操作模型层, 并把模型的响应结果表现于视图。三者间的关系和主要功能如图1所示。

模型、视图与控制器的分离后, 通过视图提供的界面, 用户可向控制器提交请求, 由其调用相应的模型方法完成数据更新, 当模型中数据发生变化时, 它会通知视图刷新界面[3], 将响应结果反馈给用户。

2 Java复合数据类型组件的MVC模型

2.1 Swing包中的复合数据类型组件

Swing组件常被称为轻量级组件。当用户与GUI交互时, 组件会发起事件, 并被一个或多个“监听器”接收并处理, 事件的发生与处理是分离的[4]。

Swing组件根据其所操作的数据类型分为两种, 一种是标量数据类型的组件, 一类是复合数据类型的组件。标量数据类型的组件操作的是基本类型的数据, 如字符串、布尔、数字等, 此类型组件包括JTextField、JCheckBox、JLabel等。复合数据类型的组件操作的是诸如向量、矩形和非线形等类型数据, 向量数据类型的组件有JComboBox、JList, 矩形数据类型的组件有JTable, JTree属非线形数据类型的组件。

2.2 复合数据类型组件的MVC模型

Swing包中复合数据类型组件都采用MVC架构模式, 有着相似的对事件的响应、处理与渲染机制, 下面以JTable为例, 简述其M-V-C分离模型。对应MVC的组件关系可得出JTable的MVC类图, 如图2所示。

对照图1可得出, JTable提供访问修改模型的set/get方法, 用来控制数据模型的状态, 而TableModel则控制数据本身, 当数据发生变化时, 负责发生相应事件, 交由已注册的监听器去捕获处理, 视图层的TableUI则负责模型数据的显示及更新[4], 完成人机交互过程。

3 JTable的MVC模型实现

3.1 JTable的代理事件及渲染重绘机制

表格对事件的处理采用代理事件机制, 对事件的捕获及处理分别由不同的对象完成, 对表格中不同单元格内的数据显示完全基于渲染重绘的实现方法。

3.1.1 JTable的代理事件机制

与Swing其它组件相同, JTable对表格事件的处理仍采用代理事件的方法, 当用户对表格排序、修改表格数据时, 即会发生相应事件, 发出的事件需由已注册在JTable实例的监听器捕获, 监听器会根据捕获的事件类型调用相应的方法进行处理。当更改表格数据时, TableModelEvent 事件被生成, 用于通知监听器某一表模型已发生更改, 事件的捕获则由监听器TableModelListener完成, 并调用tableChanged () 方法, 完成对模型数据的编辑。

3.1.2 对JTable组件的渲染

表格外观的显示最终依赖于渲染器的工作, 模型数据被修改后, 对应单元格均需采用指定的渲染器进行渲染。JTable有适合自己类型的渲染器接口TableCellRenderer, 原形定义如下:

上述方法的参数中, table为请求渲染的表实例, value为需渲染的单元格的值, 由渲染器决定如何解释并渲染该值, 比如如果value的值为字符串“true”, 渲染器可以渲染成字符串, 也可以渲染成一个CheckBox, isSelected 及hasFocus分别表示当前表格是否被选中及是否获得焦点, 并据此进行显示外观的定制, row及column指明当前单元格的行、列号。

许多复合数据型组件不仅仅需要展现数据, 还需要编辑数据。表格单元格数据可否被编辑则由TableCellEditor接口定义, 其需实现的方法及参数与TableCellRenderer相似。

综上所述, 当对表格进行编辑操作时, 根据代理事件的处理方法, 终会对模型数据产生影响, 表格视图的更新需要渲染器对此单元格组件重新绘制, 在需要编辑单元格时, 则由TableCellEditor返回当前表格的编辑组件, 作为JTable的子组件添加到整个JTable组件树上, 等待用户编辑。这一过程对应的时序图如图3所示。

3.2 JTable MVC模型的具体实现

3.2.1 建立数据模型

如图2所示, Swing中提供了可用于创建用户表格模型的有接口TableModel、抽象类AbstractTableModel及DefaultTableModel类, 其中抽象类AbstractTableModel实现了TableModel 接口中的大多数方法, 其子类DefaultTableModel实现了父类中没有定义的getValueAt () 、getColumnCount () 、getRowCount () 方法, 构建完成默认的表模型。

在建立JTable的数据模型时, 一般采用如下两种方法:

(1) 继承AbstractTableModel类, 自定义表格模型类

在JDK1.5中, AbstractTableModel被定义为实现TableModel及Serializable接口的抽象类, 据此, 建立数据模型:

} (2) 建立java默认表格模型实例

创建表格数据模型后, 即为表格封装了必须的数据及相应的操作方法。

3.2.2 JTable组件扮演控制器角色

JTable实例调用setModel () 方法把数据模型与表格组件联系起来, 主要代码如下:

接下来, jt会根据用户对UI的操作要求, 实现下功能:

(1) 在监听器作用下, 定义程序功能;

(2) 调用相应方法, 通知模型数据的更新;

(3) 选择适合的视图。

3.2.3 JTable的视图控制

Swing的体系结构中每个JComponent对象有一个相应的ComponentUI对象, 是可插入外观架构中所有UI代理对象的基类。JTable的可插入外观界面由TableUI的子类BasicTableUI实现, 负责调用installUI () 完成对JTable在颜色、字体、边框、图标、监听器及键盘UI等方面的委托执行。

由于JTable默认将单元格数据渲染为String类型, 对单元格内JCheckBox、JComboBox等组件不能直接渲染为本来面目, 因此, 为了在表格中正确显示各种组件的外观, 需针对不同数据类型使用不同的渲染器。JTable的渲染器有内置、定制渲染器之分, 对Java中Boolean、 Date、 Double、 Float、 Icon、 Number及Object七种数据类型, 可使用系统提供的内置渲染器及编辑器进行配置[5];对于表格中包含的JCheckBox、JComboBox、JTextField等组件, 则需为相应单元格组件调用setCellRenderer () 、setCellEditor () 方法显示设置渲染器及编辑器, 实现表格的个性化渲染及编辑状态定制。主要代码如下:

由此可知, 渲染器Renderer和Editor的结合赋予了Swing组件灵活地定制人性化用户界面的强大功能。

3.3 运行效果

JTable组件及其MVC模型在“音乐意象加工水平研究测试”系统设计中得到了很好地应用, 效果图如图4所示, 界面设计灵活, 定制功能强, 甚至可以定制出更复杂的表中表以满足用户的个性化界面需求。

4 结 论

虽然MVC模式增加了系统结构和实现的复杂性, 并可能产生过多的更新操作, 但由于Swing包复合数据类型组件采用的V-C结合较紧密, 加之目前计算机硬件性能愈加强大, 由组件分隔带来的开销几乎可以忽略不计。相反, 由于Swing的复合数据类型组件采用的事件代理与渲染机制, 使用户界面的设计能在友好的操作中享受强大的人机交互, 满足用户实际需求, 保证了良好的扩展性、灵活性, 提高了程序的开发效率。

参考文献

[1]阎宏.Java与模式[M].北京:电子工业出版社, 2002.

[2]Alan Shalloway, James R Trott.设计模式精解[M].熊节, 译.北京:清华大学出版社, 2004.

[3]孙卫琴, 李洪成.Tomcat与Java Web开发技术详解[M].北京:电子工业出版社, 2004:235-238.

[4]Bru ce Eckel.Java编程思想[M].3版.陈昊鹏, 饶若楠, 等译.北京:机械工业出版社, 2005:530-538, 572-574.

上一篇:小学家校共育家长会下一篇:政治经济学的研究方法