BUAA_OO第四单元总结

七仔^_^ 学生 2024-06-14 14:19:40

OO第四单元总结

正向建模与开发

本单元的学习重点是对程序架构的设计和抽象能力,以及UML建模能力

助教在本单元的开头就建议我们需要先画好UML图,进行架构设计,然后开始写代码。但是我在实操的时候发现,花很多时间空想代码架构是极费力不讨好的,很多情况考虑不到。于是我采用了先把UML的类图的属性和方法大致绘制出来,理清各个对象之间的关系后开始写代码。这样写代码中遇到问题时还能及时修改调整UML以及代码架构,让写代码的效率更高。

所以,架构设计和代码实现是相辅相成的

架构设计

类图

img

状态图

img

顺序图

img

架构思路

  • Library类类似一个中转站,负责接收用户的各种指令,并利用方法传递书本或指令给Bookshelf、BookCorner等类进行处理
  • Customer类代表用户,用来处理用户的各种请求,并传递申请给Library进行书本的借阅、预约、续借等操作
  • Bookshelf类代表书架,负责从书架上取出,放入书本
  • BookCorner类代表漂流角,负责从漂流角取出,放入书本
  • ReserveTable类代表预约处,负责存储预约书本,并且将逾期未取的书本返还给Library的Bookshelf
  • ReturnTable类代表借还处,负责存储返回书本,并且也负责升级非正式书籍,返还给Library的Bookshelf

代码设计和UML模型设计之间的追踪关系

代码设计其实就是uml模型的实现,uml是代码的抽象层次,代码是uml的实现方法。写代码的时候要严格按照uml图中各个类的属性、方法进行编写,满足二者互相对应的关系。

本学期四单元架构设计思维的演进

Unit1

本单元的代码内容是表达式化简,设计目的是体会层次化设计思想的应用和工程实现,单元重点是递归下降。由于我在第一次作业对递归下降的理解不够深入,同时用了正则表达式(处理连续的加减号和拆括号)和递归下降,造成代码逻辑混乱,导致第二次作业提高要求后(允许数据出现多层括号)需要进行重构,然后我就不堪重负失败了。这也让我不再盲目上手写代码,而是先画出各个类之间的关系,想清楚基本逻辑再动手。

Unit2

本单元的代码内容是实现电梯调度系统,设计目的是体会多线程的设计模式和细节,单元重点是同步互斥。多线程难度较大,需要考虑清楚对共享对象的加锁设置,最好不要设置双层锁,很容易发生难以排查的死锁问题。

Unit3

本单元的代码内容是实现一个社交网络的构建,设计目的是学习jml语法,能够自己编写jml规格,根据jml规格写代码,单元重点就是jml语法。这一单元较为轻松,只需要耐心读jml就行。

本单元增加了自己写JUnit test的要求

Unit4

本单元的代码内容是实现一个初级图书馆系统,设计目的是体会正向建模开发,单元重点是uml图的绘制,需要熟悉三种基本uml图的绘制方法和思路。

测试思维的演进

Unit1

本单元主要是需要自己构造一些极端数据,比如前导0、连续加减号、多层括号、exp嵌套等等,我一方面自己构造数据,一方面采用了同学的开源评测机。

Unit2

本单元我也使用的开源评测机,评测机性能较好,可以覆盖到许多极端情况

Unit3

本单元新增了JUnit测试,根据实验课的代码,我通过模仿而学会了如何进行参数化测试,通过自行设置参数进行参数化测试构造大量测试数据,可以满足测试需求。

Unit4

本单元主要是交互式测试,对比uml图和java代码。要求umljava属性和方法精确对应。

课程收获

  • 理解了面向对象与面向过程编程之间的差异
  • 学会了正向建模过程,降低了重构代码的概率
  • 学会了编写测试数据,包括自行构建极端数据和参数化测试构造大量数据
  • 大大提高了抗压能力,特别是前两个单元难度较大,开学后事务繁多,锻炼了我的抗压能力

特别感谢细心准备课程教程的助教和老师们!

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

301

社区成员

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

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