面向对象第四单元总结:uml模型设计

面向对象第四单元总结:uml模型设计

第四单元(完结撒花)三次迭代完成,经过三周时间正向建模开发实现,我对uml编写有了更深的了解,并锻炼了提前搭建架构并逐步完成的编程思维。

本单元作业中具体如下:

目标简介

作业一:完成一个简单的图书管理系统,完成借书、还书、查询、预约和预约取书动作,其中书籍可以处于预约处、书架、还书处,每次开馆闭馆后要进行整理。

作业二:在原有系统上增加期限的约束、续借功能,并且新增图书漂流存储非正式书籍

作业三:增加用户信用分概念,需要及时维护信用分的变动。

正向建模

正向建模要求一开始先画出uml图,之后根据uml相关来实现代码。

经过这个单元的实践,个人认为正向建模实践上主要有以下步骤:

  1. 大致浏览需求,找出有对象含义且易抽象的概念,这次作业中例如“预约处”,“借还处“等包含功能的集合体。列出所需对象以后再进一步进行抽象,找出各类之间的相似之处,可以构成接口或抽象类等,这次作业中可以分为:实现存储图书的容器类,实现操作的方法类(例如查询机器),最后画出大致的类图。
  2. 仔细浏览,找到关键方法画出状态图和顺序图,例如本次作业查询、取书、借书等操作,可以针对每一个操作找出书籍的变化以及类与类之间协作关系,同时可以确定一些必要实现的方法、属性和类之间的关系等。
  3. 根据uml写出代码,同样可根据功能逐步完善代码,因为代码实现过程中可能会增加一些辅助函数或新增的属性,可以在uml中及时更新。

这大部分是第一次作业实现的步骤,而在之后两次作业中基本只需添加方法就可以了。也正因为第一次的合理建模,后面两次的作业才能顺利完成。

架构设计

类图如下:

image-20240611194827565

后面没有怎么排版导致巨乱(

分析来看

  1. 因为查询机器本身要实现的功能并不多,所以直接和借还处合并了,查询的时候在还书的旁边查很合理吧(

  2. 存储图书类来看,bookContainer作为预约处appointPart、漂流角Drift、用户User和借还书MachineAndBoRe的父类,这三者与其有泛化关系具有图书相关增删等功能,此外图书馆的书架直接使用bookContainer类

  3. 方法类来看,Sort类呈现了整理时所用到的方法,Library统筹了所且有需求中对应的操作而与几乎其他所有类相关联,是抽象的图书馆整体。

    private Appoint appointPart;
    private BookContainer shelf;
    private Drift drift;
    private MachineAndBoRe machineAndBoRePart;
    private Sort sort;
    private HashMap<String,User> users;
    

追踪方面,代码与uml整体相同,每一个类在uml中都有一一对应的关系,且每个类中除了一些get、set或构造方法基本都在uml中有所体现。

架构设计思维的演进

  • 第一单元:初步接触了模块化层次化建模的思维,倾向于从一片空白开始逐步开荒,边写边思考整体架构的实现,这一单元的完成使我对面向对象设计有了大致的了解。
  • 第二单元:主要是多线程的编写,个人会在构建好类之后尝试画一些顺序图(虽然完全不正规),以便了解类的同步和互斥关系。这一单元时序方面的强调使顺序图异常的好用,也让我第一次感受到了uml呈现的清晰性。
  • 第三单元:jml的出现让架构设计的必要性大大减弱了,但是如何按照已有的架构进行编程也是一项重要的能力,也锻炼了我规格化编程方面的思维。
  • 第四单元:学习了uml类图、状态图、顺序图,让我认识到一个拓展性好、清晰度高、层次性好的架构对迭代性编程的意义重大,先规划好架构再进行编程的方式看似浪费时间,实则为编写程序时提供了明确的参考,也省去了之后重构的时间。

这四个单元让我领悟到,架构设计永远应该紧贴需求,有时候不妨事先为需求与代码之间搭建好桥梁,提前规划好架构,让编程又紧贴架构,以达到事半功倍的效果。

测试思维的演进

个人认为在刚开始(比如第一个单元)时测试完全是摸不着头脑,大多只拘泥于使用大量与中测类似的简单数据,这样测出来的效果完全是不好的。但是从第二单元多线程开始会尝试不同的测试,着重

  • 测试类型上看会有黑盒白盒测试,但是主要以黑盒测试为主,特别是第三单元的JUnit让我学到了一个完备测试的重要性。
  • 数据类型上看,完备性很重要,可以尝试大量随机数据或人工混合指令类型的情况来测试,另外特别需要考虑边界性数据的情况,体现在时间压力和边缘数据的测试。

这四个单元让我领悟到,测试需要多样性和完备性,并且还是应该紧跟程序的不同功能,让测试尽可能地覆盖全方位的需求。

心得体会

十六周的OO说长不长,说短不短,现在看来竟然以外地比较顺利(虽然WA和TLE了不少)。

应该说这门课是大学以来第一次真正独立地完成较为大型的编程需求,给了原本啥都不懂的我一点小小的面向对象震撼(

相信之后的我在编程时一定能想起层次化模块化建模的思维,这段时光也会成为大学中宝贵的记忆。

的编程需求,给了原本啥都不懂的我一点小小的面向对象震撼(

相信之后的我在编程时一定能想起层次化模块化建模的思维,这段时光也会成为大学中宝贵的记忆。

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值