论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
企业信息化/数字化
›
MES
›
北航面向对象2022第四单元暨OO课程总结
北航面向对象2022第四单元暨OO课程总结
王國慶
论坛元老
|
2022-8-9 14:40:30
|
显示全部楼层
|
阅读模式
楼主
主题
1059
|
帖子
1059
|
积分
3181
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
北航面向对象2022第四单元暨OO课程总结
第四单元主要是通过让同学们实现一个MyImplementation方法来完成UML解析器的功能。目的是让大家理解UML类图、顺序图、状态图的结构和其中逻辑组织的内涵。其中第一次作业完成类图的部分功能解析,第二次作业新增顺序图和状态图的解析,第三次作业解决前两次遗留的UML分析异常状况。
学会封装——组织自己的逻辑架构(第四次作业)
可能是到了第四单元,自己的oo作业快接近尾声了吧,再加上做hw13时,自己正处在返乡的隔离酒店,我整个人的心态很糟糕,只想着怎么快点处理掉这次的任务。于是我做了件很忌讳的事情——直接上手对给出的element[]做解析,没有任何结构上的处理。其结果也很自然,我在巨大的信息量处理上抓耳挠腮、无所适从。最后,我盯着逻辑复杂又没有章法的代码陷入了沉思。
那天晚上我想着这次oo的作业问题,心想反正状况如此,还不如冷静下来分析下到底哪里出了问题,妥善解决,这样还更节约时间。于是,考虑着各种各样的问题,我好好睡上了一觉。第二天清早未醒之时,我的梦里出现了第三单元设计时发生的种种问题;醒来之后,茅塞顿开。既然给我的数据表现不如我所料,那我就自己整理出适合自己处理的类型来。说干就干,我直接把将要做完的代码推翻重构,整理起逻辑和思路,先解析数据,再解析结构,很快就结合对题意的理解,完成了整个设计。
回想那折磨的一天,我觉得真的是领悟了oo想传达给我们的内容。以前学长在博客里写到的,自己通过一学期的oo课程,能更好地进行架构设计,也能理清楚各个类之间的关系,从功能角度进行符合自己想法的设计,而不是从结果上回答问题。
因此接下来第二、三次作业也变得十分轻松了。第二次作业我可以把已经实现的类图模块单独丢出来,再用同样的逻辑实现状态图模块和顺序图模块,这样,MyImplementation类就仅仅作为使用各个解析方法的入口,而看不到任何的细节,很好地符合了面向对象高度封装的特点,并且也解决了代码风格问题。第三次作业,也只需要处理新类型的数据,再构建三个新的方法check类,就可以达到目的。
设计思维演进
第一单元——探进oo的门路
第一单元上手可以说是我整个oo课程的信心来源,那个阶段下完成一个功能如此细化,细节层出不穷的表达式处理模块,真的让我付出了很大的努力。在暑假预习的阶段,我也只是弄清楚java程序的编写,初步理解了类和接口。但第一次作业就直接从架构设计上提了很高的要求,让我有点措手不及。最终我也是勉强实现了有关内容,但基本概括下来,每个类就是一个方法的继承而已,没有任何设计可言。
从第二次作业开始,由于新增的功能仅仅只是分析的形式不一样,并不会让我有太多困惑的地方。于是,我大胆地进行了一部分结构的重构,想办法更能体现出每个类对应属性和功能的特点。很自然地,我设计起新的功能时,因为自己在结构上处理的更好了,因此轻松了许多。第三次作业由于只有多重括号的新增功能,因此也很容易就完成了。
第二单元——探索多线程的设计
第二单元从各个角度来说都是oo课程的核心,一方面要像第一单元一样进行各个类的整合和设计,一方面还有兼顾新上线的线程处理——同步和互斥操作。不仅要考虑表面上的各个类之间存在的问题,还得考虑隐藏的线程之间的可能隐患。电梯我相对好地采用了功能相关的设计,也更好地处理了方法上的集成。新增横向电梯时,由于各自的特性,我没有设置总体的电梯类,直接分别进行设计,显得比较清晰。这样,在第三次作业的换乘中,也显得很自然。
第三单元——探寻JML的规则
第三单元的JML看似是直接给出了各个待做的内容,让我们对应着实现,实则不然。经过O(n^2)的洗礼还有图的有关内容处理,让我再一次深刻意识到了架构的重要性。如果对自己的类整体不理解,实现起来知其然不知其所以然,就很难进行一些结构上的组织。无论是采用并查集处理节点,还是查询最小生成树和最短路径算法,都需要对应的架构加以支撑。
第四单元——探知UML封装的道路
正如我一开始所谈到的,经过了四个单元的洗礼,让我很感动的是,我没有参考到群友和课程组的意见,自发的就设计出一个让我感到很满意的解析系统。我尝试着自己设计parser解析各个数据,封装起我需要的各个关键信息,组织好各个UMLElemnt的关系。在这个基础之上,很多的解析和查询,变得更加轻松,只需要简单的dfs或者是bfs就可以得到准确结果。
测试理解与实践演进
测试很重要啊,真的很重要。在第二单元第三次作业我光速寄掉,因为单元测试没有做足,原地裂开。第三单元三次作业都是在很细节的地方没有做好处理而后悔莫及。我没办法回头再去处理更改已经过去的历史,只能说在悔恨中要保持积极思考的心。测试怎么做,怎么把自己的代码从漏洞百出到滴水不漏,这里面有太多学问。
最开始我的测试做法,就只有愚笨的枚举情形,步步试错,感觉没问题,实则乱套。
第二单元由于数据设置比较简单,我尝试着自己生成随机的数据去测试,在前两次作业中效果很不错,因为反复的压力测试给很多特殊的错误情形都纠正了过来。但是,第三次作业我还是仅采用这种方式,结果单元测试没有处理好,导致自己的随机数据出了漏洞,出现了巨大失误。(这就是所说的覆盖的重要性了,怎么覆盖,怎么判断覆盖全)
第三单元失意,我深刻知道自己的测试方法很没有章法,却又一时半会找不到合理的解决办法,从各个方法本身出发去设计一系列数据做测试,却忽视了JML本身的高度严谨性。结果,所谓的“做足了测试”,不过只是我自己考虑的角度“做足了”。对于JML的各种情形,出乎我考虑之外的情形便直接把我干碎。
最容易马失前蹄的第三单元我直接落马了,一度我在犹犹豫豫之中忽略了许多oo课学到的思维和想法。最后在疫情紧张的形势下返乡,我才在各种各样的情绪下、一梦之中恍然大悟了。从设计要求的角度出发,从设计没有明确说明的角度着手,从一个个细节结合代码排查,从时序逻辑上寻找蛛丝马迹,第四单元我想尽办法,想让自己能稍微微笑着说,我真是被oo折磨透了!
课程收获
oo课收获了什么?
我很感谢zcx助教,在还没有开学,做寒假oo预习时,我遇到了一个git上的常见问题,却囿于环境和基础的限制,一时解决不来。那天我抱着试一试(战战兢兢)的心态去问了问我们的跟班助教,结果对方很热情的回答了问题,还就着各种git上对使用逻辑、开发模式的问题教了我很多,一直到很晚。我抱着很感激的心情,去好好了解了一下git,也认识了项目开发时的git使用准则。事实上,这在os实验课的git使用上给了我很大的帮助。
我很感谢我的oo课老师,说实话,oo课程的理论比起实验,给人的冲击感差了很多。但是老师还是通过各种的实际设计例子,代码编写方式,逻辑组织形式,让我认识到了类原来要这么设计、多线程的问题常出在这里、JML要这么理解、UML的结构来源于此,服务于斯。
我很感谢oo课一起奋斗的同学们,虽然完成作业,我基本都是独来独往,咬牙坚持,不惧他人脸色。但是在讨论区和课程群里,对私下里熟识的同学,我也会帮助和被帮助,相互探索指导书中难以理解的问题。他们给了我帮助,我也很乐意帮助其他的同学。
最后,我很感谢自己。
谢谢你面对(当初看来)上手那么艰难的oo课没有放弃,而是钻到类的设计层面找到解决办法。
谢谢你虽然被电梯的设计吓到,但还是在夜里坐在教室里默默回想老师上课讲的设计逻辑组织临界块和线程设计。
谢谢你即使被hack的满身疮痍还是不忘笑出来告诉自己,这也是一种磨练,未来要好好注意。(然后深刻反思自己的测试效果和测试设计)
谢谢你到了最后能反省过来,这才是oo课想告诉你的东西,咬着牙告诉自己,UML的结构要这样看,要这样组织数据,要这样一步步接近终点。
oo课收获了什么?大概还有很多吧,不只是知识上的,还有心理也是。
一些关于课程的建议
1、关于训练,尤其是第四单元,可以增设一些小任务辅助理解官方包的各个功能,(第四单元)并且理解UML的各个结构。
2、关于讨论区,可以考虑把讨论贴分成两个部分,类似某一次作业的做法,一部分作为大家公共讨论助教答疑,一部分作为比较普遍的、重要的问题公示。
3、关于第三单元JML,可以把比较重要的图论要点在指导书里面给出,帮助大家复习以下数据结构。(当然也不是直接)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
王國慶
论坛元老
这个人很懒什么都没写!
楼主热帖
webman
不想打开 IDE 的摆烂一天
Jupyter Notebook,太强大了
React技巧之发出http请求
【网络】https单向认证和双向认证 ...
【Shashlik.EventBus】.NET 事件总线, ...
APP内存管理
Bluecmsv1.6-代码审计
java如何显示"html转义字符"对应的原始 ...
Apache DolphinScheduler 3.0.0 正式版 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
Java
物联网
云原生
Oracle
Mysql
DevOps与敏捷开发
SQL-Server
快速回复
返回顶部
返回列表