关键词:
面向对象设计与构造课程总结作业
四个单元中的架构设计
四个单元中对架构设计及面向对象方法理解的演进
-
在面向对象课之前
- 上学期写某物实验的数据处理程序和某组实验的数据生成程序的时候,比较频繁的使用结构体套函数进行封装
- 架构设计及面向对象思想的萌芽应该开始于那个时候,不过由于需求比较简单,始终没有更进一步的接触继承和多态
-
架构设计及面向对象方法理解的演进
- 这大概是一个张无忌在阿大面前练太极剑的过程
-
第一单元
- 现在看来架构设计其实非常直白,就是照搬形式化定义
- 当时比较嫩,脑子里想纸上画了半天之后才写,写出来快乐AK没有重构
-
第二单元
- 现在看来架构设计其实非常直白,就是照搬生产消费者模型
- 不过初识并发,读取是否阻塞,程序结束条件等还要斟酌一下
- 脑子里想了想直接写,写出来快乐AK没有重构
-
第三单元
- 可以理解为规模比较大的代码填空,这还设计啥架构
- 不想直接写,一边写一边想,写出来快乐AK没有重构
-
第四单元
- 架构设计非常直白,按照常识组织架构,发现UMLxxx不够用就加层壳改成Myxxx即可
- 不想直接写,一边写一边想,写出来快乐AK没有重构
-
关于四个单元作业的题目顺序
-
开始单元
- 这单元的主要目的是引导同学面向对象
- 如果把电梯放这一单元,单线程还没整明白就上并发,似乎不太行
- 如果把UML放到这一单元,多半会被很多人面向过程切完,训练效果达不到
- 如果把JML放到这一单元,倒也没啥问题,不过基本不涉及多态和继承还是水了点
- 这么看还是求导比较合适
-
结束单元
- 这单元是面向对象课程的收尾
- 如果把电梯放这一单元,倒也没啥问题,不过烤漆卷电梯性能也够刺激
- 把JML放到这一单元,倒也没啥问题,不过个人认为放UML的意义更大一些
- 把UML放到这一单元的妙处在于,这一单元可以扁平化设计,表达面向对象但不仅仅面向对象,个人认为这样的收尾是比较精彩的
-
中间单元
- 个人认为电梯和JML的顺序不是很有所谓
- 考虑到第三单元的时候OS进入高潮,OO划一划水比较友好
- 于是电梯安排到第二单元,JML安排到第三单元
- 综上所述,不考虑换题的话,当前这个顺序还是比较合理,比较有助于架构设计及面向对象方法理解演进的
-
四个单元中对测试理解与实践的演进
-
本地测试简要总结
- 全程批量测试机黑箱测试
- 数据包括大量随机数据,用于测试功能
- 数据包括一定量手造数据,用于测试性能
- 测试的有效性还是不错的,成功金刚狼
- 更具体的测试思路见各单元博客,在此不再赘述
-
本地测试的演进
- 个人认为有且仅有一点,对测试数据的覆盖程度验证
- 在第三单元接触了Junit,虽然感觉这东西用起来不是很爽但它的代码覆盖分析确实值得借鉴
- 笔者希望找到一种可以在黑箱测试过程中统计代码覆盖频率的手段,不过似乎没找到,只好自己动手丰衣足食
- 在后两单元笔者实现了DataCheck,其关注代码中预先设置好的一些关键位置,被执行时进行计数,结束后输出次数
- 后两单元中,笔者用这种方式发现了测试数据的一些未覆盖情况并进行了加强
-
对测试的一些思考
- 在测试的过程中免不了和他人对拍,也越来越发现一个问题,即笔者的数据测自己有余测他人不足,总存在一些有诡异Bug的代码可以通过笔者的数据
- 现在反思,主要原因在于DataGenerate,DataCheck由笔者一人开发,在开发过程中无可避免的会发现自己考虑不周的地方,如在思考某种数据能不能出的时候,就自然的会思考自己的程序遇到这样的数据会发生什么
- 也就是说对笔者自己而言,在测试在开始跑点前就开始了,其形式为作业代码,DataGenerate和DataCheck的自洽,而他人的代码可能没有经历这个过程,就比较有可能遇到笔者的数据测不出来的诡异Bug,往往出现在笔者本人实现下不可能出错的地方
- 此外对于笔者自己的实现,笔者比较清楚哪里可能存在问题,测试时也会对这些方面着重测试,尤其是第一单元的化简部分,笔者构造了相当多的数据测试自己三角化简和拆括号的功能与性能,这些数据对没有进行类似优化的代码往往没有效果,而在第二单元,笔者的调度算法中存在随机元素,在解决被毒瘤数据卡的同时也带来了一份数据测多少遍都不一样的效果,变相增加了测试强度
- 这样来看,虽然数据基于大量随机生成,但也不完全是无的放矢,可能这种结合才是数据强度的保障
三个对课程的具体改进建议
- 想了一会儿写了十个,如果介意溢出的话,只关注高优先级的三个即可
-
[高优先级]完善研讨课评价机制
- 建议全班对每个研讨课分享的同学打分,内容包括但不限于工作量,展示效果和收获等
- 对每个研讨课分享的同学,得分高的多加分,得分中等的有加分,得分不高的要倒扣分
- 恕我直言,有些分享纯粹是为了分享而分享,为了加分而分享,听起来味同嚼蜡基本等于没分享
- 上述全部内容针对(似乎有点普遍的)现象,不针对具体的人,切勿对号入座
-
[高优先级]增加实验课反馈机制
- 这个问题去年学长学姐博客就在说了,课程组还是没啥回应
- 建议以某种形式给出反馈或部分反馈,如果明确不给反馈建议说明原因
- 一声不吭当谜语人搞得大家都很不爽,不针对具体的人,切勿对号入座
-
[高优先级]给出官方代码或优秀代码
- 据了解往届是有这个环节的,这一届也说过要给,结果都结课了还是没看到
- 后两单元倒是无所谓,前两单元个人认为看官方代码或优秀代码还是比较有助于开拓思路的
- 即使无法开源给出,也可以考虑混淆后给出,供大家学习其性能优化
- 相信同学们会很乐意找官方代码或优秀代码中的问题的
-
[中优先级]调整第一单元第一次作业性能评定
- 第一单元第一次作业如果想追求性能满分,势必要做同类项合并
- 而基于形式化定义组织的层次化架构想要支持这一点的成本是比较高的,放在第一单元第一次作业难度不小
- 至少笔者在第一次作业中为了让基于形式化定义组织的层次化架构支持合并任意同类项下了不小的功夫
- 这将导致就算想到了基于形式化定义组织的层次化架构也有心无力,被迫采用过程式处理,后面必然重构
- 个人认为这样或存在一定的误导,建议调整第一次作业的性能评定或干脆改为Pre
-
[中优先级]增加互测部分的信息呈现
- 建议互测时给出个人全部的刀人记录,包括提交的数据,和测试的结果
- 有一种尴尬叫做交上去五刀时间到了一刷新发现中了三刀但不知道是哪三刀
-
[中优先级]修改互测代码的文件名
- 互测屋的代码下载下来应该是字符串的哈希值,感觉有点奇怪
- 建议直接改成代码在互测屋中匿名的名称或者至少包含代码在互测屋中匿名的名称
-
[中优先级]提供用于互测的DataCheck
- 建议给出用于检查测试数据合法性的程序(无需开源),这一点主要体现在第二单元和第四单元
- 第二单元包括能不能不给请求,电梯编号能不能是零的问题指导书没说,互测的时候诡异非法有点搞心态
- 第四单元没互测的可能原因之一是不好DataCheck,如果迭代几届搞出一个DataCheck,也许就可以互测了
-
[低优先级]增加对本地测试的引导
- 这一点主要体现在第二单元和第四单元,前者造评测机写Spj难度比较大,后者造测试数据难度比较大
- 建议课程组搬运一些帖子或写一些引导构造测试的帖子置顶到讨论区,让更多的人进行本地测试
-
[低优先级]四个单元博客中的一些问题
-
[低优先级]课程平台的一个Bug
- 关注一些帖子,这些帖子了出现超过五条回复
- 在通知中心中,这些回复会被显示,因为不止五条回复会触发分页显示
- 切换到最后一页,逐个将最后一页的回复标记已读
- 最后一页回复全部消失,回复下方的翻页也随之消失
- 无法回到其它页,需要刷新才能解决
个人课程收获
-
Cpp/Java/Python基本功
- 课程中作业全程使用Java,但本地测试工具链采用了Cpp/Java/Python混写
- 课程前只掌握了Cpp/Java/Python的基本使用,经过本学期的训练掌握了Cpp/Java/Python的面向对象尤其多态与继承
- 课程前只熟悉Cpp的调用系统Cmd和进行文件操作等功能,经过本学期的训练也掌握了Java/Python调用系统Cmd和进行文件操作等功能
-
更进一步的面向对象思想
- 课程前只熟悉封装,简单尝试过继承,没接触过多态
- 课程中尤其是第一单元大规模的使用了继承和多态,面向对象思想有比较大的提高
- 当然这部分的收获只有一半来自面向对象课程,另一半来自Cpp与C#程序设计课程
-
面向对象与并发的学习范式
- 个人认为课程的前两个单元是一个很好的学习范式
- 学习一个新的语言时,为快速上手其面向对象,可以实现一个求导(当然无所谓化简)作为练习
- 学习一个新的语言时,为快速上手其并发,可以实现一个单电梯调度(当然无所谓性能)作为练习
- 个人认为在今后的学习与工作中这或许可以发挥作用
-
应对较大项目的经验和能力
- 课程前写过最多2000行的Cpp,写了三四天,调了小两周
- 在面向对象课程中,基本练就了1000多行的Cpp/Java半天写完并调好
- 经过面向对象课程的训练,第四单元开发和调试约3400行的数据生成器也从容了不少
-
Git入门与从会用到爱用
- 课程前没啥版本维护意识,使用Git主要是为了用Pages服务
- 课程中强制使用Git,逐渐熟悉了Git更多的功能,到课程后期开始喜欢使用Git,对非课程内容也使用Git管理
- 当然这部分的收获只有一半来自面向对象课程,另一半来自操作系统课程
-
跨平台开发能力
- 本学期开发的全部本地测试工具链均支持Windows和Linux
- 在Cpp中,通过
#ifdef _WIN64
实现多平台支持 - 在Python中,通过
platform.system()
实现多平台支持
-
若干或许会有用的奇淫巧技之第一部分
- 这些收获来自面向对象课程
- 使用cyaron造数据阴人
- 使用Jar字节码混淆工具加密
- 本地使用reflect干官方接口
- 在图片里面藏可运行的Jar玩
-
若干或许会有用的奇淫巧技之第二部分
- 这些收获不来自面向对象课程,但来自面向对象课程组,
感觉还是这部分收获比较大 - Network基本知识,抓包与拦截
- Sql注入攻击,Xss注入攻击
- 安全方面的基本知识,软件开发的一些要点
- 这些收获不来自面向对象课程,但来自面向对象课程组,
-
无进步不暖心大满贯
-
金刚狼
- 全部强测和互测中没有被发现Bug且发现他人Bug得分Top10
-
强测总分Top10
- 12次强测总分1195.0053,平均分99.5838
-
性能总分Top10
- 前6次强测总分595.0053,平均分99.1676
- 和进步相关的嘛,没办法全程强测没下过98确实没啥大的进步(逃)
- 和暖心相关的嘛,感觉自己还挺暖心的,体贴的帮好多通过强测的同学发现了Bug呢(逃)
-
最后的最后
-
是结束,也是新的开始,共勉
当蜘蛛网无情地查封了我的炉台, 当灰烬的余烟叹息着贫困的悲哀, 我依然固执地铺平失望的灰烬, 用美丽的雪花写下:相信未来。 当我的紫葡萄化为深秋的露水, 当我的鲜花依偎在别人的情怀, 我依然固执地用凝霜的枯藤, 在凄凉的大地上写下:相信未来。 我要用手指那涌向天边的排浪, 我要用手掌那托起太阳的大海, 摇曳着曙光那支温暖漂亮的笔杆, 用孩子的笔体写下:相信未来。 我之所以坚定地相信未来, 是我相信未来人们的眼睛—— 她有拨开历史风尘的睫毛, 她有看透岁月篇章的瞳孔。 不管人们对于我们腐烂的皮肉, 那些迷途的惆怅,失败的苦痛, 是寄予感动的热泪,深切的同情, 还是给以轻蔑的微笑,辛辣的嘲讽。 我坚信人们对于我们的脊骨, 那无数次地探索、迷途、失败和成功, 一定会给予热情、客观、公正的评定, 是的,我焦急地等待着他们的评定。 朋友,坚定地相信未来吧, 相信不屈不挠的努力, 相信战胜死亡的年轻, 相信未来,热爱生命。
面向对象第四单元总结(代码片段)
本文为面向对象课程第三单元“UML”作业以及整个课程的总结。架构设计本单元作业的架构设计主要分为两部分:将输入的UML模型数据用Java类和对象组织起来便于查询,以及设计实现查询接口的类。UML模型UML模型的组织在三次... 查看详情
2019秋季java课程总结(代码片段)
本学期面向对象与Java程序设计课程已经全部结束了,但Java程序设计的学习还远未到终点,大家就本学期的课程作一个全面的总结吧。在此感谢各位助教的全力配合和辛勤劳动,辛苦了!一、Java面向对象程序:面向对象编程(基... 查看详情
面向对象课程第二单元总结(代码片段)
本单元的整体多线程冒险体验对于我来说是要比第一单元好的……原因无他,我第一单元栽倒在输入处理和正则上的比例有点高,感觉除了设计上的丑陋之处,其他的全是输入处理上的问题==…… 当然这... 查看详情
冯志霞201771010107《面向对象程序设计(java)》第四周学习总结(代码片段)
实验四类与对象的定义及使用实验时间2018-9-20 1、实验目的与要求(1)理解用户自定义类的定义;(2)掌握对象的声明;(3)学会使用构造函数初始化对象;(4)使用类属性与方法的使用掌握使用;(5)掌握package和import语句的用途... 查看详情
2020面向对象设计与构造第三单元博客总结(代码片段)
面向对象设计与构造第三单元总结一、JML规格化设计JML,全称TheJavaModelingLanguage,是用于对Java程序进行规格化描述的注释性质语言。笔者在本文总结了常见的JML语法描述。1.注释结构在注释行或注释块中,以@开头的行被认作JML注... 查看详情
201771010113李婷华《面向对象程序设计(java)》第六周总结(代码片段)
一.理论知识部分第四章 类与对象1.方法的定义:方法声明和方法体。2.重载:一个类中可以有多个方法具有相同的名字,不同的类型,不同的参数。3.构造器:也叫构造方法,是类中的一种特殊的方法,其作用是用来构造并... 查看详情
2017级面向对象程序设计——作业二(代码片段)
Deadline:2018-05-0622:00pm一、MOOC在线课程学习课程地址:http://www.icourse163.org/course/PKU-1002029030学习第三周的课程内容,并完成相应的第三周作业的测验,然后将课程进度截图上传到蓝墨云班课。二、以下作业,完成一篇博客提交1)... 查看详情
前端javascript设计模式前奏--面向对象jq实例与总结(代码片段)
1.面向对象–JS的应用举例/***1.我们可以认为JQuery就是一个类*1.JQ的打包源码中是一个函数,这个函数就是一个构造函数,其实就是一个class。*2.$('p')其实就是JQ的一个实例。**2.实现原理(实际上使用的ES5的构造函数):*/classjQueryco... 查看详情
oop第三次总结(代码片段)
OO作业第7-9次总结一、前言 第三次作业总结,面向对象编程也接近了尾声,通过一个学期的不断学习,逐渐从只会语法到现在熟练运用设计模式、类图等,面向对象部分学到了很多,也体会到了“万事万物皆对象”的特点。7-... 查看详情
201771010118《面向对象程序设计(java)》第四周学习总结(代码片段)
1、实验目的与要求(1)理解用户自定义类的定义;(2)掌握对象的声明;(3)学会使用构造函数初始化对象;(4)使用类属性与方法的使用掌握使用;(5)掌握package和import语句的用途。2.理论知识总结a.类 类是构造对象的模板或蓝图;... 查看详情
狄慧201771010104《面向对象程序设计(java)》第四周学习总结(代码片段)
一、知识点总结:1.类与对象概念 (1)类是构造对象的模板或蓝图,由类构造对象的过程称为创建类的实例。 (2)对象:即数据,对象有三个特性,行为、状态、标识。2.类与对象的关系 (1)类是对象,事物的描述和抽象,... 查看详情
201871010134-周英杰《面向对象程序设计(java)》第七周学习总结(代码片段)
201871010134-周英杰《面向对象程序设计(java)》第七周学习总结项目内容这个作业属于哪个课程https://www.cnblogs.com/nwnu-daizh/这个作业的要求在哪里https://www.cnblogs.com/nwnu-daizh/p/11654436.html作业学习目标掌握四种访问权限修饰符的使用... 查看详情
201771010135杨蓉庆《面向对象程序设计(java)》第四周学习总结(代码片段)
学习目标1、掌握类与对象的基础概念,理解类与对象的关系;2、掌握对象与对象变量的关系;3、掌握预定义类的基本使用方法,熟悉Math类、String类、math类、Scanner类、LocalDate类的常用API;4、掌握用户自定义类的语法规则,包... 查看详情
王艳201771010127《面向对象程序设计(java)》第四周学习总结(代码片段)
第一部分:理论知识。第四章:对象与类4.1:类与对象的概念。类:是构造对象的模板或蓝图。由类构造对象的过程称为创建类的实例。对象:想要使用oop,一定要清楚对象的三个特性:1)对象的行为:对象的行为使用可调用... 查看详情
徐思201771010132《面向对象程序设计(java)》课程学习总结(代码片段)
...目的与要求(1)综合掌握java基本程序结构;(2)综合掌握java面向对象程序设计特点;(3)综合掌握javaGUI程序设计结构;(4)综合掌握java多线程编程模型;(5)综合编程练习。2、实验内容和步骤任务1:填写课程课后调查问卷,网址:https:... 查看详情
《面向对象程序设计(java)》第七周学习总结(代码片段)
...使用方法;(5)结合本章知识,理解继承与多态性两个面向对象程序设计特征,并体会其优点;(6)熟练掌握Java语言中基于类、继承技术构造程序的语法知识(ch1-ch5);(7)利用已掌握Java语言程序设计知识,学习设计 查看详情
王之泰《面向对象程序设计(java)》课程学习总结(代码片段)
...境配置(第1章、第2章)2.Java基本程序结构(第3章)3.Java面向对象程序结构(第4章、第5章、第6章)4.类、类间关系、类图5.JavaJDK预定义类/接口及其API(String-第3章、Arrays-第3章、Files-第3章62页、LocalDate-第4章、Object-第5章、对象... 查看详情
李晓菁201771010114《面向对象程序设计(java)》课程学习总结(代码片段)
...与要求(1)综合掌握java基本程序结构;(2) 综合掌握java面向对象程序设计特点;(3)综合掌握javaGUI 程序设计结构;(4)综合掌握java多线程编程模型;(5)综合编程练习。2、实验内容和步骤任务1:填写课程课后调查问卷,网址:... 查看详情