UML在面向对象软件工程教学中的应用探讨
2022-01-17王方丽邓一星
王方丽,邓一星
(广州城市理工学院 计算机工程学院,广东 广州 510800)
0 引言
软件工程是一门融合多门计算机专业知识的综合性课程,从工程学角度讲解软件工程的基本理论、技术和方法。该课程的主要目标是提高学生软件开发过程中分析问题、解决问题的能力,培养学生的各项专业技能和素质。现阶段,软件开发主要采用面向对象的技术进行,为了更好的服务于当前的软件开发,软件工程教学一般也针对面向对象的开发过程进行讲解。与面向过程的软件开发类似,面向对象的软件开发也具有生命周期,如可行性分析、需求分析、设计、实现和测试等环节。只不过,面向对象的软件工程中,分析、设计和实现阶段的界限不明确。而在软件开发中,越晚发现错误,改正错误的代价就越大。如果不事先做好充分的分析设计,做好计划,直接仓促的实现系统,会出现各种问题,特别是后期改正和维护的成本非常庞大。在软件工程中,建模是目前经过检验并广为接受的一项工程技术。一个系统可以从不同的角度,运用不同的模型进行阐述,以全面系统呈现它的组织结构,或者动态逻辑。运用模型可以更好的对系统的结构和组织进行划分,帮助更好的设计开发系统。
1 UML特点
统一建模语言(Unified Modeling Language,UML)是在吸收、提炼至今存在的所有其他软件建模语言的基础上提出的,其表达能力超过了以往任何一种面向对象的分析设计方法,对于系统模型的表达能力非常强大,是面向对象分析设计的工具,具有如下特点:
(1)UML综合了Booch、OMT和OOSE等方法的图形表示和基本概念,删除多余的、容易引起混乱的符号,同时添加了新的符号,表达能力非常强大,可以根据各种项目的具体需求,选择适合的图形符号来表示[1]。
(2)UML独立于任何编程语言,运用UML建模在设计开发中可以起到沟通桥梁的作用。
(3)在运用UML建模过程中,只有简单有效的UML图形才能达到最佳的应用效果,根据实际情况选择适合的图形进行描述。
(4)UML根据实际应用需要演变,提出了模板、扩展机制、线程、分布式、过程、模式等新的概念和类型[2]。
UML提供了多种不同类型的模型,可以帮助开发人员更好地理解问题,分析问题,建立完善、可靠的系统模型,使开发人员和用户对于问题的描述可以有相同地理解,保障问题分析的正确性,有利于后期的编码,测试、维护。在面向对象的软件工程教学中,为了更好地帮助学生分析问题、理解问题,更好地掌握抽象的概念,将UML结合具体的实例融入到面向对象软件工程教学的各个阶段,让学生对于UML和软件工程有更为清楚的认识,有利于对已学知识进行巩固,为实现测试等打下良好的基础。
2 UML在面向对象软件工程教学中的应用
在软件开发中,首先需要开发人员进行专业、准确地需求分析;再通过进一步分析设计将需求分析阶段的成果转化为设计产品,然后选择适当的语言,进行编码实现,最后经过单元测试、集成测试、系统测试等测试环节,形成最终的目标系统。在软件开发的不同阶段使用不同的开发方法。软件工程课程强调理论与实践并重,在理论环节中,突出以案例教学为导向;在实践教学环节中,突出软件项目驱动模式[3]。因此,在针对面向对象开发的软件工程教学过程中,以软件开发过程为线索,结合较为常见的工程案例,运用UML技术,对软件需求、分析、设计等建立模型(如建立用例模型、对象模型、动态行为模型和部署模型等),用以指导软件实现,为软件测试提供依据。通过以 UML模型贯穿软件开发全过程的项目讲解,让学生充分体会到面向对象思想在实际软件开发中的指导作用[4]。同时将理论教学环节和实践环节结合起来,有利于学生对于类、接口等抽象概念知识地理解,有助于学生更好的理解软件工程的思想和面向对象的开发过程。
在面向对象的软件开发过程中,使用UML建模技术,可以达到以下目的:有助于按照所需要的样式或实际情况对系统进行可视化;可以描述系统的行为或结构;提供了指导系统构造的模板;有助于对做出的决策进行文档化。本文以图书馆管理系统中的读者功能为例,分析说明如何在面向对象的软件工程中运用UML技术进行来理论知识和实践知识的分析讲解。
2.1 需求分析阶段
软件开发过程中首先要确定用户需求,了解做什么。在面向对象的软件开发中,需求分析阶段主要形成用例模型。用例模型主要由参与者、用例、以及它们的关系构成,参与者和用例之间主要是关联关系,参与者和参与者之间可能存在泛化关系,用例和用例之间的关系主要有包含、扩展和泛化关系。
目前,图书馆管理系统中,读者主要采取自助借、还书的形式,通过分析发现,读者还需要有登录、注册、找回密码、查询书籍、借书、还书、交罚款等功能。建立用例模型的第一步是识别参与者,很显然这里的参与者是读者。接着,确定用例,即参与者希望系统提供的功能,这里主要有借书、还书、登录等用例。最后确定用例和用例之间的关系,如读者登录时可能会忘记密码,需要提供找回密码功能,找回密码必须满足一定的条件才能发生,因此与登录之间是扩展关系;借书时需要验证读者身份信息,只有身份验证通过才能借书,因此身份验证和借书之间是包含关系;查询书籍提供了两种方式模糊查询和精确查询,任何一种方式都能查询,因此,这两种查询方式和查询书籍是泛化关系,最后,还书时,可能会碰到超期等情况,就需要交罚款,因此,交罚款与还书构成扩展关系,并且交罚款为扩展用例。通过分析,建立读者用例图,如图1所示。通过建立具体的用例模型来分析实际问题,学生可以更好的理解和体会参与者、用例以及它们之间的关系等概念,加深对于理论知识的理解和掌握。
图1 读者用例模型
2.2 系统分析和设计阶段
在系统分析阶段,主要考虑“怎么做”,主要运用概念层的类图描述系统静态结构,运用交互图、状态图等描述系统的动态行为。通过分析系统的动态行为,可以显示对象之间的关系,表示对象之间的消息通信,找出引起对象状态改变的事件或动作,从而进一步找出类的属性和操作,实现完全意义上的类。
UML中交互图主要由顺序图、通信图、交互概览图和时序图组成。这些图各有不同的运用场景,不过以顺序图和通信图为主。顺序图强调消息发送的时间顺序,表示用例的行为顺序,通信图强调发送和接收消息的对象之间的组织结构,这两类图形可以互相转换。
在读者自助借书过程中,首先会要求读者出示读者证,验证成功后,读者将书放在指定位置,系统就可以识别和检测图书,验证借书数量是否超过限制,如果不超过则可以借书,创建借书记录和修改书籍信息。该过程可以用顺序图来进行描述,如图2所示,强调为完成借书这一功能,读者和其他对象消息发送的时间性。对于图2进行进一步分析,可以发现读者类需要有身份验证的功能,借书记录类需要与借书操作借书数量验证功能,书籍需要有更新状态功能,也就是需要有对应的方法。如果需要强调交互的空间性,就需要用通信图进行描述。
图2 借书顺序图
在对象的生命周期中,如果涉及到状态的变化,可以通过状态图来描述对象随时间变化的动态行为,通过分析引起状态改变的动作来进一步分析类需要实现的方法。图书管理系统中,新的书籍录入系统后才能进行借阅,书籍状态可以在可借、借出和超期三种状态间进行转换,书籍如果不能再流通,可以从系统中删除。通过分析书籍状态的转变,可以得到如图3所示的状态图;进一步对于引起状态改变的事件、触发条件等进行分析,得到书籍类有新增、删除、借出、还书等方法。
图3 图书状态图
如果一项工作的完成涉及到多个对象直接的交互,或者需要对于某项工作的流程进行描述,可以运用活动图来进行描述。
类图建模贯穿于系统的分析设计阶段,从最初概念层类图,到系统开发小组能够完全理解的类。设计阶段一般采用类图、包,对类的接口进行设计,可以使用活动图来描述类中某些复杂方法的实现和主要算法的流程。如在图书馆管理系统中,通过分析用例图、顺序图、图书状态图等可以得出系统中有读者、读者类别、图书、借书记录、还书记录、图书馆等类。在建立类图过程中,对于类的属性和操作确定,类与类之间的多重性等进行讲解。得到系统模型后,通常还需要根据需求和设计要求进行优化,如优化时要考虑全局,因此需要各种指标的优先级,以便在优化是进行折中;讲解一些常见的提高效率的技术,如增加冗余关联可以提交访问效率,增加限定关联缩小查询范围,为避免重复计算保留一些派生属性等。
2.3 实现阶段
在面向对象的开发中,实现阶段包括两部分的工作:把前面分析设计的结果翻译成某种面向对象的程序设计语言书写的程序,测试并调试程序。
在实现阶段,主要从实现层类图得到程序的内部结构,增加控制类;通过顺序图、活动图等得到程序的实现过程;通过通信图中的消息发送得到对应的操作函数,返回值得到对应的属性变量;通过状态图中引起状态发生改变的事件,找到对应类的操作实现[5]。
在实现的不同阶段都需要进行测试,主要有单元测试、集成测试和系统测试,这些测试与分析设计阶段关系如下:单元测试主要依据实现层类图和类的说明书来测试已经实现的程序单元,集成测试主要依据设计层类图、包图、构件图、通信图等测试类和包的接口,把每个程序模块正确的集成到系统中;系统测试主要根据用例图来测试系统功能是否正确,是否符合用户需求。在讲解测试理论和实施的过程中,将UML对于系统的分析和设计结合起来,加深对于相关理论的理解、加强对于UML在面向对象软件开发整个生命周期中作用的认识。
2.4 运行和维护阶段
系统测试完成后,进入运行和维护阶段,这一阶段先使用UML的配置图,把系统的软件和硬件部署到用户的实际运行环境中;运行阶段出现状况需要维护,则可以利用前面分析设计的结果帮助快速分析和找出问题,进行修改。
3 结论
在面向对象的软件工程教学中,会涉及到很多抽象的概念和方法;UML提供了从各种不同的视图观察和描述软件系统特征的标准方法,可以应用于软件开发过程的各阶段;将UML模型与软件工程项目实践结合起来进行教学,可以增强学生对于教学内容的理解,还有利于体现知识的实践性和系统性,更好的完成课程的教学目标和培养目标。