OO第四单元总结博客

单江涵-21375052 学生 2024-06-16 00:36:40

正向建模与开发

首先需要明确,什么是正向建模与开发?正向建模与开发是一种在编写代码之前进行设计的方法。它通过使用UML建模语言来明确整体架构、类之间的关系以及业务处理流程,从而帮助我们对工程整体有一个宏观的把握。

在正向建模中,UML类图用于表达类的特征和类之间的关系,使我们能够更好地设计类的职责,实现高内聚和低耦合的设计原则。UML状态图用于表达对象或系统状态的转移路径和条件,帮助我们明确业务处理流程。UML顺序图用于表达类之间的交互协作,使我们的业务思维更加清晰,流程更加明确。

正向建模软件开发的流程通常包括需求分析与理解、模型设计与建立、代码编写与实现以及代码验证与测试。在本次图书馆作业的实践中,首先进行UML的建模设计再进行代码编程就是正向建模开发,虽然刚开始实践起来会有些困难,但是对迭代和bug修复都是有足够的好处和增益的。

第四单元架构设计

本单元最终的UML类图如下:

基本对象有图书Books与学生Student,几乎所有的操作都是围绕这两个基本单位展开;基本职能由BrTable借还处,ReservationTable预约处,SelfSearchTable查询处,以及BookShelf四个单例模式类来完成,其中由于ReservationTable处理的预约请求的特殊性,为其专门配备了能够记录预约日期等数据的ReserveBook类,顶层则是由Mainclass作为输入处理类处理输入请求的解析,根据请求类型的不同调用顶层管理类Library类中的各种方法,方法再根据需求继续往下调用各类中的对应方法接口,实现本次作业的各种基本功能。

 

四个单元中架构设计

第一单元

第一单元最大的收获就是层次化设计的具体应用,语法解析的递归下降法在实际应用后体会比想象中还要深,在表达式化简的主题下,从项—因子—表达式,单项式—多项式的层次化结构设计结合递归调用能够处理各种复杂的表达式。这种思想对同类型的编译前端语法解析以及其他问题的处理都有启发作用,确实是收益匪浅。

测试的话就是用同学写的测评机随机生成数据进行黑箱测试。

第二单元

第二单元是多线程单元,也是四个单元中我认为最难的一个单元,本单元最大的难点就是要深入理解多线程的内核,在保证线程安全的前提下尽量提高多线程并发的效率。本单元作业采用生产者消费者模型,以请求池为托盘,输入解析为生产者,电梯为消费者设计一对多的生产者消费者模式,对多线程的部分没有很多问题,但是由于设计的时候不同类间的耦合度太高,与高内聚低耦合的设计原则背道而驰导致后续迭代与debug极其困难。也是这单元学到最深刻的教训。

测试的话就是用同学写的测评机随机生成数据进行黑箱测试。

第三单元

第三单元主要是对学习JML的阅读和理解,个人感觉是没什么思维上面的难度的,对着JML的架构直接填空一样写就行。主要难点就是部分方法测试对时间复杂度的要求较高,所以其实难点都在算法上(算法单元名副其实),主要就是并查集算法路径压缩与按秩合并的实现。

测试的话依旧是用同学写的测评机随机生成数据进行黑箱测试。

第四单元

经历第二个单元的惨败,在本单元里着重按照正向建模的思想设计了架构并依据架构进行代码编程,秉持高内聚低耦合的原则进行设计,加上本身测试较为简单,所以基本没有遇到什么困难。

测试方面,基本是一遍过,就测试了一下样例和错误点。

课程收获

经历了一年,从面向对象先导到这个学期的OO正课,OO算是进入6系以来陪伴我时间最长的一门课了。这一年下来的收获也不是只言片语能够概括的,从一个对java一窍不通的小白到现在能够实现上千行代码的简单小项目,这样的进步对自己来说确实是很有成就感的。虽然在过程中也有过因为繁重的任务和bug艰苦熬夜压线,不过在坚持下来之后,还是感觉一切都是值得的。

虽然收获很多,但是最后的测试依旧让我感觉自己对面向对象的理解还远远不够,很多老师所说的重要的原则和思想都只是耳边飘过并没有落实到行动上。这部分希望能在之后的学习与生活中逐渐补上,课程虽然结束,但是在面向对象的道路上依旧要继续精进。

...全文
79 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

301

社区成员

发帖
与我相关
我的任务
社区描述
2023年北航面向对象设计与构造
学习 高校
社区管理员
  • YannaZhang
  • CajZella
  • C_ecelia
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧