OO第四单元——UML及其解析器——总结 暨 OO课程大总结

第四单元总结

第四单元主要内容是写代码解析UML,因此需要理解UML

UML相关

starUML的储存方式是一个.mdj文件,通过使用文本编辑器观察这个文件,我们可以看出这是一个json格式储存的文件。

通过把.mdj后缀名改为.json,可以更加直观地观察这个文件。

json

架构分析

13次类图

第二次作业类图

以上是我两次作业的类图,我在作业中,给UML中的每一种Element建了一个对应地类。

在建图的时候,我通过各种parent恢复了json文件中的树状结构,便于统计。

关于第二次作业的有效性检查

有效性检查基本上都是图论上的问题。

为了方便/代码复用性/代码美观性,我将图论算法提取出来了。

我新建了一个名为Dfsable的接口。

package graph;import java.util.List;public interface Dfsable<T extends Dfsable<T>> {void addSon(T node);List<T> getSons();
}

以下是图论算法。

package graph;import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;public class GraphAlgorithm {public static class Node implements Dfsable<Node> {private List<Node> sons = new ArrayList<>();@Overridepublic void addSon(Node node) {sons.add(node);}@Overridepublic List<Node> getSons() {return sons;}}/*May not contains itself.*/public static <T extends Dfsable<T>> HashSet<T> getCanArrive(T cur) {HashSet<T> ans = new HashSet<>();dfs1(cur, ans);return ans;}private static <T extends Dfsable<T>> void dfs1(T cur, HashSet<T> ans) {for (T e : cur.getSons()) {if (!ans.contains(e)) {ans.add(e);dfs1(e, ans);}}}public static <T extends Dfsable<T>> boolean isInCircle(T cur) {return dfs2(cur, new HashSet<>(), cur);}private static <T extends Dfsable<T>> boolean dfs2(T cur, HashSet<T> vis,T source) {vis.add(cur);for (T e : cur.getSons()) {if (e.equals(source)) {return true;}if (!vis.contains(e)) {if (dfs2(e, vis, source)) {return true;}}}return false;}public static <T extends Dfsable<T>> boolean haveMorePath(T cur) {return dfs3(cur, new HashSet<>(), cur);}private static <T extends Dfsable<T>> boolean dfs3(T cur, HashSet<T> vis,T source) {vis.add(cur);for (T e : cur.getSons()) {if (vis.contains(e)) {return true;}if (dfs3(e, vis, source)) {return true;}}return false;}
}

通过将所有具有Dfs性质的元素提取出Dfsable接口,我可以只写一次算法,就实现各种搜索。

OO课程总结

OO这门课很快就结束了,在这门课中,我在不断的写代码和学习中理解很多,学会了很多:

架构设计与OO方法

在这一个个单元中,我的架构设计能力和对面向对象的理解有的极大的提高和加深。

第一个单元,我设计的架构一塌糊涂,第二个单元有了起色,第三个单元,我的结构已经基本可以有良好的复用能力的,到了第四个单元,我的架构水平相比第一单元,有了极大的提升。

而对面向对象的理解,我也随着一次次左右有了加深,从一开始只是知道"封装、继承和多态“这些概念,到最后可以熟练甚至下意识地应用这些思想。OO,提高了我的各种能力。

测试理解与实践的演进

在历次作业中,我使用了各种进行脚本测试。

我遇到的主要难点是数据的生成。

其次,另外一个难点是多线程单元的脚本写法。为此,我尝试了解了powershell/linux shell的使用,有了很多的收获。

课程收获

认识的过程,是一个从实践到认识,再从认识到实践的过程。

​ ——马原

OO,一门又爱又”恨“的课。

”恨“当然不是指真的恨,而是说在有时写作业代码感到累的时候,不禁产生的一丝难受。

但是,我也明白,没有难受,就也没有可能有进步和收获。

这也是我爱着OO这门课的原因。

在这门课中,我从一个只写过单文件c语言的工程小白,变成了一个听见了一个宏大任务后不会慌张,可以冷静思考,可以马上开始分析如何”分解这个任务“,”如果是我,我会用什么架构“等人。当然,我肯定与大佬还差的远着呢,或者说,在工程方面依然是一个不折不扣的小白,但是,如果没有OO这门课,我可能至今为止还是写一些简单的“益智”、“好玩”的小程序。

一次又一次的作业、上课、实验和讨论,我逐渐理解、明白了什么是面向对象,为什么要面向对象,如何面向对象......

感谢OO,感谢各位老师、助教和同学。

对OO的小建议

关于课上实验的部分,好多都是上午上完课的内容,下午立刻可能就需要使用,希望下次安排的时候,可以给一些缓冲。

关于第一单元的正则表达式部分,建议可以开始前把正则表达式进行一些训练。

转载于:https://www.cnblogs.com/login256/p/11073475.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/483109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nature重要新发现:将运动小鼠的血液输入久坐小鼠中,可以改善大脑功能!

来源&#xff1a;生物通 斯坦福大学医学院的研究人员已经表明&#xff0c;大量锻炼的成年小鼠的血液对年龄相同、久坐不动的小鼠的大脑有益。运动小鼠血液中的一种蛋白质似乎是主要原因。Tony Wyss-Coray一项新的研究表明&#xff0c;有可能把跑马拉松的小鼠对大脑的好处转移到…

软件构造-犯错的艺术——健壮性与正确性,异常,防御式编程,debugging与test的思考与总结...

健壮性与正确性 健壮性与正确性是不同的——一个倾向于使程序尽可能保持运行&#xff0c;即使遇到错误&#xff0c;一个倾向于使程序尽可能正确&#xff0c;不在意保持运行 异常 异常分为两种——checked exception与unchecked exception 二者的区别在于&#xff1a; checked e…

地球系统科学简史:理解地球复杂性的多学科探索历程

来源&#xff1a;集智俱乐部作者&#xff1a;Will Steffen, Katherine Richardson等人 译者&#xff1a;晏丽 审校&#xff1a;张澳 编辑&#xff1a;邓一雪 导语我们的地球是一个有生命的有机体&#xff0c;不仅有大气、陆地、海洋之间的物理化学过程&#xff0c;生物也会对环…

数值微分

像这样的由全部变量的偏导数汇总而成的向量称为梯度&#xff08;gradient&#xff09;&#xff0c;梯度可以像下面这样来实现,这里使用的是用数值微分求梯度的方法。 def numerical_gradient(f, x):h 1e-4 # 0.0001grad np.zeros_like(x) # 生成和x形状相同的数组for idx in …

数据结构与算法——哈希表与字符串

文章目录1.预备知识1.1 最简单的哈希——统计字符个数1.2 哈希表排序整数1.3 哈希映射的问题2.最长回文串2.1 题目描述2.2 C代码实现3.单词规律3.1 题目描述3.2 算法思路3.3 C代码实现4.字母异位词分组4.1 题目描述4.2 算法思路4.3 C代码实现5.无重复字符的最长子串5.1 题目描述…

Science重磅:DeepMind再获突破,用AI开启理解电子相互作用之路

来源&#xff1a;学术头条作者&#xff1a;青苹果编辑&#xff1a;hs排版&#xff1a;李雪薇当电子问题遇到了神经网络&#xff0c;会碰撞出什么样的火花呢&#xff1f;DeepMind 的最新研究向我们揭晓了答案。刊登在最新一期 Science 论文 Pushing the frontiers of density fu…

腾讯-地图:腾讯位置服务

ylbtech-腾讯-地图&#xff1a;腾讯位置服务1.返回顶部 2.返回顶部3.返回顶部4.返回顶部5.返回顶部 1、https://lbs.qq.com/product/miniapp/customized/2、6.返回顶部作者&#xff1a;ylbtech出处&#xff1a;http://ylbtech.cnblogs.com/本文版权归作者和博客园共有&#xff…

2022年六大值得关注的边缘计算趋势

来源&#xff1a; 边缘计算社区关于边缘计算的许多方面并不新鲜&#xff0c;但它仍在快速发展。例如&#xff0c;“边缘计算”包括已经存在了几十年的分布式零售商店分支系统。这个术语也包含了当地工厂和电信提供商计算系统的各种形式&#xff0c;尽管这是一种比历史规范更紧密…

RateLimiter的 SmoothBursty(非warmup预热)及SmoothWarmingUp(预热,冷启动)

SmoothBursty 主要思想 记录 1秒内的微秒数/permitsPerSencond 时间间隔interval,每一个interval可获得一个令牌 根据允许使用多少秒内的令牌参数&#xff0c;计算出maxPermits setRate时初始化下次interval时间&#xff0c;及storedPermits acquire时&#xff0c;计算当前now…

未来已来:全球XR产业洞察

来源&#xff1a;德勤Deloitte编辑&#xff1a;蒲蒲近日&#xff0c;德勤中国科技、传媒和电信行业推出元宇宙系列报告《元宇宙系列白皮书—未来已来&#xff1a;全球XR产业洞察》&#xff0c;聚焦XR产业发展趋势。报告指出&#xff0c;多元融合是元宇宙的演变趋势。在元宇宙发…

谷歌、哈佛联手绘出「百万分之一」人脑神经3D连接图!天量数据竟可塞满14亿块1T硬盘...

来源&#xff1a;神经科技编辑&#xff1a;Yezi审阅&#xff1a;mingzlee7前不久&#xff0c;谷歌和哈佛大学联手发布人脑神经3D连接图&#xff0c;涵盖人脑一百万分之一的信息&#xff0c;但数据已经塞满了1400块1T硬盘&#xff01;现在&#xff0c;这个研究团队表示&#xff…

python replace()

转载于:https://www.cnblogs.com/JackFang-X/p/11090449.html

解决表单提交的数据丢失问题

解决表单提交的数据丢失问题&#xff1a; 一、问题描述&#xff1a; 当我们在给前台页面设置修改功能的时候&#xff0c;因为有些信息是不允许进行修改的&#xff0c;所以在修改表单中没有相应的修改输入框&#xff0c;但是在修改表单的数据提交的时候&#xff0c;那些不允许修…

科学家即将揭示人类大脑神经网络结构的奥秘

来源&#xff1a;今日头条人类即将迎来了解大脑神经网络结构神秘世界的曙光&#xff01;哈佛大学神经科学家和谷歌工程师&#xff0c;发布了第一张人类大脑部分的神经网络连接图&#xff0c;大约针头大小的人类大脑组织用重金属染色&#xff0c;切成 5,000&#xff0c;并在电子…

温故而知新,6位顶级CV科学家聚首:计算机视觉中的深度学习方法vs传统方法...

来源&#xff1a;AI科技评论作者&#xff1a;Mr Bear编辑&#xff1a;青暮2021 年 10 月 13 日&#xff0c;来自麻省理工学院、加州大学伯克利分校、伊利诺伊大学香槟分校、华盛顿大学、帝国理工学院的六名顶级人工智能科学家、计算机视觉科学家在 ICCV 2021 大会期间进行了题为…

卷积神经网络(CNN)数学原理解析

来源&#xff1a;图灵人工智能作者&#xff1a;Piotr Skalski编辑&#xff1a;python数据科学原标题&#xff1a;Gentle Dive into Math Behind Convolutional Neural Networks翻 译&#xff1a; 通夜&#xff08;中山大学&#xff09;、had_in&#xff08;电子科技大学&#…

大脑研究正在挑战超级计算,“人脑计划”或需提前部署百亿亿级超级计算机...

来源&#xff1a;DeepTech深科技人脑的复杂性正推动着超级计算释放更多的潜力。据了解&#xff0c;人脑包含大约 860 亿个神经元&#xff0c;可形成数万亿个接触点。如果以细胞分辨率对整个大脑进行成像&#xff0c;甚至会产生数 PB 范围内的数据&#xff0c;这样的的计算量令人…

02 算术、字符串与变量(1)

本章内容 1、交互式命令shell 2、整数算术 3、浮点算术 4、其他数学函数 5、字符串 6、字符串拼接 7、获取帮助 8、类型转换 9、变量和值 10、赋值语句 11、变量如何引用值 12、多重赋值 -------------------------------------- 在学习Python前&#xff0c;我们需要了解数据类…

【数据结构基础】-线性表的顺序实现(数组实现)基本操作

2019.10.10 【数据结构-线性表的顺序结构】 基本操作&#xff1a;初始化&#xff0c;判断是否空表&#xff0c;清空表&#xff0c;获取表中的第i个元素&#xff0c;查找元素&#xff0c;插入元素&#xff0c;删除元素&#xff0c;获取表的元素个数。 抽象数据类型&#xff1a…

机器学习驱动技术是生物学进步的下一个突破

来源&#xff1a;ScienceAI作者&#xff1a;Immunai 联合创始人兼 CEO&#xff0c;Luis Voloch编译&#xff1a;绿萝数字生物学与 90 年代的互联网处于同一发展阶段&#xff08;早期、激动人心和变革性&#xff09;。当时&#xff0c;IP 地址的概念还很新&#xff0c;「精通技术…