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…

Android-Note

android:installLocationApp install locationAndroidManifestApp Manifest OverviewMerge multiple manifest filesAndroidManifest详解之Application(有图更好懂)转场动画 android:windowEnterAnimationandroid:windowExitAnimationandroid:activityOpenEnterAnimationandroi…

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

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

设计模式——Decorator 装饰模式

文章目录1.动机2.定义3.代码4.总结1.动机 在某些情况下我们可能会“过度地使用继承来扩展对象的功能”&#xff0c;由于继承为类型引入的静态特质&#xff0c; 使得这种扩展方式缺乏灵活性&#xff1b;并且随着子类的增多&#xff08;扩展功能的增多&#xff09;&#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…

设计模式——Bridge 桥模式

文章目录1.动机2.定义3.代码4.总结1.动机 由于某些类型的固有的实现逻辑&#xff0c;使得它们具有两个变化的维度&#xff0c;乃至多个纬度的变化。 如何应对这种“多维度的变化”&#xff1f; 如何利用面向对象技术来使得类型可以轻松地沿着两个乃至多个方向变化&#xff0c;而…

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

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

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

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

C++学习——引用和指针

文章目录1. 引用和指针的区别&#xff1f;2. C中的指针参数传递和引用参数传递1. 引用和指针的区别&#xff1f; 指针是一个实体&#xff0c;需要分配内存空间。引用只是变量的别名&#xff0c;不需要分配内存空间。 #include<iostream> using namespace std;class sol…

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

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

C++学习——static

文章目录1. static的用法和作用&#xff1f;2.静态变量什么时候初始化1. static的用法和作用&#xff1f; 1.先来介绍它的第一条也是最重要的一条&#xff1a;隐藏。&#xff08;static函数&#xff0c;static变量均可&#xff09; 当同时编译多个文件时&#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

C++学习——const

文章目录1.const的作用2.const成员函数的理解和应用&#xff1f;1.const的作用 1. 阻止一个变量被改变&#xff0c;可以使用const关键字。在定义该const变量时&#xff0c;通常需要对它进行初始化&#xff0c;因为以后就没有机会再去改变它了&#xff1b; #include<iostre…

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

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

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

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