第四单元博客:Our Story Ends

周子皓-22371187 学生 2024-06-12 15:54:27

Part1. 总结本单元所实践的正向建模与开发

第四单元相较于前三个单元轻松了很多,主要是锻炼我们的正向建模能力。在前三个单元中,我们都是直接对题目进行编码,然后再根据已有的代码画UML类图,这样的话类图就只能起到一个示意的作用了。而在本单元中,课程组要求我们像实际开发的时候那样,先做好规划再行动。
虽然很难像课程组推荐的那样,在一开始就着手画UML图,但是在开始做之前,先对整体的架构进行分析,整理出几个类,并在纸上梳理他们之间的关系,思考如何使数据在一个个对象中流动并处理来实现题目的功能,这些都是很有意义的前置准备。在胸有成竹之后,写起代码来也会顺畅很多,也更容易从全局来规划。不像之前的单元中,因为没做好规划,我有时候写着写着就像迷了路似的不知道该干啥了。
当然,一开始的想法和最后的实际开发很可能会有一定的出入。就像我一开始将book归为一个类,后续在开发中发现似乎不需要这个类,于是果断丢弃。一开始想象的具象的书籍对象的传播在最后的实现里变成了抽象的数字的传递,也一定程度上简化了我的架构。

Part2. 总结本单元架构设计

本单元最终架构类图如下

img


整体而言,我新建了一个Library类,来统筹处理所有请求。BrOfficeBookShelf等类均使用单例模式,将唯一的实例存放在Library中。User类则是以HashMap的形式存放在Library。对于Book,我并没有单独建类,因为事实上大多数时候书的传递不需要同步太多信息。我建立了多个HashMap<LibraryBookId, Integer>,存放书号和数量的对应,这样普通的借还等情况仅仅需要数量加减即可完成。
当然,有时候书籍是需要存储信息的,例如借还的时间,捐献人,借书人等等。但是由于不同功能需要的信息内容大不一样,多少也不尽相同,所以我选择针对不同的请求建立不同的信息存储方式对应:Pair, Pair1(我承认这个名字起的很草率哈哈哈哈), DriftBook就分别对应了不同的情况。这样的处理方式对我而言会显得清晰一些,如果把所有的信息都放到一个单独的Book类中,我会觉得有些混乱。当然,其实更好地办法是建立一个'Book'类,然后将存储不同信息的书对应建立它的子类,这样显然更清晰。(偷懒了)

Part3. 架构设计思维的演进

  • 在第一单元中,我学到了层次化设计的思想。学会了对一个复杂的式子进行递归拆解,惊喜于一个复杂的嵌套表达式被自己写的程序层层拆分化简。U1带给我的不仅仅是递归下降算法,更教会了我用层次化的方式来看待、拆解问题。
  • 在第二单元中,我学习了多线程开发的相关内容。这是最难的一个单元,但也是我最喜欢的一个单元。尽管日日夜夜都为了难以捉摸的bug苦恼,但是电梯这一单元带给我最为深刻的“面向对象”体验。看着一行行的输出,就好像真的有一个电梯在飞速运转,那种成就感简直无可比拟。我在多线程开发中学会了很多,尤其是锻炼了思维的严谨性。在多线程的世界里,稍不留神就很可能出现各种异常,且bug千奇百怪,变幻莫测甚至无法复现。但是多线程的魅力就在于这种复杂性和复杂性带来的速度。比较可惜的是,多线程的最后一个单元要准备蓝桥杯,所以没能延续第二次作业使用影子电梯,只是随机分配就草草收场了。
  • 在第三单元中,我学习了图论的算法规格化设计。尽管我直到最后也没能彻底领略规格的魅力,还因为算法用的不好挂了一些点。但我还是认为这是设计的非常不错的一个单元,弥补了OO课程在算法学习上的不足。
  • 在第四单元中,我学习了正向建模。这是最自由的一个单元,课程组仅仅提出要求让我们去实现,通过UML建模的形式,很大程度上模拟了部分以后工作的情境。

    Part4. 测试思维的演进

    在整个OO课程,尤其是第三单元中,我的测试思维从一开始的无脑用大量数据点检验的随机测试,变得更倾向于精确打击的构造的测试。尤其再结合第四单元用例概念。每个功能都是一个用例,我们编写的测试数据就需要对每一个用例的每一种情况做出检验。课程组给出的数据就是这样子美妙的数据。课程组就像是一个足够了解人体构造的大夫,能够精准地用手术刀插入同学们的心脏除了对用例进行测验,还可以猜测实现可能出现什么样的错误,并对此进行检验,这就是更高的高度了。

    Part5. 课程收获

    上面啰嗦了很多,似乎都把这部分的知识部分写完了。我想继续谈谈除了知识之外的收获。说实话,我的OO并不是学的非常优秀,因为本人比较粗心,思维不够严谨,老是会犯这样那样的错误而挂掉强测,因此常常扼腕长叹,悲从中来。还记得最差的那次进了B房,强测挂了6个点,仅仅是因为有几个类似方法的其中一个忘记修改了,那次真的五雷轰顶,感觉天都要塌了。我想,OO给我带来的,除了丰富的知识,拓展的经验,还有抗压的能力和面对失败的勇气。仔细想想,这可能不仅是OO的特色,更是计院所有专业课的特色。
    在这里还想感谢一下OO课程组的所有老师和助教学长学姐,OO课程组是一个优秀的,有温度的课程组,像慈母严父集于一体,带给我们成长。
    就要说再见了,OO。我们的故事结束了,另外的故事即将开始。
...全文
84 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文以DVWA漏洞靶场中的命令注入漏洞为切入点,结合通信行业5G网管系统的实际应用场景,深入剖析了命令注入的攻击原理与防御机制。通过对比低级别(Low)存在漏洞的代码与高级别(Impossible)安全加固后的代码,详细展示了攻击者如何利用未过滤的用户输入执行恶意系统命令,并进一步提出白名单验证、输入拆分重组、输出编码等关键技术手段实现有效防护。文章强调在通信行业高度依赖自动化运维的背景下,此类漏洞可能导致核心网元被渗透、配置被篡改,因此必须采取代码层与系统层相结合的纵深防御策略。此外,文中还展望了未来在5G MEC、SDN等新技术环境下,零信任架构与AI驱动的安全审计将成为重要发展方向。; 适合人群:具备一定网络安全基础知识,从事通信行业网络运维、安全开发或系统架构工作的技术人员,以及关注Web安全与工业级代码防护的研发人员。; 使用场景及目标:①理解命令注入漏洞在通信网管系统中的真实危害与攻击路径;②掌握工业级安全编码实践,提升对输入验证、输出编码、权限控制等核心安全机制的应用能力;③为5G网络管理系统安全加固提供可落地的技术参考; 阅读建议:学习时应结合DVWA靶场动手复现文中案例,重点分析漏洞形成条件与防御代码的设计逻辑,并延伸思考如何将“最小权限原则”和“参数化执行”应用于自身业务系统中,强化安全开发意识。

301

社区成员

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

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