ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

BUAA_2022面向对象_第四单元总结

2022-06-29 14:31:21  阅读:146  来源: 互联网

标签:对象 BUAA 面向对象 抽象 2022 多线程 实现 单元


BUAA_2022面向对象_第四单元总结与课程总结

第一部分:第四单元总结

O、写在前面

​ 这一单元难度不大,但对细心和理解能力要求不低,在指导书和javadoc的提示下,实现接口方法。尽管不难,但是繁杂的查询关系,会直接导致设计时的不全面。最突出的体现就是,常常实现到一半发现有一个新的查询做不到,然后匆忙添加一个ArrayList或者HashMap来满足暂时的需求。这么做着实让自己难堪,但是,功夫不负有心人,察觉到这一点后,我每一次作业都会进行一次梳理,尤其是对涉及到的UML对象的各项属性,哪些有用哪些没用;各个查询指令对查询路径有什么要求,需要用什么数据结构来支持。可以说,磨刀不误砍柴工,这样的准备工作是十分值得的。

​ 下面是参考的Uml元素关系,可以说帮助很大,理解他们的关系是实现的重中之重:

一、架构设计

1、Manager设计

​ 在参考了往届学长的实现与反思后,我同样采用Manager的形式来抽象管理元素。即因为Uml一共有3中模型图,为了提高抽象层次,我将三种模型分别用三个Manager来管理,implement的方法也通过Manager来与各模型交互,这样一来,可以专注于模型的单一职责方法,中间的转换可以交给Manager来完成了。

2、元素的重实现

​ 除此之外,由于Uml元素具有分散性,这是其引用结构造成的,因此我重写了UmlClass、UmlInterface等元素,来让其具有“存储功能”,不需要在外部建立多个HashMap来让Class找到Attribute、Method等繁琐操作,否则会使实现更为错综复杂。

3、辅助数据结构类

​ 在做好类设计的准备工作后,还需要注重各个方法对查询的需求。利用HashMap来处理对应关系,是可行的,我的实现中也有诸多HashMap的身影,但对于“查询关键状态”等专注于某个对象,与前后多个对象之间的关系,HashMap就显得吃不消了。所以,建立辅助的数据结构很有必要。

​ 基于Graph的数据结构,我建立了两个Graph类,一个用于state关键状态的判断,一个用于check是否存在循环继承、重复继承的异常。而图中的dfs等算法就能派上用场了。

第二部分:架构设计思维及OO方法理解的演进

一、第一单元——迭代、设计的起源

​ 多项式可以说是对我来说最困难的一个单元,我是一个慢热型选手,在明确自己应该怎么做之前,往往是举步维艰的。在这一单元,对java的熟悉程度也不高,因此很多实现方式都有失优雅,总体来说不是非常满意。

​ 在刚开始OO的时候,我并没有意识到设计的重要性,在我心里,着手做往往比空想要来得实在。但是,现实的打击是巨大的。我在实现过程中,往往走着走着发现走不通了,但是时间又来不及,只能缝缝补补,最后也只能勉强过中测。

​ 第二次作业我明显注意了自己架构设计的习惯,现在回过头来看,多项式处理其实并不难,这是因为多项式的单一性,即规则固定,因此实现的方法往往是普适的。我渐渐开始放慢脚步,好好思考每一步的意图和实现方法,最后一次作业,终于能有自己的思想,加上自己对化简的思考。可以说,相较于第一次作业,是一个质的飞跃。

二、第二单元——多线程的主动探索

​ 第二单元是电梯单元,从单个电梯到多台电梯,到多台多功能电梯。这个单元可以说是较为自豪的一个单元了,这是因为全程是我自己从头到尾设计与维护的架构,虽然第一次还是无效作业······

​ 多线程的学习是困难的,但我庆幸自己十分主动。面向对象包含着多线程的思想,毕竟我们现实生活中,每个人都不是一座孤岛。在我心里,面向对象就是一种对现实世界的缩影,模仿人类的眼睛、耳朵和双手,每个对象都有着自己的特性,有着自己的职责、能力。多线程,是对“对象”的进一步抽象性提取:每个人都有自己的节奏。而线程合作,就是对应人与人之间的交流。

​ 在这个单元中,还学习了诸多设计模式,诸如生产者消费者模式、工厂模式、观察者模式等等,这些都是为“设计”提供更多高屋建瓴的启示。除此之外,最重要的还是多线程的实现,synchronized长久陪伴,也与我们产生了奇妙的感情。

三、第三单元——按图索骥的需求

​ 第三单元学习JML语言,是对前两单元形成的发散思维的规范。毕竟,没有规范就难以合作。

​ 经过一个单元的学习,我逐渐理解到,JML或许就是“对象”的语言。每一个对象的方法中,JML会规定:我需要什么,在我完成我的任务前你必须保证什么,你履行了你的承诺之后我能保证完成什么,我完成的成果有哪些,我改变了什么等等。这就如同一群高效率的理性人士的对话,极大提升了“对象”间相互理解的程度,降低了理解的门槛。

四、第四单元——面向对象的抽象面貌

​ 在第一单元,学习了对象是什么,如何构造对象,对象之间的关系可以是什么,并在此基础上实现了多项式的解析;在第二单元,学习了对象之间的交互,明了对象可以看做现实世界的抽象,多线程提高了这种抽象的现实意义,加深了对面向对象的理解;第三单元,我们学习了对象之间的语言JML,能够更好的利用一个普适工具,让人与人、对象与对象之间进行“对话”。第四单元,就是一个更高层次的总结,阐释了面向对象的抽象结构。

​ 我们一直在说抽象抽象,那到底什么是抽象,我想所有人心里都已经有一个答案,但是这个事情必须有一个统一的描述标准,否则它几乎只能成为每个人心中一闪而过的思绪,而难以交流与传播。Uml正是扮演一个这样的角色,用它的三大模型,来用“面向对象”的视角,刻画一个完整的系统。从静态的类图、到动态的顺序图、状态图,都是在极力描述这个系统的结构和发展规律。

​ 不得不说,编程确实是一种艺术,无处不体现着编程者博大的智慧,面向对象与其衍生的诸多知识,正是其淋漓尽致的体现。

第三部分:收获与建议

通过OO课程的学习,除了学会了面向对象思想方法,编程思维和习惯也得到了极大提升。除此之外,还学会了使用辅助工具如git、Idea插件、starUml等等,”欲要善其事,必先利其器“,这些经验在未来发展是极其重要的。

关于建议,我觉得OO课程的设计先进性毋庸置疑,任务量合适能够很好的促进思考与练习,但对有些时间紧迫的同学来说,往往没法全面的测试与设计测试程序,因此希望官方或许可以加强对“测试能力”的锻炼,也是能够提升同学的代码能力和debug能力的。

标签:对象,BUAA,面向对象,抽象,2022,多线程,实现,单元
来源: https://www.cnblogs.com/tsycowboy/p/16423254.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有