软件构造想法

目录

关于Eclipse Committers

关于ADT

关于文件读写和正则表达式

关于GUI

关于代码的优化

关于多线程

关于软件构造

结束语


关于Eclipse Committers

这是个很好用的软件,感谢老师推荐了这个软件。它可以用一些自带的插件,比如Junit或者Window Editor。可惜的是我一直也没能解决自动补全的这个功能,老师给了修改方法,在首选项里面

很奇怪我也都改了,可是他就是不愿意帮我补全。不补就不补吧,其实也不太影响速度,因为大部分时间都是在思考,半天写不明白一个函数。不过有时候写长的变量名的时候,就会莫名的闹挺,就当锻炼英语了。

这个软件速度方面好像还可以(然后刚才就花了将近1分钟才打开),不过在低电量模式下,这个优化肯定是没有做好,虽然说确实是一个虚拟机,低电量不好带的动,但是开了半天没反应,甚至最后打不开还是很闹挺的,因为学习的时候不方便一直连着电(我其实没有打不开的经历,我描述别人的故事)。不过这里面的检测插件很奇怪,比如spotbug这个插件和checkstyle,他们都无法做到实时检测,就比如我写一行之后就检测出来有没有问题,而不是等我保存了之后再重新运行才能检测。其实这个方面倒还好,因为一般是全篇写完之后才会检测。问题就是我都改完了,为什么不能实时改一下警告呢,还要再点一遍才行,好累挺。(我看别人的都挺好,就我这个不好使,那我不好使就是软件不好,肯定不是我的问题)

关于软件崩溃,其实也没有发生在我的身上,不过我们寝室确实有个人崩溃了,还有一个认识的朋友崩溃了两次。至于为啥这个东西崩溃能直接把代码变没,这中间的操作过程就不能深究了,但是确实很危险,这连保存过的代码都能变没...过分

 

关于ADT

  • 抽象数据类型(Abstract Data Type,ADT)是是指一个数学模型以及定义在该模型上的一组操作;即包括数据数据元素,数据关系以及相关的操作。
  • ADT具有以下几个能表达抽象思想的词:
    • 抽象化:用更简单、更高级的思想省略或隐藏低级细节。
    • 模块化: 将系统划分为组件或模块,每个组件可以设计,实施,测试,推理和重用,与系统其余部分分开使用。
    • 封装:围绕模块构建墙,以便模块负责自身的内部行为,并且系统其他部分的错误不会损坏其完整性。
    • 信息隐藏: 从系统其余部分隐藏模块实现的细节,以便稍后可以更改这些细节,而无需更改系统的其他部分。
    • 关注点分离: 一个功能只是单个模块的责任,而不跨越多个模块。
  • 与传统类型定义的差别:
    • 传统的类型定义:关注数据的具体表示。
    • 抽象类型:强调“作用于数据上的操作”,程序员和client无需关心数据如何具体存储的,只需设计/使用操作即可。
  • ADT是由操作定义的,与其内部如何实现无关!

其实以前不太会用java编程,当然现在也不太会。刚接触的时候感觉没有C++好用,因为C++用了一年多了而且比较熟悉。后来感觉java确实是比较适合进行程序化的编程。就比如这个ADT,刚开始用的方面比较少,感觉这个东西就像是单独把结构体写出去而已,甚至懒得写出去。后来发现这个东西独立性比较好,用起来感觉精简,清晰,现在一般都是用ADT设计物体对象,这个物体有自己的属性,然后有一些对属性修改和输出的函数。这个用ADT写就很清楚,写的时候把旁边那个表拉下来,就能看出来这个物体到底有什么属性,我还需要加点什么功能,或者他能提供什么功能。而且ADT一般修改的时候不怕影响到别的文件,比如我外面还有个用来运行的函数啊,就不用担心改坏哪里。

而且用了ADT之后更有这个软件构造的感觉,更有步骤感,先设计物体,看看物体应该放点啥进去,实现一些很简单的函数,然后写好放在那,虽然可能很简单,但是用起来很安心,感觉已经把头开好了,以后写起来障碍就会少不少。

关于文件读写和正则表达式

比较喜欢用InputStream/OutputStream这种文件流的形式进行读取,感觉这种方法比较有流畅感,而且更容易接正则表达式。具体的代码就不写了,反正也是从网上找的,复制粘贴之后发现这是真的好用,网上的人才是真的多。写的时候发现这个IO需要进行异常处理,就是用try catch包起来,每次就自动生成一下,生成之后特别难看...还影响我看代码的流畅性,不过写代码确实要负责任,这异常就自动生成也没进行处理...反正又没人用我这个作业卖钱,无所谓的。

正则表达式是一些神奇的式子,它可以通过格式反推出来一个通用式子,然后能比较出来符不符合,反之具体怎么用的(什么Match啥的)也是复制粘贴的,不过正则表达式在网上有一个很好的测试网站在线正则表达式测试,帮了很大的忙,也帮助理解正则表达式的各种问题,感觉这个理解起来就很方便,比概念一行一行的就好很多。

关于GUI

GUI一开始老师推荐了一些插件,但是我并没有用上(这个东西白嫖还是爽)。不过后来感觉这个东西还是要认真学一下的,因为之前小学期有java课,也是在GUI的时候做不明白放弃了,所以尝试的学了一下,就用到了之前的那个Window Editor,这个可以可视化的对GUI进行编程,大小位置啥的都可以直接拖拽,而且自动生成函数,只要把关键的一些东西自己写进去就好了,虽然还没有拿程序实践过,不过通过它自动生成的代码,我明白了一些GUI的基本语法和编写的过程。

在lab6里面涉及到了GUI的刷新,而且是配合线程进行刷新,一开始想把GUI也变成一个线程这样大家就一起快乐的死锁呗,不过这么一整,GUI就很容易突然白屏,然后一闪一闪的,不是很好看。所以后来用timer来刷新,虽然有时候也会卡一卡,不过那肯定是我电脑的问题。还有关于刷新,网上普遍都说就repaint就好了啊,弄了半天我也没明白这repaint到底咋刷新,反正他也不理我,也不重新获取数据啥的,然后想了个好办法,重写repaint,假装我用了,实际上我就是把GUI重新生成了一遍,真实。

还有GUI的一些按钮设计,哇这bug是真的多,我是不想再写按钮了,我宁可重新创造个窗口,然后把老的删了也不用按钮了,然后以后肯定被迫还要用,悲哀。

关于代码的优化

就是针对lab5的那些检查,优化,那么多方法...不会,不太懂,反正就是个截图,感觉我以后不适合做优化的这个工作,也是因为我现在还没复习完...可能复习完就能理解一点了。

关于多线程

线程是个好东西啊,这个卡呦...头一次写程序,跑的时候能把电脑卡的啥都干不了。感觉有了多线程以后,可以实现好多以前实现不了的操作了,就比如大一时候我们想做一个赛车游戏,本来想加个ai陪着玩家一起跑,弄了半天没想到怎么让俩赛车一起跑。有了多线程就好办了,就同时启动两个线程呗,同时启动网上也有很多教程,比较常用的是countdown相关的算法。在lab6中本来也想试一试,结果失败了,好像是哪里理解错了。

感觉多线程颠覆了我以前的观念,一起一直觉得代码是从上而下依次进行的,多线程就是多路并行了。不过猴子过桥这个问题中涉及到的线程死锁,还是有点复杂的。两个线程总是会出现他在这边检测,结果那边就刷新了的情况。利用锁,确实解决了一部分问题,但是少用public static全局变量才是好办法,不应该用这么不线程安全的东西来写多线程的。

关于软件构造

虽然这课挺难的,但是我感觉特别有用,对比隔壁离散数学,我还没有体会到实质性的作用(玩扫雷的时候作用挺大)。听说软件构造才在计算机系开设第二年,希望以后能完善实验吧,感觉实验一说出来,是在MIT啥地方找的,就很没有面子。难道我们还设计不出来好的实验吗,实验才是学习的动力嘛...没有这个实验凭啥哪会看软件构造到底讲了啥。而且实验做完会给人满足感,虽然转瞬即逝。

ppt是英文感觉是不是因为才开设的课程,课本内容啥的中文都比较少,也可以理解吧,学起来比较费劲,讲起来也感觉就是差点什么意思。当然我要是没挂科我就重新写一下这段话,挂科了我就再喷几句。就是希望能降低复习难度,这复习...脑袋都疼。我觉得平时出点作业题都可以减轻复习难度。

 

结束语

啊...学习是没有止境的(不是指我要挂科导致补考),选择了计算机就要好好把计算机学明白,振兴祖国计算机事业,实现伟大的计算机理想和抱负。刚考完马原。希望以后还有机会接着学习用java编程,感觉自己的主动性还是太差了,但是一学起来总能感觉到乐趣。希望自己能不挂科从某工业大学毕业吧,考个研究生就更好了,能有个好工作就太好了。希望以后工作就是,就慢慢写代码,也没人催,不会啥就去百度里面学,也没有考试,乐意学什么就学什么,学到新的东西就加到代码里,多开心啊。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值