基于java开发erp系统的java 进销存系统

在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
因为业务需要,公司想做一个内部使用的erp系统,就是对商品的进销存。团队成员对这块都木有啥经验,技术组成主要是python/php/c+mysql。
大概是对商品进行进销存,然后再基于这个系统做一个商城,现在初步考虑是用。
因为要在上面商城方面的二次开发,所以代码必须容量改动,最好是php或者python的源码。
目前我了解到的几个
有什么好的进销存系统可以推荐的吗?
你们在开发的过程中又遇到了哪些问题?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
推荐odoo(之前叫做openerp )
odoo绝对可以满足你的所有需求。
odoo对python的要求也不高,对于不符合自己要求的模块完全可以重写。
我同学所在的项目组现在正在为一个几百人的公司开发ERP系统。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
java 开源erp
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:&>&Java大型CERP进销存系统Java实用源码整理learns
Java大型CERP进销存系统Java实用源码整理learns
上传大小:2.32MB
Java大型CERP进销存系统Java实用源码整理learns
综合评分:4(2位用户评分)
所需积分/C币:
下载个数:33
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var q = $("#form1").serializeArray();
console.log(q);
var res_area_r = $.trim($(".res_area_r").val());
if (res_area_r == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
var mess = $(".res_area_r").val();
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, _username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click",'.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
$(".res_area_r").val($.trim($(".res_area").val()));
评论共有2条
下载学习了下,代码可以运行很受启发。谢谢
很受启发,学习了!
审核通过送C币
精选6套分布式相关视频
创建者:love
Head First_深入浅出全系列(中文版)
创建者:e98123
java自主学习知识总结
创建者:qq_
上传者其他资源上传者专辑
文本滚动抽奖程序学习资料分享c
java程序给图片添加水印javalearnsa资料分享
订餐系统源码(新)+Chapter-Dining学习资料分享c
JAVA写的个人博客源码Java实用源码整理learns
Java实现的FTP连接与数据浏览程序Java实用源码整理learns
开发技术热门标签
VIP会员动态
下载频道用户反馈专区
下载频道积分规则调整V1710.18
开通VIP,海量IT资源任性下载
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
CSDN&VIP年卡&4000万程序员的必选
为了良好体验,不建议使用迅雷下载
Java大型CERP进销存系统Java实用源码整理learns
会员到期时间:
剩余下载个数:
剩余C币:593
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
(仅够下载10个资源)
全站1200个资源免积分下载
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
全站600个资源免积分下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
全站1200个资源免积分下载
为了良好体验,不建议使用迅雷下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
Java大型CERP进销存系统Java实用源码整理learns近日,《辉煌中国》在央视热播,广大人民群众反响强烈。国家的飞速发展让我们感到骄傲和自豪,祖国为世界和平作出的巨大贡献让我们深感荣幸。这个国庆长假,焦点不应只放在“八天”。别忘了享受和平年代繁荣昌盛的同时,去看看《辉煌中国》,感受这部让我们热血沸腾的纪录片。
在此可输入您对该资料的评论~
(window.slotbydup = window.slotbydup || []).push({
id: '4540180',
container: s,
size: '250,200',
display: 'inlay-fix'
热门资料排行
添加成功至
资料评价:
所需积分:0专注销售:进销存,库存管理软件,服装软件,服装管理软件,进销存管理系统,免费进销存软件,服装管理系统,服装店软件,&库存管理系统,仓库管理软件下载,连锁店软件,仓库管理系统专注销售:进销存,库存管理软件,服装软件,服装管理软件,进销存管理系统,免费进销存软件,服装管理系统,服装店软件,&库存管理系统,仓库管理软件下载,连锁店软件,仓库管理系统专注销售:进销存,库存管理软件,服装软件,服装管理软件,进销存管理系统,免费进销存软件,服装管理系统,服装店软件,&库存管理系统,仓库管理软件下载,连锁店软件,仓库管理系统专注销售:进销存,库存管理软件,服装软件,服装管理软件,进销存管理系统,免费进销存软件,服装管理系统,服装店软件,&库存管理系统,仓库管理软件下载,连锁店软件,仓库管理系统,超市pos软件专注销售:进销存,库存管理软件,服装软件,服装管理软件,进销存管理系统,免费进销存软件,服装管理系统,服装店软件,&库存管理系统,仓库管理软件下载,连锁店软件,仓库管理系统,超市pos软件专注销售:进销存,库存管理软件,服装软件,服装管理软件,进销存管理系统,免费进销存软件,服装管理系统,服装店软件,&库存管理系统,仓库管理软件下载,连锁店软件,仓库管理系统,超市pos软件
(18)(82)(5)(41)
开发本质上是对现实世界中客观事物的模拟或是对实际问题的求解过程。按照软件工程学对软件生命周期的划分,包括问题定义、可行性研究、需求分析、
设计、程序设计、测试和维护六个主要阶段。从更为宏观的角度来看,软件生命周期中主要包含着两类主要活动:对现实世界中客观事物的认识和基于以上认识形成
的刘‘软件系统的描述。
在软件工程学科范围内,所谓“认识”是指在软件系统所要处理的问题域范围内,通过人的思维对该问题域客观存在的事物以及对所要解决的问题生成正确的认识和理解,包括弄清事物的属性、行为及彼此之间的关系,并找出解决问题的方法。
所谓“描述”是指用一种语言,把人们对问题域中事物的认识、对问题及其解决方法的认识描述出来。在软件生命周期不同的阶段对应着不同的描述,例如,在需求
分析阶段用需求规约作为对待开发软件在需求层次上认识的描述,在设计阶段用设计规约作为对待开发软件在设计层次上认识的描述,在实现阶段用一种能够被机器
识别的语言完成对需求分析和设计阶段认识的描述,这种语言称为程序设计语言。
粗略地划分认识与描述,可以把需求分析与设计看作对问题及其解决方案的认识,把编程实现看作对解决方案的描述。细致地划分,则分析和设计阶段本身也包括描
述,即按一定的表示方法,产生分析文档和设计文档;编程阶段也包括一定的认识和描述活动。特别是在传统的软件开发方法当中,分析文档和设计文档不能很好地
映射问题,程序员需要在书写程序之前,借助分析文档和设计文档对程序所要描述的事物进行再认识。
在软件工程学科发展的历史长河中共出现过两个影响深远的方法学:以结构化方法为代表的传统软件工程方法学和面向对象软件工程方法学。
毫无疑问,传统软件工程方法学给软件产业带来巨大的飞越,缓解了软件危机.该方法在许多中、小型软件项目的应用中获得了巨大的成功。然而将上述方法应用于
大型软件的开发,其成功的案例就比较少见。究其原因在经典软件工程方法中,“认识阶段”的两个主要活动,即需求分析和设计,所产生的成果:数据流图和模块
结构图由于其表示体系的不兼容,导致设计者无法理解需求分析的结果,当然也就导致了无法实现从需求向设计实现平滑过渡。因此,“认识阶段”向“描述阶段”
的过渡经常需要借助各种转换技术。然而,这些转换往往是对原有认识的再加工、抽象、舍弃甚至扭曲。这就导致了经典软件工程方法很难实现“认识阶段”与“描
述阶段”的无缝连接。
针对经典软件工程方法天然存在的桎梏,20世纪60年代后期在Simula一67程序设计语言中首次引入了类和对象的概念,从此开启了面向对象软件工程方
法学的先河,并最终实现了“认识”与“描述”的无缝连接。斗转星移,历经近50多年的发展,面向对象软件工程方法学正像当年的结构化方法一样,在计算机科
学技术领域占据了无可争议的主流地位。在产业界,绝大多数公司采用面向对象技术进行产品开发。在学术界,面向对象的方法、理论和技术早已形成一个成熟而富
有活力的研究分支,很多学术会议和学术期刊把面向对象方法学列为主要议题之一。
本章将对面向服装软件的软件工程方法学的基本概念、方法和表示模型等内容做一个简要的概述。
1.1什么是面向对象
面向对象(0bjectOriented)不仅是一套关于软件开发的技术与策略,更重要的是,它是一整套关于以什么样的观点来看待软件系统与现实世界关系,以什么观点来研究问题、解决问题,以及如何进行系统构造的方法学。
软件开发的目的是为了解决某些现实世界中形形色色的问题。这些问题所涉及的业务范围称作该软件的问题域。广义地说,面向对象方法的基本思想是:从现实世界
中的客观事物出发,运用人类的自然思维方式,进行软件系统分析、设计、实现、测试和维护的一整套软件工程方法。面向对象方法强调直接对问题域中的事物进行
思考、认识,并根据这些事物的本质特征,把它们抽象地表示为系统中的对象,作为系统的基本构成单位。这可以使问题域与软件系统之间形成直接地映射,保持问
题域中事物及其相互关系的本来面貌。
另外,任何一个软件工程方法不应该是一种脱离人类日常的思维方式,当然也不应该是一种与人类在长期进化过程中积淀形成的各种行之有效的思想、方法格格不入
的方法学。以结构化方法为例,虽然该方法采用了许多符合人类思维习惯的原则与策略(如自顶向下,逐步求精),但该方法是建立在自身独有的概念、符号、规则
和策略的基础上,对人类普适的思维方式借鉴还比较少,因此结构化方法本身尚显得比较幼稚。
面向对象方法强调运用人类在日常的逻辑思维中经常采用的思维方式与原则,如抽象、分而治之、继承、聚合和封装等。这使得软件开发者能更有效地思考问题,并以自然的方式把对软件的认识表达出来。具体地讲,面向对象方法有如下一些主要特点。
(1)针对问题域中客观存在的事物来构造软件系统,即用对象作为对这些事物的抽象载体,并以此作为系统的基本构成单位。
(2)数据和基于数据的操作本来就是一个事物的两个方面。面向对象方法没有割裂数据和基于数据的操作。针对事物的数据用对象的属性表示,体现对象的静态特征,基于数据的操作用对象的服务表示,体现对象的动态特征。
(3)对事物进行分类。把具有相同属性和相同服务的对象归为一类。类是这些对象的抽象描述,每个对象是它的类的一个实例。
(4)对象的属性与服务结合为一体,成为一个独立的实体,对外屏蔽其内部细节,称之为封装。
(5)通过在不同层次上运用抽象原则,从而得到一般的类和特殊的类。特殊类具有一般类的属性与服务。面向对象方法支持对这种被称为继承关系的描述与实现,
从而简化系统的构造过程及其文档量。继承关系实际上是一种分层关系,一般类位于顶层,位于下层的便是特殊类。
(6)由于复杂的事物往往是由多个简单事物组合而成的,因此面向对象方法借鉴这种思想,提出复杂的对象也可以用简单的对象通过聚合的方式实现。
(7)通过消息传递实现了对象之间的动态关联。消息传递为对象间提供了唯一合法的动态联系途径,使对象的行为能够相互配合,构成一个有机的密切配合的软件系统。
综上所述,基于面向对象的软件系统开发方法是以类的形式对系统进行描述,通过对类的引用所创建的对象是系统的基本构成单位。这些对象与问题域中的各个事物
构成对应关系。它们内部的属性与服务刻画了事物的静态特征和动态特征。对象、类之间通过继承、聚合、消息传递和关联等关系如实地表达问题域中事物之间实际
存在的各种关系。因此,无论系统的组成成分,还是通过这些成分之间的关系而体现的系统结构,都可直接地映射问题域。
基于以上认识,可以对面向对象方法做如下定义:面向对象软件工程方法是一种运用对象、类、继承、封装、聚合、消息传送和多态性等概念来构造软件系统的软件开发方法。
1.2面向对象方法在软件工程学中的作用
软件危机催生了软件工程学。如果把编程技术比作工匠的建筑技术,那么软件工程学就可比作一整套的现代建筑学体系。一群能工巧匠也许能够建造茅屋,但并不能
建造摩天大厦。同样,一些只懂得编程技术的软件开发人员是不能胜任大型软件系统的开发任务。因为大型软件系统的开发需要包括分析、设计、实现、测试和维护
在内的一整套的软件工程理论与技术体系作为支持。在面向对象的软件工程方法中,面向对象思想已经渗透到软件工程生命周期中从分析到维护的所有阶段,形成了
区别于传统软件工程方法学的显著特征,并极大地推动了软件工程方法学说的发展。
本节将对传统软件工程方法和面向对象软件工程方法进行对比,并指出面向对象方法在软件工程学科发展中的积极作用。其中,传统软件工程方法指以结构化方法为代表的一系列软件工程方法,这里主要讨论结构化软件工程方法所起的作用。
1.2.1传统软件工程方法存在的问题
传统软件工程方法采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术
的运用。这种方法学把软件生命周期的全过程依次划分为分析、设计、实现、测试和维护等若干个阶段,然后顺序地完成每个阶段的任务。采用这种方法开发软件,
从对问题的抽象逻辑分析开始,前一个阶段任务的完成是后一个阶段工作开始的前提和基础,后一个阶段任务的完成通常是使前一个阶段提出的问题得到更进一步细
化,加进了更多的细节。每一个阶段的开始和结束都有严格标准。
1.需求分析
需求分析在软件工程学中具有两方面的意义:认识事物和描述事物。传统软件工程方法在认识事物方面具有一整套分析、认识问题域的方法、原则和策略。这些方
法、原则和策略使软件工程师对问题域的理解变得更为全面、深刻和有效。传统软件工程方法在描述事物方面有一整套文档规范和表示体系,这比仅用自然语言来描
述当然更为准确,也更接近于后期的设计、开发阶段要求。
然而,基于传统软件工程方法的需求分析在认识事物和描述事物两方面均存在不足。首先,传统软件工程方法在需求分析阶段对问题域的认识和描述不是以问题域中
的固有的事物作为基本单位,保持它们的原貌。而是打破了各项事物之间的界限,在全局范围内以功能、数据或数据流为中心来进行分析。如功能分解法,把整个问
题域看作一些功能和子功能。数据流法则以信息在系统中加工和流动的情况作为描述问题域的基础。显然构成问题域的基本成分并不是功能和数据流,而是一个个具
有一定自治能力的事物。因此,上述方法的分析结果不能直接地映射问题域,而是需要经过不同程度的转化和重新组合。经过转化和重新组合容易对原有事物的理解
造成扭曲,同时与后续设计、开发阶段的衔接也比较困难。
2.概要设计和详细设计
概要设计的主要任务是把需求分析得到的数据流图转换为软件结构。具体任务是:将一个复杂系统按功能进行模块划分、建立模块的层次结构及调用关系、确定模块
间的接口及人机界面等。详细设计是在概要设计的基础上考虑每个模块的内部结构及算法,最终将产生每个模块的程序流程图。
通过概要设计和详细设计,对问题域的认识和描述越来越接近于系统的具体实现——编程。但是传统的软件工程方法中设计文档很难与分析文档对应。其原因是二者
的表示体系不一致。结构化分析的结果——数据流图和结构化设计的结果——模块结构图是两种不同的表示体系。数据流图中的任意一个数据流,既不能对应模块间
的调用关系,也不能对应模块结构图中的模块和数据,数据流图中的加工也未必对应模块结构图中的一个模块。分析与设计之间在表示体系上的不一致被称作“分析
与设计的鸿沟”。它为从分析到设计的过渡带来了较大的困难。
从这个意义上来说,需要将分析阶段所产生的文档通过转化形成能够被设计阶段所使用的输入。所谓“从分析到设计的转换”,实际上并不存在可靠的转换规则,而
是带有人为的随意性,很容易因理解上的误差导致转换的错误。分析与设计之间的转换带来的另一个后果是使设计文档与问题域的本来面貌相差更远了。因为其中经
过了两次扭曲(一次发生在分析阶段,一次发生在从分析到设计的“转换”),当程序员手持设计文档进行编程工作时,已经难以透过这些文档看到问题域的本来面
3.实现和测试
实现阶段,是利用一种编程语言产生一个能够被计算机理解并执行的软件系统,这是人类涉足软件工程的第一块领地,技术也最为成熟。软件测试就是利用测试工具
按照测试方案和流程对产品进行功能和性能测试。执行测试方案后,需要跟踪故障,以确保开发的产品是正确的。但所谓“正确”是相对的,因为至今还没有哪种测
试方法能保证找出程序中的全部错误。从理论上讲,从设计到编程、从编程到测试应能较好地衔接。但是,由于分析方法的缺陷很容易产生对问题域的错误理解,而
分析与设计之间的鸿沟很容易造成设计人员对分析结果的错误转换,所以在实现时,程序员往往需要对分析人员和设计人员已经认识过的事物重新进行认识,这极有
可能产生不同的理解。在实际开发过程中常常看到,后期开发阶段的人员不断地发现前期阶段的错误,并按照他们的新的理解进行工作,所以每两个阶段之间都会出
现不少变化,其文档不能很好的衔接。这样显然给测试工作带来了极大的困难。
4.软件维护
软件维护可以分为四类:改正性维护、适应性维护、完善性维护和预防性维护。前两种情况需要程序逆向追溯发生错误的地方。由于程序不能直接映射问题域,以及
各个阶段的文档不能对应,每一步追溯都存在许多理解障碍。后两种情况是一个从需求到程序的顺向过程,它也存在初次开发时的那些困难,并且又增加了理解每个
阶段原有文档的困难。
无论传统软件工程方法存在多少问题,但其历史作用是不可磨灭的。它为理解和描述问题域,跨越自然语言和编程语言之间的鸿沟铺设了一些相对平坦的道路。它们的优点和缺点,也为面向对象方法提供了有益的借鉴。
1.2.2面向对象的软件工程方法的优势
面向对象的软件工程方法是面向对象思想在软件工程领域的全面运用。它包括面向对象的分析、面向对象的设计、面向对象的程序开发、面向对象的测试和面向对象的软件维护等主要内容。
1.面向对象的分析
面向对象分析针对问题域中客观事物,通过与用户进行广泛而深入的交流,并使用面向对象建模方法对分析结果进行建模。该方法用对象作为问题域中客观事物的抽
象载体,用对象的属性和服务分别描述问题域中客观事物的静态特征和动态特征。面向对象分析模型中的对象与问题域中的事物是具有对应关系的。面向对象分析模
型中对象及其服务的命名强调与客观事物保持一致。另外,面向对象分析模型还保留了问题域中各事物之间关系的原貌。例如,用类刻画具有相同属性和相同服务的
对象集合;用聚集关系刻画事物间的组成关系;用关联关系刻画事物之间通过消息传递形成的静态联系或动态联系;用继承关系刻画一般类与特殊类之间的层次关
数据和服务在面向对象分析方法中被认为是二个事物的两个方面,需要统一进行处理,因此用类或对象作为数据和服务的封装体。而经典软件工程分析方法将同一事
物的数据和服务剥离开来,分别用数据模型和处理模型对其进行建模。由此导致后期软件设计和实现过程中程序员很难检查它们的正确性和一致性。另外,面向对象
分析方法没有对事物或事物之间的关系进行转换、扭曲,都保留了它们的原貌,也没有打破原有的界限而重新进行组合,能够很好地映射问题域。
面向对象分析方法所采用的概念、术语以及表示方法与问题域中的事物保持了最大程度的
~致性,极大地减少了理解上的距离。
2.面向对象的设计
面向对象分析与面向对象设计的区别在于:面向对象分析针对问题域运用面向对象方法,建立一个反映问题域特征的面向对象分析模型,不考虑系统的具体实现方
式。面向对象分析模型是独立于具体的实现过程。面向对象设计是基于分析阶段成果运用面向对象设计方法建立关于系统的实现模型的过程。包括两方面的工作,一
是把面向对象分析模型直接转换为面向对象设计模型;另外是针对具体实现中的数据存储、用户界面、任务管理等环节增加一些与实现相关的系统单元。这些系统单
元与面向对象分析采用相同的表示法和模型结构。
面向对象分析与面向对象设计采用一致的表示机制,这使得从面向对象分析到面向对象设计不存在转换,设计人员只需要对分析结果进行很局部的修改或调整,并增
加几个与实现有关的独立部分。这样实现了分析向设计的平滑过渡。同时,这也是面向对象的分析与设计优于传统的软件工程方法的重要因素之一。
3.面向对象的程序设计
顾名思义,面向对象程序开发就是将对面向对象设计模型用一种面向对象的程序语言按照~定规范书写出来。面向对象程序开发是面向对象方法从诞生、发展直至成熟的第一片领域,也是使面向对象的软件开发最终落地的重要阶段。
成功的面向对象程序设计要求在面向对象分析与面向对象设计阶段产生的每个对象、类、属性和服务与其他对象、类的外部关系都达到透彻的认识和清晰的描述。在
开发阶段程序员不需要对上述问题进行重新思考。程序员在本阶段关注的工作主要是:用具体的数据结构来定义对象的属性,用具体的语句来实现服务流程图所表示
面向对象程序设计阶段产生的结果能够切实地反映面向对象分析和设计阶段的成果。面向对象设计模型中一部分对象、类对应于面向对象分析模型,其余部分的对象
类对应于以实现有关的因素。面向对象分析模型中全部类及对象都对应问题域中的事物。这样的映射关系不但提高了开发工作的效率和质量,而且对开发以后的维护
工作具有更长远的意义。
4.面向对象的测试
面向对象测试的主要目的是用尽可能低的测试成本和尽可能少的测试案例,发现尽可能多的错误。由于面向对象程序中特有的封装、继承和多态机制,给面向对象测
试带来了一些优势,其主要原因是:面向对象测试以对象的类作为基本测试单位,查错范围主要是类定义之内的属性和服务,以及有限的对外接口所涉及的部分。有
利于面向对象测试的另一个因素是对象的继承性。对父类的测试完成之后,子类的测试重点只是那些新定义的属性和服务。同时,对象的封装性使对象成为一个独立
的程序单位。在测试的时候,测试人员不再像经典软件测试方法一样,所面对的是一段顺序的代码,而是具有自治性的类。而类只通过有限的接口与外部发生关系,
从而大大减少了错误的影响范围,也大大减少了需要设计的测试案例。
5.面向对象的软件维护
对遗产软件系统的理解是一切软件维护活动的核心。然而,维护人员往往不是当初的开发人员,读懂并正确地理解由别人开发的遗产软件系统是非常困难的。加之传
统软件工程方法在软件开发各个阶段的文档表示机制不一致,程序与问题域之间不能形成良好的映射关系,使对遗产软件的理解成为困难,更不用说开展软件维护。
面向对象的软件维护较经典的软件维护在效率方面也有较大提高。原因在于:首先,程序与问题域是一致的,各个阶段文档的表示机制是一致的,从而大大减少了理
解的难度。无论是由于发现了程序中的错误而逆向追溯到问题域,还是由于新需求的引入而从问题域正向去追踪新需求的根源,道路都是比较平坦的。其次,系统中
最容易变化的因素——功能,被作为对象的服务封装在对象内部。封装性使得发生在一个对象内部的修改对其他对象的影响降到最低,避免了所谓的“波及效应
(RippleEffect)”。
综上所述,面向对象软件工程方法的出现是对软件工程学说的继承和发展。自计算机问世以来,软件科学的发展历程中出现过许多“面向”。如面向机器、面向代
数、面向过程、面向功能、面向数据、面向数据流等。这反映了软件工程先驱们所付出的许多令人尊敬的劳动,试图从不同的角度,不同的思路来认识软件的本质。
每一种“面向”都不乏创新的见解和独到的优点,同时还为今天的面向对象提供了可贵的借鉴。但这些“面向”没有能认识到:软件开发从本质上就是对软件所要处
理的问题域进行正确的认识,并把这种正确的认识描述出来。也就是说应该直接面向问题域中客观存在的事物来进行软件开发,这就是面向对象。
另一方面,人类在认识世界、改造世界的历史长河中形成的普适的思维方法,在软件开发中也应该是适用的。人们在日常生活中习惯的思维方式和表达方式,也应在
软件开发中尽量采用,这就是面向对象方法所强调的基本原则。这些基本原则在面向对象软件工程领域的回归是软件工程学说从幼稚走向成熟的又一佐证。
1.3面向对象方法的主要概念
这一节定义并解释面向对象方法的主要概念。这些概念包括了:对象、类、封装、继承、消息、多态、重载、永久对象和主动对象。
1.3.1对象
对象(Object)是面向对象方法中使用的最基本的概念。从一般意义上讲,对象是现实世界中一个实际存在的事物,它可以是有形的,也可以是无形的。同
时,由于现实世界中的事物是丰富多彩的,既有静态属性,又有动态行为。因此,它必须反映现实事物的静态特征和动态特征。在面向对象方法中对象的静态特征可
以用某种数据结构来描述,动态特征是对象所表现的行为或对象所具有的功能。
在实际软件系统的开发过程中,通常只是在一定的范围内考察和认识与系统目标有关的事物,并用对象来抽象地表示它们。这就是说,对象只描述客观事物本质的、
与系统目标有关的特征,而不考虑那些非本质的、与系统目标无关的特征。另外,对象众多的属性值刻画了对象的状态,而对象的属性只能由该对象的服务来读取和
修改。上述过程如图4-1所示,其中对象的初始状态为S,经过服务,对属性口的修改导致了对象的状态从S迁移到S7。
在此给对象作如下定义:对象是问题域中事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用;它是一组属性并有权对这些属性进行操作的一组服务的封装体。
属性和服务,是构成对象的两个主要因素,其中属性是用来描述对象静态特征的一个数据结构。而服务是用来描述对象动态行为特征的一个操作序列。一个对象可以
有多项属性和服务。一个对象的属性和服务被封装成一个整体,对象的属性值只能由这个对象的服务进行访问。
分而治之思想是人类在长期认识世界过程中形成的一种普适的思维方法。它的根本在于分类,而分类所依据的原则是抽象,即忽略事物的非本质特征,只注意那些与
当前目标有关的本质特征。找出事物的共性,把具有共性的事物归为一类,凝练出一个抽象的概念。如计算机、汽车、大学等都是一些抽象概念,它们都是一些具有
共同特征的事物的集合,被称作类(Class)。
在面向对象方法中,类被定义为:类是具有相同属性和服务的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和服务两个主要部
分。类的作用是定义对象。例如,程序中给出一个类的说明,然后以静态声明或动态创建等方式定义它的对象实例。
类与对象的关系如同模型与元模型之间的关系。类给出了属于该类的全部对象的抽象定义,而对象是符合这种定义的一个实体。所以,一个对象又称作类的一个实例
(instance)。例如,一个面向对象画图程序分别在屏幕左上角和右上角分别显示两个半径为3cm和4cm的圆形。这两个圆心位置、半径大小均不相
同,因此是两个不同的显示对象。但它们均具有相同的静态属性(圆心坐标、半径)和动态行为(显示、移动位置、缩放等)。因此,它们属于同一类事物,可以用
“圆类”来定义。对照非面向对象程序设计语言,类与对象之间的关系与类型和变量之间的关系非常相似,均是集合与成员、抽象描述与具体实例的关系。区别在
于,类型用于定义数据,类用于定义对象。
在面向对象方法中存在一般类和特殊类的区别。特殊类具有它的一般类的全部特征,同时又具有一些只适应于特殊类的独特特征。现实世界中对象既具有共同性,也
具有特殊性。运用抽象的原则舍弃对象的特殊性,抽取其共性,得到一个适应于一批对象的类。如果在这个类的基础上再舍弃一些特殊性,则在这个类中只有一部分
对象具有这些特殊性,于是得到一个新的类。它是前一个类的子集,称作前一个类的特殊类。而前一个类称作这个新类的一般类。一般类和特殊类是相对而言的,它
们之间存在着包含的关系。如果两个类之间没有这种关系,一般和特殊关系也就无从谈起。
举例来说:考虑人和中国人这两个类。人具有身高、体重、肤色等属性并具有行走、工作等服务;中国人具有人的全部属性与服务,又有自己的特殊性(如户口)和服务(如过年)。所以中国人是人的特殊类,人是中国人的一般类。
1.3.3封装
封装(Encapsulation)是面向对象方法的一个重要原则。它具有两个层次的含义:首先,把对象的全部属性和全部服务包装在一起,形成一个不可分
割的单元(即对象)。其次,封装具有信息隐藏的功能,即尽可能隐蔽对象的内部细节,对外形成一个边界,只保留有限的对外接口使之与外部发生联系。这样外部
对象不能直接地访问对象的属性,而只能通过有限的几个允许外部对象使用的服务与对象发生联系。因此,对象的内部细节被有效地对外实现了屏蔽。封装概念可以
定义为:保留有限的对外接口使之与外部发生联系。例如,用“自动提款机”对象描述现实中的一个自动提款机。它有两个基本服务一一取款和查询和一些属性(如
所属银行等)。封装意味着这些属性和服务结合成一个不可分的整体一一自动提款机对象。它对外有一道边界,即显示屏,并留接口,即银行卡插口和用户输入键
盘。在这里提供存款和查询服务。顾客只能要求提款机提供服务,而不能自己伸手到提款机拿钱。如何实现提款和查询过程对于客户来说则是不可见的。
封装的原则对于面向对象方法具有重要的意义。对象的属性和服务紧密结合体现了事物的静态属性和动态特征是事物不可分割的两个侧面。系统中把对象看成它的属
性和服务的封装体就使对象能够集中而完整地描述一个具体的事物。封装的信息隐蔽作用反映了事物的相对独立性。当用对象以外的角度观察一个对象时,只需要注
意它对外呈现什么行为,而不必关心它如何实现这些行为。
综上所述,实现对象的封装特性有以下条件:
(1)对象必须有一个清晰的边界。所有私有数据和服务均能封装在这个边界内,从外界看不到更不能直接访问。
(2)对象具有明确的接口,通过这些接口对象可以接收和向外发送消息。
(3)受保护的内部实现。实现对象的功能细节不能在定义该对象的类的范围外发生。
已经讨论了封装的优点,然而封装也有其劣势。如果强调严格的封装,对象的任何属性对外均是不可见的,这样就要增加许多只负责读或写的服务。这些服务除了负
责读写是没有任何意义的,显然这增加了编程的工作量和系统运行开销,并且使程序显得臃肿。为了避免这一点,往往采取一种比较现实的灵活态度一一允许对象有
不同程度的可见性。
可见性在取得灵活性的同时放弃封装性所带来的好处。因此,各种语言对于这种折中的做法持有不同的看法,当然也采取了不同的做法。以Smalltalk为代
表的纯面向对象的程序设计语言一般采取严格的封装。混合型面向对象程序设计语言有的完全可见(如ObjectC),有的采取折中方案,即允许程序员指定哪
些属性和服务是可见的,哪些是不可见的(如C++)。目前看来,折中的作法最受用户欢迎。
1.3.4继承
继承(Inheritance)概念在面向对象方法中占有着非常重要的地位,并且是面向对象技术可提高软件开发效率的根本原因之一。在此可以为继承概念作如下定义:特殊类拥有其一般类的全部属性与服务,称作特殊类对一般类的继承。
继承概念包含着自动地拥有或隐含地复制的意思。也就是说,特殊类中不必重新定义已在它的一般类中定义过的属性和服务,而它能自动地、隐含地拥有其一般类的所有属性与服务。面向方法的这种特性称作继承性。
一个特殊类拥有从它的一般类中继承下来的属性与服务,当然也可以自己定义新的属性和服务。当这个特殊类又被它更下层的特殊类继承时,它继承来的和自己定义
的属性和服务又都一起被更下层的类继承下去。这样就形成了继承的传递关系。继承机制体是对普适的人类思维方式的继承,是软件工程学上的一次飞跃。从本质上
来说,继承机制实际上是一种分层机制。一般类处于该体系层次的最高层,而通过继承机制所产生的特殊类处于该体系层次的下一层。如此往复,便形成了关于客观
事物的分层体系。举例来说,以A、B和C三个类为例,其中B类是从A类中派生出来的特殊类,它除了具有自己定义的属性和服务之外,还从一般类A继承了属性
和服务。类C又继承了类B的属性和服务。因此,类C相对于类B来说就是特殊类,而类B相对于类c来说就是一般类。因此就构成了一个关于类A、B、C的层次
结构。具体实现如图4—2所示。
通过继承关系,它简化了人们对事物的认识和描述。例如,认识了人的特征之后,在考虑中国人时只要知道中国人也是一种人这个事实,那就认为它理所当然的具有
人的全部一般特征,只需要把精力用于发现和描述中国人独有的那些特征。在软件开发过程中定义特殊类时,不需把它的一般类已经定义过的属性和服务重复地书写
一遍,只需要声明它是某个类的特殊图4-2继承关系类,并定义它自己的特殊属性与服务。无疑这将明显地减轻开发工作的对应的层次关系强度。
另外,继承对于软件复用是很有益的。在开发一个软件系统时,使特殊类继承一般类,这本身就是软件复用,然而其复用意义不仅如此。如果把用面向对象程序设计
语言开发的类作为可复用构件提交到构件库,那么在开发新系统时不仅可以直接地复用这个类,还可以把它作为一般类,通过继承而实现复用,从而大大扩展了复用
一个类可以是多个一般类的特殊类,它从多个一般类中继承了属性与服务,这种继承模式叫做多继承。这种情况是常常可以遇到的。例如,有了亚洲人和欧洲人两个
一般类,在考虑欧贬混血儿这个类时就可发现,它既属于亚洲人,又属于欧洲人。所以它可以同时作为亚洲人和欧洲人这两个类的特殊类。在开发这个类时,如果能
让它同时继承亚洲人和欧洲人这两个类的属性与服务,则需要为它新增加的属性和服务就更少了,这无疑将进一步提高开发效率。但在实现时能不能做到这一点却取
决于编程语言是否支持多继承。
继承是任何一种面向对象程序设计语言必须具备的功能,多继承则未必,现在有许多面向对象程序设计语言只能支持单继承而不能支持多继承。当一个特殊类继承了
多个一般类时,若这些一般类中的属性或服务有彼此同名的现象,当特殊类中引用这样的属性名或者服务名时,系统无法判定它的语义到底是指向哪个一般类中的属
性和服务。解决的办法有两种,一是不允许多继承结构中的各个一般类的属性及服务取相同的名字,这会为开发者带来一些不便;二是由面向对象程序设计语言提
供~种更名机制,使程序可以在特殊类中更换从各个一般类继承来的属性或服务的名字。
多继承无论从概念上还是从技术上都是单继承的推广。虽然多继承在现实中是很常见的,但系统开发是否采用多继承受到面向对象程序设计语言功能的影响。目前比
较现实的做法是,在面向对象需求分析阶段如实地用多继承结构描述问题域中的多继承现象。在考虑实现时,如果决定选用一种仅支持单继承的语言,则把多继承转
化为单继承。
1.3.5消息
在面向对象方法中把向对象发出的服务请求称作消息(Message)。一个对象通过向另~个对象发送消息来请求其服务。在现实软件系统中的各个对象均要向
系统中的其他对象提供服务,并以此在系统中发挥自己的作用。当系统中的其他对象请求这个对象执行某个服务时,它需要响应这个请求,完成指定的服务所应完成
消息传递机制也是面向对象方法的一个重要原则,它与封装的原则有密切的关系。封装使对象成为一些具有属性和服务的,具有自治性的程序单位。消息传递则为对
象间提供了唯一合法的动态联系途径,使各对象之间能够默契配合,共同完成系统的某项功能,构成一个有机的动态系统。
在自动提款机例子中,顾客对自动提款机输入“查询余额”就是一条消息。它是顾客向自动提款机发出的服务请求。自动提款机接收到这个消息,就执行一次对外提
供的服务,即完成余额查询功能。在此可以为消息作如下定义:消息是向对象发出的服务请求。~个消息通常包括接收对象名、调用的服务名和适当的参数。消息只
告诉接收对象需要完成什么服务,但并不指示接收者怎样完成服务。消息完全由接收者负责解释,接收者独立决定采用什么方式完成所需的服务。同时,对象对外提
供的每一个服务应规定消息的格式,这种规定称作消息协议。
1.3.6多态性
对象的多态性(Polymorphism)是指在一般类中定义的属性或服务被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属
性或服务名在一般类及其各个特殊类中具有不同的语义。也就是说,在类的不同层次上可以使用相同的服务名称,当对象接收到发送给它的消息时,对象根据所属的
类,动态地选择在该类中定义的实现算法。
多态性机制不仅增加了面向对象软件系统的灵活性,进一步减少了信息冗余,而且显著提高了软件的可重用性和可扩充性。当扩充系统功能增加新的实体类型时,只需派生出与新实体类相应的新的子类,完全无须修改原有的程序代码,甚至不需要重新编译原有的程序。
例如,在一般类“Parent”中定义了一个服务“say”,并且Parent类被ChildA类继承。ChildA类重写了Parent类中的say方法。ChildB类继承了Parent类,同时也重写了Parent类中的say方法。
1.3.7重载
有两种重载:函数重载是指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字;运算符重载是指同一个运算符可以施加于不同类型的操作数上面。当然,当参数特征不同或被操作数的类型不同时,实现函数的算法或运算符的语义是不相同的。
Java语言在编译时根据函数参数的个数和类型,决定到底使用类当中的哪一段实现代码;对于重载的运算符,同样是在编译时根据被操作数的类型,决定使用该算符的哪种语义。重载进一步提高了面向对象系统的灵活性和可读性。
例如,在一般类“figure”中定义了两个服务“求面积”,区别在于所给的参数不一致。当figure类被caI类继承以后,面对两个求面积的服务,cal类可以动态决定调用哪个服务进行响应。
1.3.8永久对象
以C为代表的高级程序设计语言的广泛使用,使程序员从繁重的内存管理工作中解脱出来,程序员使用高级程序设计语言可以在内存中构造复杂的数据模型,通过指针构造复杂的数据结构(链表、隐等),并且可以快速而随机地访问内存中的数据。
然而,内存是临时性的存储介质,若想让数据的生存期跨越程序的生命周期,即使数据成为永久性数据,则必须借助于外部存储器。近十几年以来,一些新的应用领
域(如Internet、oA等)层出不穷,在这些新的应用领域中,往往要求共享永久性数据。同时,数据之间关系复杂,要求外存不仅要存储这些数据,而且
必须有效地保持其复杂的关系。
实现数据的永久性,传统的方法是利用数据库管理系统或文件系统来存储和管理外存中的永久性数据。然而上述方法在实现永久数据存储时还是存在一些不足。数据
库管理系统要求对永久性数据作强制性解释。另外,数据库管理系统虽然有一定的数据构造和抽象能力,但抽象能力有限并不能表达丰富的信息。
在文件系统中,永久性数据常常以字符流的形式存在。这种数据类型决定了永久性数据不具备数据类型的构造和抽象能力,程序员必须按照事先约定的数据结构来解
释和使用永久性数据。同时,程序员的分析、设计模型往往与数据库模式不一致,程序员必须遵循数据库系统的所有规则,因此需要将分析、设计模型转化为数据库
系统能够识别的数据格式。面向对象技术为解决上述问题提供了一条有效的途径,即永久对象技术。所谓永久对象,就是生存期可以超越程序的执行时间而长期存在
的对象。类通过实例化后得到了对象,在程序中对象的生存期都不超过程序的运行时间。即当程序运行结束时,类所定义的对象也都结束了其生命周期。如果一个程
序要求对象的属性需要长期保存,以至于这些属性可以被后续程序在运行时进行访问,就需要通过永久对象技术加以实现。根据永久对象技术,在程序撰写过程中,
只要程序员声明某个对象是永久的,则它的存储、恢复、转换等问题完全由系统自动解决,程序员一概不用关心。永久对象不仅提高了编程效率,还使面向对象设计
阶段的数据管理部分的设计大为简化,而且可实现对象在不同程序之间的动态共享。
然而,永久对象的实现需要三个方面的工作:一个能够描述和处理永久对象的编程语言、一个面向对象数据库以及对象管理系统。上述工作涉及对象的存储、恢复、
共享、并发存取和一致性保护等一系列技术问题,而实现这些问题的难度是巨大的,目前国内外在这方面研究性的工作较多而实用的产品较少。但随着永久对象重要
性被更多的人所知,可以预言,支持永久对象的产品化的CASE环境、工具及程序设计语言,今后将在计算机技术领域中扮演更重要的角色。
1.3.9主动对象
在现实世界中具有主动行为能力的事物并不罕见。例如,人体当中的免疫系统、神经系统等。每个具有主动行为的事物在系统中应该被设计成一个任务,因为它们的
行为是主动的,需要并发地执行。在软件设计领域也需要一些具有主动执行服务能力的对象。例如,水库水位警报系统,如图4-3所示。当水库水位超过警戒线
时,水位报警系统需要自动向多个部门(防汛指挥部门、水库管理部门、抢险救援部门等)发送消息。显然,发送消息这个任务是主动的、并发的,所以无法用被动
对象描述。因此,在面向对象方法中引入主动对象概念是符合人的普适思维方式和自然习惯的,同时,对丰富软件工程学具有重要的现实意义。主动对象的概念是与
传统对象概念相对应的。传统对象是一组属性和服务的封装体。它的所有服务均是在外界消息的驱动下而被动执行的。也就是说,外界对象向某一对象发一个消息,
它就响应这个消息而执行被请求的服务,否则它的服务就不执行。从这个意义上来说,传统意义上的对象都是被动对象,需要通过消息的驱动(或者说通过消息的触
发)才能执行。而最初的消息驱动一般来自所有类之外所定义的一段主程序。如C++中的main函数,即便是以纯面向对象风格著称的Smalltalk,也
需要在所有的类定义之外写一段相当于主程序的源码,才能使系统最终成为一个可运行的程序。
多任务并发系统的开发是当前软件开发的主流。基于传统的面向对象方法,如果仅有被动对象的概念,则很难实现系统中多任务并发的需求。因为,当软件系统涉及
并发情况时,程序员使用进程(Process)或线程(Thread)等概念,将这些工作交给操作系统完成。但是,如何在系统设计阶段识别并描述每个任
务,成为当前需要考察的问题。
首先,用传统的被动对象技术显然是不合适的,因为它的每个服务在实现都依赖于一个驱动消息,即所有服务的执行均是被动的。其次,若不用对象概念来描述,显
然可以引入其他新的概念。但这种方法将引起概念的多元化和表示法的不一致,而且不能体现面向对象方法的分类、继承、封装等原则。另外,对象的表达能力被限
制于描述那些在消息的驱动下被动工作的事物,而不能描述那些不接收任何消息也要主动工作的事物。
综上所述,主动对象的作用是描述问题域中具有主动行为的事物,它的主动服务用于描述相应的任务所应完成的操作。在系统实现阶段,主动服务应该被实现为~个
能并发执行的、主动的程序单位,如进程或线程。除含有主动服务外,主动对象的其他方面与被动对象没有什么不同,例如,属性是描述对象静态特征的数据,只能
被该对象的服务所存取。除主动服务之外,主动对象中也可以有一些在消息的驱动下执行的一般服务。
对主动对象可以作如下定义:主动对象是一组属性和一组服务的封装体,其中至少有一个服务不需要接收消息就能主动执行。
1.4面向对象方法与UML
前面已经讨论过,软件工程的本质是围绕软件生命周期建立与各阶段活动相对应的模型。在长期的研究和实践过程中,人们逐步认识到,用简明准确并符合人类思维
方式的模型表达软件生命周期各阶段的关注点,对于软件工程学说从幼稚走向成熟具有重要的意义。所谓模型,就是为了理解事物的概念、数学关系、逻辑关系和组
成而对事物所做的一种抽象,是对事物的一种无二义性的书面描述。通常,模型由一组图示符号以及建立在图形符号之上的规则所组成。可以利用它们来定义和描述
问题域中的术语和概念。
在开发复杂软件系统时,系统分析员从不同角度运用抽象方法将系统的各项特征抽取出来,使用精确的表示方法来构造系统的模型,并验证模型与用户的期望是否一
致。在设计过程中逐渐加人实现细节,最终用程序设计语言实现模型。在软件维护阶段使用模型指导维护人员对遗产系统实施维护活动。
软件生命周期各阶段的模型一旦被建立之后,就必须经受用户和领域专家的严格审查。由于模型的规范化和系统化,很容易发现系统分析员对目标系统认识的片面性
和不一致性。因此,模型需要经过多次修改,不断完善。最终,形成关于问题域正确的、充分的和稳定的认识。在针对面向对象方法的建模语言中,目前使用最广泛
的是统一建模语言(UnifiedModelingLanguage,UML),它将Booeh、Rumbaugh和jacobson等各自独立提出的面
向对象分析和面向对象设计方法中最优秀的建模方法组合成一个统一的方法。无论在计算机科学界还是产业界,UML已经成为各种系统建模、描述软件体系结构、
商业系统结构和商业过程时使用的统一的工具,而且在实践过程中人们还在不断扩展它的应用领域。
本节将介绍与UMI.相关的概念、架构和图。
1.1.1UML概述
面向对象分析和设计的本质任务是以对象为基础进行建模。20世纪90年代,业界流行着几十种面向对象的开发方法,形成了百家争鸣的局面,其中最具有代表性
的有3种方法,即Gra—dyBooeh的Booch方法、JimRumbaugh的OMT方法和IvarJacobson的00SE方法。这些面向对象
建模方法大多相似,但每种方法都有自己的开发过程、表示符号和侧重点,这极大地妨碍了用户之间的交流。因此,有必要建立一种统一的建模语言。
1994年10月,GradyBooeh和JimRumbaugh开始致力于这项工作。他们首先将Booch和OMT方法统一起来,并于1995年10月
发布了第一个公开版本,称之为统一方法UM0。8(Uni—fledMethod)。1995年秋,OOSE的创始人IvarJacobson加盟到这项
工作中,经过Booch、Rum—baugh和Jacobson三人的共同努力,UMI,得到了巨大的发展,并形成了业界关于面向对象建模的主要标准。此
后一段时间,UMI。进入了高速发展时期。1996年6月和10月分别发布了UMI。0.9、UMLl.0。1997年1月UMLl.0提交对象管理组织
OMG审查。1997年9月发布UMI。1.1。1997年]1月oMG采纳UMI。作为面向对象技术的标准建模语言。、2001、
、年分别发布了UMLl.2、UMLl.3、UMLl.4、UMI。1.5、UMI。2.0、UMI。2.1.2和
作为一种面向对象方法的标准图形化建模语言,UML具有如下特点:
(1)标准统一。UML不仅统一了Booch、OMT和OOSE等方法中的基本概念,还吸取了面向对象技术领域其他流派的长处,其中也包括非面向对象方法
的长处。UML使用的符号表示考虑了各种方法的图形表示,删除了大量容易引起混乱的、多余的和极少使用的符号。提供了标准的面向对象的模型元素的定义和表
示方法,并已经成为OMG的推荐标准。
(2)应用范围宽。UMI。的目标是以图形的方式来描述任何类型的系统,具有很宽的应用领域。其中最常用的是建立软件系统的模型,但它同样可以用于描述非
软件领域的系统,如机械系统、企业机构或业务过程,以及处理复杂数据的信息系统、具有实时要求的工业系统或工业过程等。总之,UML是一个通用的标准建模
语言.可以对任何具有静态结构和动态行为的系统进行建模。
(3)面向对象;UML支持面向对象方法的主要概念,提供了一批基本的表示元素的图形,能简洁明了地表达面向对象的各种概念和模型元素。
(4)可视化,表达能力强。UMI。是一种图形化符号,用UMI。的图形能够清晰地表示系统的逻辑结构。但它不仅是图形符号,在每一个图形表示符号后面均
有定义良好的语义。UMI。还提供了语言扩展机制,用户可以根据需要增加定义自己的构造类型、标记值和约束等。
(5)独立于过程。UML是系统建模的语言,不依赖特定的开发过程。
(6)容易使用。UML概念明确,建模表示方法简洁明了,图形结构清晰,容易掌握使用。
(7)与程序设计语言紧密联系。可以根据UML所建立的系统模型自动产生Java、C++等代码框架,支持这些程序的测试以及配置管理等环节。
(8)支持范围广。UML作为一种通用建模语言,已经得到了IBM、Mierosoft和Oracle等多家国际软件巨头的支持。同时,已经有多款
CASE软件支持UML,其中比较著名的有RationalRose、Together、Ar一goUMI。和Visio等。
1.1.2UML的架构
作为一种建模语言,UML的定义包括UML语义和UML表示法两个部分。UML语义描述了基于UMI。的元模型定义。元模型为UML的所有元素在语法和语
义上提供了简单、一致、通用的定义性说明,使开发者能在语义上取得一致,消除了因人而异的表达方法所造成的语义混乱。UML表示法定义了UMI。符号的表
示方法,为开发者或开发工具使用这些图形符号和文本语法提供了标准。这些图形符号和文字所表达的是应用级的模型,在语义上它是UMI。元模型的实例。所有
的UML表示法均以图形的方式进行表达,而所有的图形都应当视其为模型。UMI。模型大致可以分为三类,即实体、关系和图。具体组成如图4—4所示。
1.1.3UML的实体
实体是事物抽象化的最终结果,是模型中的基本成员,UML中包含结构实体、行为实体、分组实体和注释实体。
1.结构实体(Structuralthings)
结构实体是模型中的静态部分,用以呈现概念或实体的表现元素,是软件建模中最常见的元素,共有以下7种。
(1)类(Class):类是指具有相同属性、方法、关系和语义的对象的集合。
(2)接口(Interface):接口是指类或构件所提供的一组外部可用的服务集合,接V1定义的是关于一组服务的描述,而不是服务的实现。
(3)参与者(Actor):也称角色,是指与系统有消息交互的人、软件系统或硬件设备。
(4)用例(UseCase):也称用况,用于表示系统想要实现的行为,即描述一组动作序列(即场景)。而系统执行这组动作后将产生一个对特定参与者有价值的结果。
(5)主动类(ActiveClass):主动类的对象有一个或多个进程或线程,能够在不存在外界刺激的情况下自动执行某项服务。
(6)构件(Component):构件是物理的、可替换的部分,包含接口的集合,如COM、JavaBean等。
(7)结点(Node):结点是系统在运行时存在的物理元素,代表一个可计算的资源,通常具有一定的记忆能力和处理能力。
2.行为实体(Behavioralthings)
行为实体指的是UML模型中的动态部分,即模型中随着时空不断变化的部分。代表系统的行为包含两类。
(1)交互(Interaction):交互是由一组对象之间在特定上下文中,为达到特定的目的而进行的一系列消息交换动作。
(2)状态机(StateMachine):状态机由一系列对象的状态组成。描述了一个对象或一个交互在生存周期内响应时间所经历的状态序列。
3.分组实体(Groupingthings)
可以把分组实体看成是一个容器。目前只有一种分组实体,即包(package)。结构实体、动作实体甚至分组实体都有可能放在一个包中。包纯粹是概念上的,只存在于开发阶段,而组件在运行时存在。
4.注释实体(Annotationalthings)
注释实体是UML模型的解释部分,它们用来描述和标注模型的任何元素。通常可以用注释修饰带有约束或解释的图。
部分实体的UMI。图形如图4-5所示。
1.4.4UML的关系
关系是将实体联系在一起的方式。在UMI,中,常见的关系有依赖、关联、泛化和实现4种。其图形如图4-6所示。
1.依赖关系(Dependency)
依赖关系是两事物间的一种语义关系,该关系表述了由于一个事物发生变化而影响到另外一个事物也发生变化的语义。使用带实心箭头的虚线表示。虚线箭头的方向
从源事物指向目标事物,表示源事物依赖于目标事物。如图4—7所示,某人要过河,需要借用一条船,此时人与船之间的关系就是依赖。
UML中依赖关系参看表4—1。依赖关系的具体语义可以用在表示依赖关系的虚线箭头上附加的双尖括号“《》”内的关键字加以说明。
2.关联关系(Association)
关联是一种结构关系,它描述了两个或多个类的实例之间的连接关系,是一种特殊的依赖。如图4—8所示,学生和老师之间就存在一种关联关系。关联的实例称为链。每一条链连接一组对象(类的实例)。关联分为普通关联、限定关联、关联类、聚合与复合。
(1)普通关联:普通关联是最常见的关联关系,只要类与类之间存在连接关系就可以用普通关联表示。普通关联又分为二元关联和多元关联。
二元关联描述丽个类之间的关联,用两个类之间的一条直线来表示,直线上可写上关联名。关联通常是双向的,每一个方向可有一个关联名,并用一个实心三角来指
示关联名指的是哪一个方向。如果关联含义清晰的话,也可不起名字。图4-8给出了“学生”类和“老师”之间的关联,该关联说明一位老师教授多名学生,这些
学生同时受教于多位老师。
关联关系中的两端的类称之为端点,在关联两端连接的类各自充当了某种角色,有关的信息(如角色名、可见性和多重性等)可附加到各个端点上。其中多重性表明
在一个关联的两端连接的类实例个数的对应关系,即一端的类的多少个实例对象可以与另一端的类的一个实例相关。
多重性的表示如下:
如果图中没有明确标出关联的多重性,则默认的多重性为l。
关联端点上还可以附加角色名,表示类的实例在这个关联中扮演的角色,如图4-9所示。同时,UML还允许一个类与它自身关联。例如,老师与学生之间是多对
多关联,而班长与学生是l对多的关联,班长与学生之间存在管理关系,如图4—10所示。多元关联是指3个或3个以上类之间的关联。多元关联由一个菱形,以
及由菱形引出的通向各个相关类的直线组成,关联名(如果有的话)可标在菱形的旁边,在关联的端点也可以标上多重性等信息。图4—11表示了一个教师教授了
哪些学生什么课程。
(2)限定关联。限定关联通常用在一对多或多对多的关联关系中,可以把模型中的多重性从一对多变成一对一,或将多对多简化成多对一。在类图中把限定词
(qualifier)放在关联关系末端的一个小方框内。例如,某操作系统中一个目录下有许多文件,一个文件仅属于一个目录,在一个目录内文件名确定了唯
一的一个文件。利用限定词“文件名”表示了目录与文件之间的关系,这样就利用限定词把一对多关系简化成了一对一关系。注意,限定词“文件名”应该放在靠近
目录的那一端,如图4—12所示。
(3)关联类。在关联关系比较简单的情况下,关联关系的名字反映了该关系的语义。但在某些情况下,需要对关联关系的语义做详细定义、存储和访问。为此可以
建立关联类,用来描述关联的属性。关联中的每个链与关联类的一个实例相联系。关联类通过一条虚线与关联连接。如图4—13所示,一个老师类与一个或多个学
生之间的关联。通过关联类给出“课程,’关联的细节。
3.聚合(Aggregation)
关联关系中有一种特殊的关联关系,称之为聚合或聚集。它描述了整体和部分之间的结构关系。在需求中,若包含“包含”、“组成”、“分为……部分”等含义,往往意味着存在聚合关系。除了一般聚合之外,还有两种特殊的聚合关系:共享聚合和复合聚合。
若聚合关系中处于部分方的实例可同时参与多个处于整体方实例的构成,则该聚合称为共享聚合。例如,一个软件可以由很多构件组装而成,同样其中的一个构件可
以供很多其他软件使用。则构件和软件之间是共享聚合关系。聚合和共享聚合的图示符号是在表示关联关系的直线末端紧挨着整体类的地方画一个空心菱形。如图4
一14所示。
如果部分类实例完全隶属于整体类实例,部分类实例需要与整体类实例共存,一旦整体类实例不存在了,则部分类实例也会随之消失,或失去存在价值,则这种聚合
称为复合聚合。例如,在人与其所属的眼睛之间的关联即为复合聚合,它们有相同的生存周期。复合聚合关系中整体方的菱形为实心菱形。如图4一15所示。
4.泛化关系(Generalization)
泛化关系就是一般类和特殊类之间的继承关系。特殊类完全拥有一般类的信息,并且还可以附加一些其他信息。
在UML中,一般类也称泛化类,特殊类也称特化类。在图形表示上,用一端为空心三角形的连线表示泛化关系,三角形的锐角紧挨着一般类。注意,泛化针对类型
而不针对对象,因为一个类可以继承另一个类,但一个对象不能继承另一个对象。泛化可进一步划分成普通泛化和受限泛化两类。
1)普通泛化
普通泛化与前面讲过的继承基本相同。但要了解的是,在泛化关系中常遇到一个特殊的类——抽象类。一般称没有具体对象的类为抽象类。抽象类通常作为父类,用
于描述其他子类的公共属性和行为。在图形上,抽象类的类名下附加一个标签值{abstract},如图4—16所示。抽象类中的服务仅用于指定它的所有具
体特殊类应具有的行为。这些范围在每个具体子类中有其具体的实现。每一个具体子类可创建自己的实例。
普通泛化可以分为多重继承和单继承。多重继承是指一个子类可同时继承多个上层父类。如图4-17所示,“坦克’’类继承了“武器”类和“运输工具”类这两个类。与多重继承相对的是单继承,即一个子类只能继承一个父类。
2)受限泛化
受限泛化关系是指泛化具有约束条件。预定义的约束有4种:交叠、不相交、完全和不完全。这些约束都是语义约束。可以从不同的方面将一般类特化成不同的特殊
类集合。如图4-18所示,从性别角度,学生可以分为男同学和女同学,这覆盖了学生的所有性别,并且是互斥的。
5.实现关系(Realization)
实现关系是泛化关系和依赖关系的结合,也是类之间的语义关系,通常以下两种情况出现实现关系:
(1)接口和实现它们的类或构件之间。
(2)用例和实现它们的协作之间。
在UML中,实现关系用带空心箭头的虚线表示。例如,图4—19中表述了教师类实现教书接口中规定的所有动作。
1.4.5UML的图
UML中包含用例图、类图、对象图、状态图、顺序图、协作图、活动图、组件图和部署图共9种。使用这9种图就可以描述任何复杂的系统,可以说,这9种图体现了UML的有效性和灵活性。
用例图用于显示若干角色以及这些角色与系统提供的用例之间的连接关系。用例是系统功能描述,一个用例采用普通的文字描述作为用例符号的解释文档。用例图仅
仅从角色使用系统的角度描述系统,也就是站在系统外部观察系统,它并不描述系统内部对该功能的具体处理方式。用例图定义的是系统的功能需求。
如图4—20所示,在UML中,用例图的基本元素有用例、角色和关系。用例图是与用户进行交流的基础,用户可以通过查看用例图了解谁要访问系统,系统提供给每个角色的功能是什么。这有助于寻找遗漏的需求。
(1)用例是系统提供的功能块,它揭示了人们如何使用系统。例如,ATM系统为用户提供取钱、查询结余和转账等一些基本服务。在UML图4—20用例图中
每个服务都对应着一个用例,采用用例有助于了解用户的需求。每个用例应该有一个相关的说明,描述该用例的作用。用例的说明要简短清晰,但是要包括使用该用
例的各类用户及其使用目的。
(2)角色是指与系统交互的人或物,其图形化的表示是一个类似人的图形符号。不带箭头的线段将角色与用例连接到一起,表示两者之间交换信息,称之为联系。
角色触发用例,并与用例进行信息交换。一个角色可与多个用例联系,一个用例也可与多个角色联系。对同一个用例而言,针对不同的角色有着不同的作用。
角色有3类:系统的使用者(即用户)、外部系统和时间。系统使用者是最重要的角色,例如,在ATM系统中的系统使用者有客户、银行员工和系统维护人员。一
个用户对于同一个系统可能会有角色区别,在命名时按照角色来命名,可以提高模型的稳定性。例如,某银行职工负责ATM系统的维护,是维护人员。当他从该银
行取钱时,他又是客户。第二种角色是外部系统,例如,ATM系统要与其他银行的业务系统相连,从而实现银行间信息的交换。第三种常用的角色是时间。时间作
为角色,经过~定的时间触发系统中的某个事件。例如,若某客户在银行有房屋贷款,则ATM系统可能在每个月一个固定的时间进行扣款操作。由于时间不在控制
之内,因此,将它也视为角色。
在UMI。中类图用来表示系统中类之间的关系,它是对系统静态结构的描述。类表示系统中需要处理的事务,类与类之间可能有多种关系。例如,关联关系、依赖
关系、泛化关系和实现关系。类与类之间的这些关系都体现在类图的内部结构之中,通过类的属性和服务反映出来。在系统的生命周期中,类图所描述的静态结构在
任何情况下都是有效的。一个系统模型通常包含多个类图,不同的类图对于系统有不同的意义。一个类图不一定包含系统中所有的类,一个类可以加到几个类图中。
事实上,在软件开发的不同阶段都要使用类图,但是,不同时期的类图反映了不同层次上的抽象。在需求分析时,用类图描述系统中类和类之间的静态关系。与以数
据流图为核心的传统软件工程方法不同,类图不仅显示了信息的结构,同时还反映了系统的行为。在设计阶段,类图描述类与类之间的接口;而在实现阶段,类图描
述系统中类的具体实现。因此,类图可以分为如下三个层次:
(1)概念层。类图描述应用领域中的概念。实现它们的类可以从这些概念中得出,但两者并没有直接的映射关系。一个概念模型应独立于实现它的软件和程序设计语言。
(2)说明层。类图描述软件的接口部分,而不是软件的实现部分。面向对象开发方法非常
重视区别接口与实现之间的差异,但在实际应用中却常常忽略这一差异。这主要是因为面向对象语言中类的概念将接口与实现合在了一起。大多数方法由于受到语言
的影响,也仿效了这一做法。现在这种情况正在发生变化。可以用一个类型描述一个接口,这个接口可能因为实现环境、运行特性或者用户的不同而具有多种实现。
(3)实现层。揭示软件的实现部分。这可能是大多数人最常用的类图,但在很多时候,说明层的类图更易于开发者之间的相互理解和交流。
理解以上层次对于画类图和读懂类图都是至关重要的。但是由于各层次之间没有一个清晰的界限,所以大多数建模者在画图时没能对其加以区分。画图时,要从一个
清晰的层次观念出发;而读图时,则要弄清它是根据哪种层次观念来绘制的。要正确地理解类图,首先应正确地理解上述三种层次。虽然将类图分成三个层次的观点
并不是UML的组成部分,但是它们对于建模或者评价模型非常有用。尽管迄今为止人们更强调实现层类图,但这三个层次都可应用于UMl,,而且实际上另外两
个层次的类图更有用。
在ATM系统例子中,涉及的主要类有用户、银行员工、维护人员、账户、交易、取款和存款类。一个用户可以开多个账户,每一个账户会有多笔交易。ATM系统核心类图如图4—21所示。
对象图是类图的实例化表示。两者之间的差别在于对象图表示的是类的对象实例,而不是真实的类,它具体地反映了系统的工作情况。对象图中使用的图形符号与类图几乎完全相同,只不过对象图中的对象名加了下划线。
对象图不像类图那么重要,对象图通常用来实例化一个复杂的类图,通过对象图反映真正的实例是什么,它们之间可能具有什么关系,以帮助理解类图。对象图也可以用在协作图中,反映一组对象之间的动态协作关系。
状态图是UML反映系统行为的一种技术,它描述一个特定对象的所有可能状态以及由于事件发生而引起的状态迁移关系。大多数面向对象技术都用状态图表示一个
对象在其生命周期中的动态行为。在实际项目中,并不是所有系统都必须要创建状态图,一般只对复杂的对象使用状态图,这些复杂的对象通常都有多种状态,并且
每种状态下处理事件的过程有很大不同。这为对象创建状态图帮助开发人员理解系统的功能。
状态图可以由3部分组成,即事件、条件和动作。其中的每一部分都可以省略。事件驱动对象从一个状态迁移到另一个状态,但是,有时也可以没有事件驱动,自动
发生对象的状态迁移,这时对象可能在一个状态下完成某些活动后自动迁移到其他状态。条件是控制状态迁移发生条件。状态迁移中的操作称之为动作。在事件、条
件和动作的共同作用下描述了一个复杂对象运行状态的改变过程。例如,在ATM系统中当检查到客户进行取钱操作时,账户对象的状态,就要发生相应的改变。账
户对象状态由于取钱而发生的状态迁移如图4—22所示。
在UML中顺序图用来反映若干个对象之间的动态协作关系,主要反映对象之间发送消息的先后次序,说明对象之间的交互过程,以及系统执行过程中,在某一具体时刻将会有什么事件发生。顺序图具有鲜明的时序特征。
一个用例可以有多个顺序图。顺序图的首部放置相关的对象,沿对象向下的虚线表示对象的生命线,两个对象生命线之问的横线表示对象之间发送消息。对象也可以
向自己发送消息,消息上可以标顺序号,表示消息的顺序。在顺序图上,对象在某一时刻的控制权用一个小矩形表示,矩形的长短表示控制时问的长短。对象之间的
消息可以有:
(1)简单消息:对象之间的一般消息,在单个控制线程中运行。
(2)同步消息:发出消息的对象等待接收对象响应消息。
(3)阻止消息:对象将消息发出后,如果接收对象无法立即接收这个消息,则发送对象将放弃这个消息。
(4)超时消息:对象将消息发出后,等待指定的时间,如果接收对象无法在指定的时间接收这个消息,则发送对象将放弃这个消息。
(5)异步消息:对象将消息发出后,继续运行,不等待消息是否被接收。
(6)过程调用消息:对象将消息发出后,等待接收对象处理完整个业务过程后才继续运行。
(7)返回消息:表示从过程调用返回。在顺序图的左边可以注上消息的意义,但是,注释应该简洁。
顺序图中使用的图形符号如表4—2所示。
表4—2顺序图符号元素表
协作图和顺序图的作用一样,也是反映对象之间的动态协作。除了显示消息变化外,协作图还显示对象及其之间的关系。由于协作图或顺序图都反映对象之间的交
互,所以建模者可以从二者中任选其一,以反映对象间的交互行为。如果需要强调时间和顺序,则应该选择顺序图;如果需要强调对象之间的协作,则应选择协作
协作图与对象图的画法一样,图中含有若干个对象及其相互关系(使用对象图或类图中的符号),对象之间传递的消息用消息箭头表示,用标签标识发送消息的序
号、条件、循环方式和返回值等。通过识别消息标签的语法,开发者可以发现对象间的协作,也可以跟踪执行流程和消息的变化情况。协作图也能包含活动对象,多
个活动对象可以并发执行。
协作图也是反映用例中各个对象之间消息传递的图形工具。在顺序图中,消息按时间顺序排序,而在协作图中,不反映消息的时间顺序,但更容易看出对象之间的关系。并且,协作图中还可以进一步反映数据流,这是顺序图无法做到的
注意,实际应用中如果既需要顺序图,又需要协作图,可以先画出一个顺序图,然后利用cASE平台提供的功能,将顺序图转换成协作图。
协作图中使用的图形符号如表4-3所示。
活动图描述系统中各种活动的执行顺序。活动图常用于描述一个操作执行时的流程。同样,它也可以用于描述一个用例的处理流程,或者某种交互流程。活动图由一
系列活动组成,当某个活动执行完毕之后,控制将沿着转移箭头转向下一个活动。活动图中可以显示活动转移的条件,活动之间传递的消息,还可以反映并行执行的
活动图是以图形的方式描述系统中的功能流,既可以在业务模型中显示业务工作流,也可以在获取需求时显示一个用例的事件流。它可以表现工作流的每一个操作步骤、决策点、每步的操作者以及影响的对象。活动图的主要图形元素如下:
(1)泳道:活动图中的分隔线,说明谁负责执行泳道中的任务。
(2)开始状态:工作流的开始点。
(3)活动:工作流可能由多个活动组成,每个活动都是工作流的一个步骤。
(4)操作:一个活动可以有多个操作步骤,这些操作可能发生在进入活动时、退出活动时、活动内或特定的事件发生时。
(5)业务对象:工作流影响的实体(对象)。活动可能会改变某个对象的状态,将活动影响的对象及其状态也标识在活动图中,使得活动图表示的信息更加完整。用虚线表示哪个活动影响对象的状态。
(6)交接:描述工作流如何从一个活动转移到下一个活动。表示符号是活动之间的带箭头线。
(7)决策点:工作流中的分支判断点,在这一点上根据条件判断工作流走哪个分支路径。同步工作流中多个活动可以同时发生。
(8)结束点:工作流的结束点。
泳道、开始状态、活动、业务对象、决策点以及结束点的表示符号如图4—23所示。
组件图用来反映代码的组织结构。组件可以是源代码、二进制文件或可执行文件组件。组件图说明各种组件之间的依赖关系,利用这种依赖关系能够容易地分析一个组件的变化对其他组件的影响。
组件可以与公开的任何接口(如OLE/c()M接口)一起显示,也可以把它们组合起来形成一个包(Package),在组件图中显示这种组合包。实际编程工作中经常使用组件图。
部署图用于描述系统硬件的物理拓扑结构以及软件在此基础上的分布,图中可以显示计算节点的拓扑关系、通信方式、每个节点上运行的软件构件和软件构件包含的
逻辑单元等。部署图中的节点代表某种计算构件,通常是某种硬件。软件构件代表可执行的物理代码模块,例如,一个可执行程序逻辑上可以与类图中的包或类对应
起来。因此,部署图中显示运行时各个包或类在节点中的分布情况。由此可见,部署图是描述基于计算机的应用系统的物理配置或逻辑配置的有效工具。
在部署图中,节点代表一个物理设备及其软件系统,节点之间的连线表示系统之间进行交互的通信路径,称为连接。
连接线上的《》符号内说明通信协议或者网络类型。节点用一个立方体表示,节点名放在左上角,其中的每个构件代表一个负责某种专门处理的包,部署图显示了各个包在系统中运行的分布情况。为了区别于构件图中的构件,将部署图中的构件称为“包构件”。
当今,随着网络通信越来越发达,用部署图来描述分布式系统中的软硬件分布和配置显得特别重要。有时,为了清晰起见还可以在部署图的节点旁添加一些注释,说
明该节点处理能力和存储容量方面的要求,节点之间的通信协议的特点以及对带宽、安全、质量方面的要求。最好还添加关于每个节点的容错处理能力、错误恢复模
式、移植处理和数据备份等方面要求的说明。只有确定了节点分布和处理要求之后,设计人员才可能设计实现方案来满足各种要求。
服装行业在经营业务上的一个最大特点是产销一体,服务多样。服装店除了保证各类现货服装供应外,还必须开展备料定制、来料加工、修旧翻新等服务项目。实践
证明这三个服务项目深受群众欢迎。因为它们在广大人民群众的生活领域里有着重要的地位。每一位服装店的定制、来料加工营业员都要珍视自己的本职工作,努力
学习,钻研业务技术,为广大消费者服务。
第一节定制、来料加工的特性和内容
一、定制、来料加工业务的特性
备料定制和来料加工是服装行业一项特殊的服务项目。因为它不同于现成服装的供应,而具有四个显著的特征:(1)原料是顾客自备或选定的;(2)顾客的体型
规格不同,对款式要求也不同;(3)顾客在,L,理上带有社会倾向或自身倾向,在衣着上要求时兴感和具有时代气息;(4)人们受着政治、经济、风俗习惯等
因素的影响,对衣着产生不同的要求。因此,服装行业仅凭现成的服装供应,势难满足消费者的上述不同需求。只有开展定制、来料加工业务,才能满足顾客衣着上
的各种特殊需要。
上述四个特征要求定、来料营业员具有较宽的知识面。(工)要会精确地量体,即观察体型、测量出各部位的特征,(2)要会算料和配料,既要省料又要配合确
当;(3)会选择衣料、识别衣料,为顾客当好参谋,设计时兴款式:(4)会试样补正,纠正服装上的疵病或弥补体型上的缺陷(下面将再详述);(5)有裁剪
和缝纫知识,能鉴别服装质量优劣,并能分析产生的原因。
由此可见,服装三、四级定、来料营业员应有良好的服务态度,并熟悉业务,熟悉定、未料加工服务中各道流转环节与规章制度。
二、认真执行“五定”制度
人们常说:没有规矩,不成方圆。一个企业要使自己的经营活动得到正常开展,必须依据各项规章制度给予保证。服装定、来料加工中规定的“五定”制度是行之有效的好方法,它是搞好定、来料加工服务的保证。“五定”制度的内容是:
1.定岗位责任
负责定、来料加工服务的营业员,要认真做好选料设计、看体量衣、算料配料、画样设计、试样补正、责任修改等技术工作,以及登记发料、验壳试样、填试样单、检查验收、验单交衣、登帐销号等业务工作。
2.定承接品种
凡是本企业定、来料加工业务等级标准范围内的服装品种,每个营业员都要热情承接,不能借口推却。当前,新化纤衣料日新月异、性能各别,如一时因技术力量、
生产能力跟不上,应建议领导尽快组织落实。同时对消费者要作耐心解释工作。对承接品种要公开张贴,接受群众监督。
3.定承接指标
按照本企业或上级下达的年度指标和季度指标,;订出本柜及本人的具体承接件条数,落实措施,定期检查计划。充分发挥定、来料营业员的主观能动作用,协力解决“做衣难”的老问题。
4.定交货约期
交货期以方便群众为前提,不能过长。以服装面料为依据定各类品种的交货约期,定出约期必须如期交货,这是涉及到商店信誉的大问题。每个营业员都要经常和工场联系,尽量做到不脱期。
来料加工的数量是季节、气候的函数,营业员必须时刻了解工场的生产率,一旦发现来料数量大大超过生产能力时,要及时提出推迟交货期的意见,向领导汇报建
议,以便积极采取缓和措施,反之,来料数量减少时,应将交货期缩短,同时,扩大承接的品种,以求承接数与生产率相平衡。
5.定收费标准
定、来料加工服装有特、1、2、3,4等级标准,因此服装的质量与级别要相符,而级别则与工价要相符。不允许多收或少收。要防止虚报辅助物料、多算胸衬、领衬等用料数而变相提高工缴。擅自提价和降低收费标准都是违反物价政策的。
三、定、来料服装加工环节
服装定、来料加工业务要比成品销售复杂得多,营业员在接待消费者过程中,有技术上的手续,也有业务上的手续。加工环节是低档服装手续少一些,高档服装手续多一些。现以高档呢服装来料加工为例可分七道环节。
1.开单承接
先量体取得尺寸后,营业员可开单、画样和收款。在服装定单上要贴好小样,写明人体有关部位的尺寸和某些特征、接迟日期、试样日期、交货日期、顾客姓名、地
址、工价、应收款与欠收款,同时要画好加工服装的品种式样(包括领、袋、钮),便于各生产部门了解顾客要求。
男、女式服装的定单习惯分开,现各择一份,供参考(见表6-1、表6-2)。
此定单一式三联:第一联右侧是定单,盖上收银章交顾客,左侧是尺寸单随料送交工场;第二联交出纳,第三联存柜台留底以备查核。
2.登记发料
根据承接的料子,营业员应于当天及时作好定、来料登记。写明接进日期、定单编号、料子名称、加工品种、试样日期、交货日期筹,然后将尺寸单夹于衣料之中,
并于当天或次日将所承接的料子,填具发料单送交工场。门市和工场的经手人都要有收、发制度,明确责任,便于查考。
3.验壳试样
根据工场交来的服装试样壳子,营业员首先应该做好壳样的验收:核对定单所填写的各项规格尺寸、料子名称、品种式样、顾客姓名。这样,可以做到,L,中有
数,并防止张冠李戴。然后,对顾客要做好接待试样工作。在试样过程中,要揣摩顾客的,L,理,要当好顾客的参谋,对要修改补正部位作好符号标记和文字说
明,这样,可以使顾客产生信任感,防止一些不必要的矛盾。
4.填试样单
试样以后营业员应认真填写服装试样补正单(表6-3)。在试样补正单上,除填写指定的项目外,特别要写明顾客要求,即,C/理倾向和穿着习惯。这样,既便于工场修改补正、符合消费者要求,又可分清内外责任,减少纠纷。
5.检查验收
工场交来的服装,营业员理应要检验,鉴于时间紧凑,可采取简易检验法(见第四章第四节服装质量的简易鉴别方法)。同时,将余料和衣服一起挂放好,遮好盖布待顾客来取。
6.验单取衣
顾客凭定单来取衣时,营业员要认真核对定单与尺寸单的编号、顾客姓名和加工内容,验单正确无误后,收清尚欠工款,再将发票连同服装交给顾客。
7.登怅销号
营业员根据收回的取衣定单,要在登记簿上写明顾客取去的日期,及时做好登帐销号工作。
第二节定制、来料加工服务技术
服装定、来料加工是一门技术性和知识性都很强的工作。涉及到商品学、心理学、美学、工艺学、经济学和企业管理学等多门学科。所以,要当好一个定、来料三、
四级营业员,除了要熟悉和处理好定、来料加工服务过程中的各道业务环节外,还必须认真掌握定、来料加工服务过程中的各门业务技术。由于服装面料和品种的不
同,在技术和工艺上也有简有繁,现以高档的呢服装加工为例,阐述定、来料加工服务中必须掌握的五门技术知识。
一、选料设计
1.定货选料
营业员在接待来店定制服装的顾客时,首先碰到的一项业务技术环节,就是选料。料子选得好,既成交了一笔定制服装的业务,又满足了顾客的衣着需要。要选好料
子,就必须懂得一点,L,理、色彩和造型设计的知识。在接待中要了解顾客的,L、理,观察顾客的体型特征,包括脸型、肤色等,问清顾客的爱好习惯,探求顾
客的经济可能。这样,在推荐衣料时,便可很好地起到为顾客当好参谋的作用。
2.来秆验收
营业员在接待来料加工的顾客时,一定要认真地做好来料验收工作。验收来料的多少,门幅的阔狭,有否疵病,识别料子的品种、性质,这样可正确处理服装的加工工价、式样规格,以防后来产生所谓“说不清”的矛盾。
3.设计画样
画样是定、来料营业员的基本功,也是设计服装的基础。初学者可先画衣服的半爿,即画出门襟格(开钮洞)的一片,熟练后可画整件服装,最后再画出头、手、脚和着彩色,使成为一件完整的服装设计稿。
服装定制营业员在短短的一、二分钟内,要将顾客要求和本人作参谋的款式结合起来,只要画出衣服的草图就可以了。
画衣服草图有三项原则:
(1)比例恰当。即领、袖、衣片的比例要画得匀称,不要使某一项画得过份大(如领子),造成严重地“失真”感。
(2)线条流畅。衣服的图稿不比普通的速写和素描,只需用关键的几笔将衣服勾画出来。因此,折绉不能太多,另外要有意以地将衣服缉线、袋口、钮扣、裁剪开刀的线条重点突出,清晰勾画。目的是为裁剪师傅所注意,顾客也可一目了然自己所做的款式。
(3)富有质感。衣服草图同样要贯彻近大远小,虚实结合的透视原理,使衣服图样有立体感。
现分步介绍怎样练习画衣服的图稿。女式服装画法示意图见图6-1a一91;男式服装画法示意图见图6-2a一夕;裤子画法示意图见图6-3a—,/。
(1)女装画样:伴图6-la一9l女上装画法示意图。
①与②画出领子的鸡,L,形,注意这个鸡心形不是对称的,要有侧面感。根据透视学近大远小原则应划出左大、右小的形状(见图6-la)。
⑧先练习尖角领,可以目察挂在衣架上或穿在模特儿身上的衣服,进行实物写生。领子是两边对称的,但画稿时,应左边大刁:右边,为下一步立体感作好准备。
④画好右边领于是增加立体感的关键,右边领子的外形要与左边相似,而缩小程度适当(见图6-lb)。
②、飞&)…
图6—1口图6—1b
⑤画出领脚线,使领子产生有领脚的质感。目前有些画稿于脆画出模特儿的颈部(见图6-1c),其方法与上述相同。
⑥与⑦画出}

我要回帖

更多关于 java 进销存系统 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信