OO_BLOG_UNIT4
OO_U4_Blog
19373295 高欢
一、总结本单元作业的架构设计
HW13
- 架构设计:本次只需要实现对于类图的解析,因此将模型划分为三个层次,首先是
Main
类以及需要进行元素预处理及方法实现求解的UmlInteraction
类,其次是Interface
接口类和Class
类,底层为提升效率添加的Operation
类。
![pic1](https://img2020.cnblogs.com/blog/2197936/202106/2197936-20210626152519840-2050945033.png)
HW14
- 架构设计:本次作业在类图解析的基础上,增加了解析状态图及时序图的要求。架构方面大致划分为三层,首先是
Main
类和将各类图中对应的element
进行分类的General
类,其次是分别实现类图、时序图、状态图元素解析以及方法求解的ClassModel
,Collaboration
,StateChart
三类,其下是具体的实现数据存储方法实现的各个类。
![pic1](https://img2020.cnblogs.com/blog/2197936/202106/2197936-20210626152537023-1925536143.png)
HW15
- 架构设计:整体上与前一次作业没有本质性改动。主要添加了几个
Check
类来解决代码长度超长的问题,通过在需要检查对应属性的类内部添加方法实现对于有效性的检查。
![pic1](https://img2020.cnblogs.com/blog/2197936/202106/2197936-20210626152551908-342178137.png)
二、在四个单元中的架构设计及OO方法理解的演进
Unit1
-
任务:完成简单多项式导函数的求解
-
架构设计:在只需考虑幂指数因子求导时采用简单的多项式类、项类存储并计算;到包含幂指数、正余弦函数时分层为数据存储类、求导类、数据读入及表达式构建类的进一步面向对象的拆分;再到第三次加上嵌套组合函数导函数,将架构清晰化为字符串预处理、求导、输出三个层次,并在相应的层次中针对不同的因子、项进行相应的处理。
-
理解:整体来看,三次作业随着对于面向对象概念的逐步理解,以及对于
java
语言的熟悉,在架构设计层面对于面向思想的掌握可见有明显的长进。
Unit2
-
任务:模拟多线程电梯的运行
-
架构设计:整体上该单元的实现模仿借鉴了实验课上所提供的代码架构,核心为请求线程、调度线程、电梯线程三个线程。在第一次作业中是粗劣的学习及模仿了实验课代码架构,但由于对于同步块设计的混乱,在第二次作业中借鉴了研讨课同学的分享,对调度线程及电梯线程进行了较大的改动,具体为将电梯模式
pattern
从调度线程剥离及电梯线程采用状态机处理请求;第三次作业主要修改了调度线程乘客分配,主要的架构并无更改。 -
理解:本单元学习的核心主要在于同步块的理解与处理,而这依赖于自己架构清晰的设计。因此在测试及实现中逐步通过修改架构,使各个线程、类责任明确,降低耦合度,从而最终实现同步块的正确处理。
Unit3
-
任务:实现一个社交关系模拟系统
-
架构设计:本单元需求主要是根据规格进行架构的完善与设计。整体上按照先完善异常类实现,再根据需求完善核心属性类,如
Person
,Network
,Message
类,最终实现需要结合规格设计并修改原有类的较为复杂的类。 -
理解:本单元主要根据JML规格实现,根据效率需求进一步优化具体的方法。面向对象的思想在分层实现异常类、属性类以及具体的图模型维护类等中可见到具体体现。
Unit4
-
任务:实现一个UML类图解析器及有效性检查
-
架构设计:如前述
-
理解:相对于前几次作业而言,本单元作业的实现相对轻松,在三次作业逐渐增加的时序图分析、状态图分析以及有效性分析中,只需要通过增加相应的类来实现所需查询功能即可,不需要对于之前已经实现的代码部分进行改正。因此整体上来看,本单元是在面向对象课程学习最后一阶段对面向对象思想掌握的较为完善的体现。
三、在四个单元中测试理解和实践的演进
-
在Unit1多项式求导的任务实现中,试图通过
python
实现数据生成及对拍检查,但是由于自己完成作业之后时间所剩无几,因此评测的强度并不高。在Unit2-4时主要针对于自己代码逻辑、实现细节方面进行检查,没有进行针对性的评测机编写。测试数据方面通过修改已有样例数据进行简单测试,对于如第四单元的情况自行考虑易出错的情况修改样例数据进行评测。在出现自己难以定位bug
的情况的时候,采用对拍或者蹲同学的评测机跑数据来debug
。 -
整体上,我在测试部分并没有花费较多的时间,因此在单元测试方面并没有较多的收获与实践。
四、课程收获
-
通过理论课初步了解认识了面向对象思想的概念,进一步通过循序渐进的实验课程加强“实践“的能力。面向对象的思想与以往学习的面向过程有诸多不同,具体化为代码、实现逻辑的实验课及作业与理论课的知识相互补充,帮助我在学习阶段逐步掌握这一思想。正所谓,纸上得来终觉浅,绝知此事要躬行。
-
充分认识到重构、
debug
自带的磨炼意志、锻炼耐心的属性。与以往C语言学习中debug
不同的是,这门课程的代码量迅速上升,导致难以定位bug
的现象时有发生。这也就使得我在不断地重构过程中,逐步培养自己的耐心(苦涩微笑.jpg)。 -
熟练掌握熬夜技能。无论是因为难以理解谜语人指导书,还是因为自己亲手写的
bug
难以定位,本学期OO
陪我度过了许多个漫漫长夜。熬夜写作业以确保不会无效作业,完成之后再顽强debug
,OO
的超高"性价比",谁会不心动呢?(尽管再熬一熬心就动不了了)
五、 三个具体的改进建议
-
测试后提供每一次测试对应的答案,便于同学们自我纠正在实验中暴露出的错误的理解。
-
适当根据同学们的反馈修改作业指导说明,便于之后的同学顺利清晰的理解指导书。
-
适当延长平台关站时间,或者在关站之后仍旧开放查看数据点的功能等。