基于销售点框架的Java面向对象程序设计教学研究与实践

作者: 曹文平

基于销售点框架的Java面向对象程序设计教学研究与实践0

摘要:在面向对象软件开发课程教学中,培养学生的软件开发能力和团队合作交流能力至关重要。 为此,学生需要参与完整的、以团队为导向的项目实践,特别是模拟真实商业应用的项目,并在项目开发全流程中锻炼相关能力。文章介绍了一个基于Java的销售点应用框架,该框架可扩展出不同的日常应用功能,满足不同团队执行不同任务的要求,为学生提供了一个真实感强且具有一定挑战性的项目实践平台。 实践表明,该框架能够有效提升学生的面向对象软件开发技能和团队协作能力。

关键词:面向对象程序设计;Java教学;项目驱动学习;销售点框架;软件工程教育

中图分类号:TP311 文献标识码:A

文章编号:1009-3044(2025)09-0130-04 开放科学(资源服务) 标识码(OSID) :

0 引言

软件开发是计算机专业人才培养的核心目标之一,学生需要通过参与实际项目,才能真正掌握软件开发技能, 特别是大型软件项目的团队协作开发经验。因此,目前的课程中加入了要求学生完成涉及个人工作的任务,以及许多其他需要与团队合作的任务。对于小组作业,应尽可能明确地告知学生小组的性质和小组活动/角色,包括强调相关事项的重要性,如纪律严明的方法、遵守截止日期的必要性、沟通以及个人和团队绩效评估。例如,在建构主义和项目驱动学习理论基础上,将翻转课堂教学与项目驱动教学方法进行有效融合,采用案例教学、项目驱动、翻转课堂等教学手段对课程进行整体设计[1];以赛事化的竞赛作为项目来源,将课程的专业知识与学生综合能力的培养结合起来的教学方法,不但激发了学生的学习兴趣,而且学生提前获得了未来工作所需要的技能[2];将项目实现与过程评价结合起来的混合式教学模式丰富了教学模式的同时,也提高了学生的学习积极性[3];遵循软件工程的设计方法,采用沙盘模拟的项目驱动教学方法,使学生丰富了社会经历的同时,提高了学生的动手能力[4];以学生为中心,线上线下相结合、讲授与项目相结合的混合式教学方法,也是提升学生的自主学习能力、知识自我获取能力和复杂问题解决能力的教学方法[5]。以上文献研究将项目驱动作为一种重要的教学方法纳入面向对象的课程教学中,获得了一定的效果。

然而,设计一个优秀的软件开发项目课程也面临一些挑战:学生必须面临从面向对象编程的技术挑战到团队合作和固定截止日期的挑战,这些都是真实项目中常见的问题。本文介绍了一个基于Java的商业应用程序框架——销售点框架。相比一般案例项目,该框架具有较强的可扩展性和团队合作性,更好地锻炼学生软件开发和团队合作能力。该框架设计目标如下。

1) 在学术和工业环境中,初学者通常会加入已经进展顺利的项目。了解足够多的项目结构以完成自己的工作,即学习如何应用框架。

2) 对于组织者来说,很容易定义一些类似的项目,并将其复杂性从中等扩展到相当困难。由于基于相同的框架,所有不同的任务仍然是可比较的,这是将项目课程扩展到较大班级规模的基础。

3) 对于学生来说,扩展框架预定义的应用程序架构简化了应用程序的设计。此外,该框架提供许多可使用的特定组件。

4) 初学者有机会通过示例学习良好的设计:框架的定义是为通用程序功能设计的,学生可以学习如何设计一个具有灵活性的软件架构。

1 面向对象软件开发教学

面向对象技术已成为软件工程教育的核心部分。学生掌握“面向对象思维”需要相对较长的时间是该课程的普遍问题。

1) 学会通过建立组成软件的组件——对象来解决问题;具有面向过程编程背景的学生可能首先必须放弃以算法为中心的方法。

2) 学会如何设计可重用的组件,养成重用现有类而不是发明新类的习惯。

3) 初学者需要理解软件生命周期和适当需求分析的重要性、模式和框架的重要性,并开始思考软件开发过程的组织。

为了应对这些挑战,采用了两阶段教学法:课程讲授阶段和项目实施阶段。第一阶段是关于Java面向对象编程的快速而密集的课程,建立在基本的面向过程编程基础上,为后续项目课程提供了必要的知识和实践。本课程旨在从概念层面涵盖上述所有挑战。例如,学生将学习基本设计模式、GUI编程以及系统软件设计和开发的基本方法。相关教程让学生有机会从更实际的层面考虑这些挑战。需要说明的是,这门初级课程的目的只是为学生提供成功完成项目课程所需的基础知识。学生在后续的学习中有机会更深入、更高水平地探索这些主题。

在项目课程中,将学生分为每组约4至6人,并要求他们采用团队组织,即把需求分析、系统设计、系统实施、系统测试人员和管理员角色分配给团队成员。除了扮演其中一个角色外,所有学生都必须作为开发人员来展示他们的编程技能。老师则扮演双重角色,既是学生的顾问,也是软件项目的客户。老师可以线上或线下处理技术问题和框架更正或扩展请求。

由于参与者人数较多,项目课程需要一种正式的组织模式。包括沟通渠道和规定开发过程的时间表。

1) 沟通渠道。所有信息都在网上发布:框架、文档、教程和单个项目规范。学生团队需要以同样的方式在网页上展示他们的解决方案。在每个阶段结束时,团队在其网站上展示他们的成果。这些沟通是监督和指导班级的基础,可以在学生的第一个项目中为他们提供所需的指导。

2) 时间表。时间表规定了某些开发节点必须完成的确切日期。该流程针对学生进行第一个项目并使用销售点框架的情况进行了定制。表1中显示了基本节点以及相对截止日期。项目课程的最终交付包括项目计划在内的主要成果。

2 框架技术概述

该框架的设计原则是易用及可扩展,以方便初学者容易理解、扩展功能。框架为开发销售点应用程序提供核心功能;支持任何类型销售活动的应用程序。所有销售点应用程序都提供目录中列出的商品或服务。根据申请类型的不同,业务可能包括销售商品、购买商品、出租设备、接受订单、处理投诉或退款、接受待售或退货商品、修理或清洁物品等服务。在后台,商店管理层的职责包括记账、定期检查供应、补充库存和收银机、及时订购商品、在目录中添加新商品、移除滞销物品以及调整零售价格。

应用程序的两个核心概念是目录和库存:目录描述销售项目的集合。销售项目可以是一种正在销售的商品或提供的服务。对于每个销售项目,目录都会列出其名称、价格,以及可能的其他一些属性,如尺寸、颜色等。库存包含一组销售项目列表,说明目录中每个销售项目的库存中实际包含该项目的多少个实例(零个或更多) 。例如橱窗里的商品、购物袋里的东西和订单上的物品。

该框架提供的核心功能可分为三个一般领域:

1) 应用程序控制。为构建销售点应用程序提供了基本类。它使销售点成为一个应用程序框架,是一个决定应用程序体系结构的框架。包含的关键概念有商店(Shop) 、销售点(SalesPoint) 和销售过程(Sa⁃leProcess) 。商店代表主体应用程序功能,并管理一组销售点,这些销售点是与客户进行交互的单独场所。在任何时候,每个销售点都可以执行销售过程中的特定步骤;进程可以嵌套,并提供提交、回滚和记录交互的功能。

2) 数据管理。为结构化和管理数据提供了基本类。关键概念如下。

目录:与网上商店的目录类似,列出了可供销售的商品信息。

库存:库存为相应目录中描述的对象的实例提供了容器。因此,库存必须与其对应的目录具有相同的结构。

数据篮:类似于许多在线商店使用的“购物篮”概念。从技术角度来看,数据篮的内容表示客户当前购物交易的状态。与其他交易一样,数据篮可以被提交(例如,当商品被付款并从商店中取出时) 或回滚(即商品被恢复到原来的货架上) 。数据篮也可用于包括顾客暂时留在商店中的一堆物品,例如待付款的商品,或商店管理层正在准备的新目录的物品描述。因此,它们比购物篮更通用,并且可能包含关于更抽象的交互的信息。

3) GUI组件。框架提供了许多特定的GUI组件,特别是用于显示和操作目录和库存的内容。程序员可以通过多种方式对其进行调整,例如,按照商品的价格进行排序,或者在显示之前对目录应用过滤器。

此外,该框架还提供了一些其他可选的功能:

用户管理:系统的用户(包括商店的人员) 被分为不同的类别,同一类别的用户具有相同的功能。该系统可以允许用户以匿名顾客的身份进入商店进行普通业务。为了获得更显著的功能,用户必须在登录过程中识别自己。

时间管理:为了测试销售点应用程序的行为,可以将时间进行离散间隔划分:通常一个步骤对应一天。根据应用程序的需要,可以定义不同的间隔。时间管理是商店经理的特权能力。

保存和加载:此功能允许将模拟的当前状态(所有客户及其所有数据篮,以及属于商店的所有目录和库存等) 保存在一个文件中。此外,在这些文件中进行选择,可以再次加载任何保存的状态。该功能在最终项目演示期间演示应用程序功能时非常有用。

2.1 应用程序控制

图1显示了框架中应用程序控制的核心类。每个销售点(SalesPoint) 应用程序都由商店类(Shop) 的单个实例表示。Shop管理任意数量的SalesPoint实例,代表与用户交互的各个点。对于新的销售点应用程序,需要提供至少一个应用程序的SalesPoint子类。

系统和用户之间的所有交互都被编码为销售过程类(SaleProcesses) ,它们实际上是由状态机建模的。用户交互发生在状态中,计算发生在转换中。以这种方式重新定义每个行为的结构有助于提供上面提到的一些模拟功能。特别是,它使学生能够将应用程序运行到特定的点,并将当前系统状态保存到磁盘。这意味着他们可以与老师预约进行序列化,并演示特定时间点的场景。

SaleProcesses在ProcessContext的上下文中运行,ProcessContext提供对用户界面以及作为与流程相关联的当前事务句柄的数据篮的访问。该框架提供了两个具体的ProcessContext实现,支持在SalesPoint本地运行和在Shop内全局运行的流程。

2.2 数据管理

图2显示了为数据管理提供的核心类。如前所述,这些内容侧重关于物品信息的目录(Catalog) 和关于可用性和特定对象信息的库存(Stock) 的概念。目录可以包含CatalogItems,类似地,Stock 可以包含StockItems。每个库存都与一个目录相关联,该目录提供有关库存中项目的信息。因此,通过在相应的Catalog 中查找其名称,每个StockItem 都与相应的CatalogItem相关联。该框架将在库存和目录之间强制执行同步约束,使得库存的结构始终同构于其目录的结构。也就是说,如果库存包含另一个库存,则目录必须包含相应的目录。库存可以是CountingStocks 或StoringStocks。前者只对每个CatalogItem的可用项目数进行计数。后者可以为每个单独的StockItem维护附加信息。所有这些概念都作为接口提供。该框架提供了一个标准实现,用于维护内存中的所有数据。但是,因为框架客户端只使用接口,所以我们可以提供不同的实现——例如,连接到数据库的实现。

2.3 框架设计的教学原理

在上面的讨论中,主要关注设计选择的技术问题。然而,设计也受到一些与教学相关的考虑因素的驱动,例如:

1) 设计和实施之间的一致性。希望学生使用系统的方法来设计和实现他们的应用程序,而不仅仅是打包代码。为了对此提供激励,框架的目标是让他们更容易从设计转向实施。比如使用显式状态机结构来实现SaleProcess。这种结构为学生提供了一条从用例模型和场景通过UML状态图到应用程序实现部分的直接路径,有助于学生理解前期分析和设计的好处。

2) 设计模式。在框架的整个设计过程中,注意使用适当的设计模式,目的是让学生通过反复看到这些模式的使用,并体验它们对框架重用的影响,从而熟悉这些模式。其中一些模式,学生在第一阶段课程中就已经知道了,其他模式可能是他们在框架中第一次遇到的。框架中存在一些模式的文档,希望学生使用适配器和桥接器或控制反转等模式,鼓励学生探索他们在自己的代码中的使用。此外,在某些情况下学生可以使用模式的修改版本,这样也可以引发学生和老师之间对这些模式的讨论。

经典小说推荐

杂志订阅