热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【结对编程总结】数学题目生成系统项目

这几天我与范章木同学结对制作了一个简易的数学题目生成系统项目,以下是结对与协作的过程中我收获的感触。此次结对编程项目虽然基于个人项目,但经过几天的修改,最后成品几乎与个人项目无关,

这几天我与范章木同学结对制作了一个简易的数学题目生成系统项目,以下是结对与协作的过程中我收获的感触。

此次结对编程项目虽然基于个人项目,但经过几天的修改,最后成品几乎与个人项目无关,只保留了一点逻辑框架。

 

在此次结对编程项目中,为了满足项目需求,我重写了【题目生成模块】,给项目并加入了【短信发送模块】和【答题模块】。因为个人项目所作的UI过于小气,不易扩展更多功能,我与范章木同学一同又重写了所有的【UI界面】。

最终的项目可简单分为:用户管理模块,题目生成模块,短信发送模块,UI界面模块,数据库管理模块,分别由User、Question、SmsControl、UI、DBControl几个类负责。

 

题目生成模块

在个人项目中我简单实现了在可算约束下的题目随机生成,生成效果符合需要但方法不对,最后需求答案时很难计算,于是我直接重写了题目生成模块。

新的题目生成模块中将每个计算单独作为一个对象使用,每个符号运算对应着一个类,这些符号运算类都有一个共同父类Calculate,其规定了必须实现的多态方法。

技术分享图片

 

 

 每个符号运算类必须实现getValue()和getString()两种方法,在实际实现中,每个类内部有相应数量个Calculate成员变量指向其他符号运算。

当需要得到答案值或者式子,便从最表层开始从外向内递归调用相应函数,在每个对象内部组合传出,最终得到具体的式子。每个符号运算类都有着自己独有的实现方式,但他们的接口总是相同的,可扩展性很高。

最开始编写的过程不是十分顺利,很多需要额外规定的细节都需要被先行考虑。我又重回到设计上,定下各种细节,最终实现了模块。

因此编写一个大的内容之前需要确定的:

1、使用的体系结构

2、各种细节约定

 

短信发送模块

为调用短信发送模块的API,需要安装平台的SDK。但麻烦的是平台给出的可下载的SDK存在各种依赖问题,在多次尝试未果后,我决定将整个项目移到Maven,再学习Maven的使用。

Maven通过 POM.html 文件控制依赖的安装,让SDK的安装变得较为容易,最后数据库的依赖jar也通过pom文件解决。

 

答题模块

答题模块在完成题目生成模块之后只需要实现相应的逻辑和UI。在这里实现了三个大步骤:答题,答题确认和答题结果。

答题需要通过元素对象的传递来实现面板和内部内容的更新,swing的这些麻烦点这让我体会到了网页html、js、css配合的优越性。

答题确认和答题结果界面基本相同,不同点是需要通过不同元素的提示来提醒一些操作。

 

UI界面

在写完答题模块后,我动刀重写了主界面的UI。主界面功能较多,但看起来必须整齐整洁不乱。

重写后出现了一个比较严重的问题,虽然重写后的新版界面虽然美观大方,但配合其他界面显得格格不入,风格上有极大不同,其他地方的界面急需翻新,最终我们将所有界面都重写更换成了统一的风格。

但最后回过头看,其实我们UI界面在编写上是很有问题的:

1、我们把所有的界面都放在了UI类中,使得UI类作为单独一个类而言十分庞大,虽然各个界面基本没有耦合,但代码整体排布确实不是那么清晰。

2、没有将复用的代码用类或者类方法的方式合并。在UI类中,代码重复率高得惊人,但整体复用程度不高,有些惯用面板、属性原本可以直接包装以便复用。最终使得UI代码虽然逻辑很清晰方便修改,但过于冗长,光是一个类就达到了2000+行。而且这最终导致实现UI中的部分刷新十分困难。

 

更多细节

后期又编码加上了更多细节。

例如:鼠标在可用元素上出现的元素变化(提示),鼠标在可用元素上按下的提示,面板大小调整等等。这些细节确实使得整体体验提升了不少。

 

沟通和注释

在结对编程项目中,我意识到沟通对于一个项目顺利高效率实现的重要性,总结了以下经验:

1、一开始就沟通交流明确各个接口的用途、要实现的具体功能及其具体流程

2、一定要编写低耦合高内聚的代码。

3、要给行为较为怪异的代码段编写注释防止误解。


推荐阅读
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 装饰者模式(Decorator):一种灵活的对象结构设计模式
    装饰者模式(Decorator)是一种灵活的对象结构设计模式,旨在为单个对象动态地添加功能,而无需修改原有类的结构。通过封装对象并提供额外的行为,装饰者模式比传统的继承方式更加灵活和可扩展。例如,可以在运行时为特定对象添加边框或滚动条等特性,而不会影响其他对象。这种模式特别适用于需要在不同情况下动态组合功能的场景。 ... [详细]
  • 本文详细解析了Autofac在高级应用场景中的具体实现,特别是如何通过注册泛型接口的类来优化依赖注入。示例代码展示了如何使用 `builder.RegisterAssemblyTypes` 方法,结合 `typeof(IEventHandler).Assembly` 和 `Where` 过滤条件,动态注册所有符合条件的类,从而简化配置并提高代码的可维护性。此外,文章还探讨了这一方法在复杂系统中的实际应用及其优势。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 本指南详细介绍了如何利用华为云对象存储服务构建视频点播(VoD)平台。通过结合开源技术如Ceph、WordPress、PHP和Nginx,用户可以高效地实现数据存储、内容管理和网站搭建。主要内容涵盖华为云对象存储系统的配置步骤、性能优化及安全设置,为开发者提供全面的技术支持。 ... [详细]
  • VS2019 在创建 Windows 恢复点时出现卡顿问题及解决方法
    在使用 Visual Studio 2019 时,有时会在创建 Windows 恢复点时遇到卡顿问题。这可能是由于频繁的自动更新导致的,每次更新文件大小可能达到 1-2GB。尽管现代网络速度较快,但这些更新仍可能对系统性能产生影响。本文将探讨该问题的原因,并提供有效的解决方法,帮助用户提升开发效率。 ... [详细]
  • 为了提升单位内部沟通效率,我们开发了一套飞秋软件与OA系统的消息接口服务系统。该系统能够将OA系统中的审批、通知等信息自动同步至飞秋平台,确保员工在使用飞秋进行日常沟通的同时,也能及时获取OA系统的各类重要信息,从而实现无缝对接,提高工作效率。 ... [详细]
  • 深入解析:Synchronized 关键字在 Java 中对 int 和 Integer 对象的作用与影响
    深入探讨了 `Synchronized` 关键字在 Java 中对 `int` 和 `Integer` 对象的影响。尽管初看此题似乎简单,但其实质在于理解对象的概念。根据《Java编程思想》第二章的观点,一切皆为对象。本文详细分析了 `Synchronized` 关键字在不同数据类型上的作用机制,特别是对基本数据类型 `int` 和包装类 `Integer` 的区别处理,帮助读者深入理解 Java 中的同步机制及其在多线程环境中的应用。 ... [详细]
  • Vim 编辑器功能强大,但其默认的配色方案往往不尽如人意,尤其是注释颜色为蓝色时,对眼睛极为不友好。为了提升编程体验,自定义配色方案显得尤为重要。通过合理调整颜色,不仅可以减轻视觉疲劳,还能显著提高编码效率和兴趣。 ... [详细]
  • 虚函数表指针vptr的功能测试与分析
    类的虚函数调用依赖于虚函数表来实现。虚函数表是由编译器自动生成的一段内存区域,用于存储包含虚函数的类中每个虚函数的入口地址。这些入口地址本质上是指针类型,从而使得动态绑定成为可能。本文对虚函数表指针(vptr)的功能进行了详细的测试与分析,探讨了其在多态性和继承机制中的作用及其性能影响。 ... [详细]
  • 在分析和解决 Keepalived VIP 漂移故障的过程中,我们发现主备节点配置如下:主节点 IP 为 172.16.30.31,备份节点 IP 为 172.16.30.32,虚拟 IP 为 172.16.30.10。故障表现为监控系统显示 Keepalived 主节点状态异常,导致 VIP 漂移到备份节点。通过详细检查配置文件和日志,我们发现主节点上的 Keepalived 进程未能正常运行,最终通过优化配置和重启服务解决了该问题。此外,我们还增加了健康检查机制,以提高系统的稳定性和可靠性。 ... [详细]
  • 本文详细解析了逻辑运算符“与”(&&)和“或”(||)在编程中的应用。通过具体示例,如 `[dehua@teacher~]$[$(id -u) -eq 0] && echo "You are root" || echo "You must be root"`,展示了如何利用这些运算符进行条件判断和命令执行。此外,文章还探讨了这些运算符在不同编程语言中的实现和最佳实践,帮助读者更好地理解和运用逻辑运算符。 ... [详细]
  • 二分查找算法详解与应用分析:本文深入探讨了二分查找算法的实现细节及其在实际问题中的应用。通过定义 `binary_search` 函数,详细介绍了算法的逻辑流程,包括初始化上下界、循环条件以及中间值的计算方法。此外,还讨论了该算法的时间复杂度和空间复杂度,并提供了多个应用场景示例,帮助读者更好地理解和掌握这一高效查找技术。 ... [详细]
  • 在 Android 开发中,`android:exported` 属性用于控制组件(如 Activity、Service、BroadcastReceiver 和 ContentProvider)是否可以被其他应用组件访问或与其交互。若将此属性设为 `true`,则允许外部应用调用或与之交互;反之,若设为 `false`,则仅限于同一应用内的组件进行访问。这一属性对于确保应用的安全性和隐私保护至关重要。 ... [详细]
  • 蚂蚁课堂:性能测试工具深度解析——JMeter应用与实践
    蚂蚁课堂:性能测试工具深度解析——JMeter应用与实践 ... [详细]
author-avatar
飘零-遗忘_106
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有