湖南大学结对编程个人项目互评

1、简单介绍

在完成个人项目后,我和尚兴帆同学组成了一队,结队编程需要我们互相分析并评价对方的代码质量,并完成总结,在阅读兴帆同学的代码之后,总体来说,格式规范,程序结构清晰,具有很好的可读性,下面进行详细的分析。

2、详细分析

结构分析

src目录下分为了多个文件,每个文件分别有自己的职能,实现了功能的模块化划分

各模块功能分析

User类作为实体类,记录系统老师的各种信息

Teacher类作为主类,是程序执行的主入口,同时包含了程序运行的主框架

Login类用来提供登录信息,以及登陆验证功能

question类作为出题逻辑的实现

CheckDuplicate类则作为查重的实现

3、优缺点分析

优点

优点很多,都值得学习和借鉴,下面简单罗列几点

a、代码书写规范,缩进格式符合要求,变量以及函数的命名都采用的驼峰的方式,数组定义也采用java风格,代码十分整齐,给人赏心悦目的感受

b、题目要求账号的试题存在对应文件夹内,大部分同学都是使用绝对路径,当账号过多时这样操作就会显得复杂,若是改变位置得修改代码,这是非常不好的,而队友采用系统函数获取工程文件的位置,然后再实时创建文件,灵活高效,也增强了源码的适用性。

c、生成题目的时候采用Stringbuilder类,StringBuilder为动态数组可以有效的降低字符串拼接的损耗。

StringBuilder的append操作

StringBuilder A = new StringBuilder();
A.append("123");

对于上面的代码,StringBuilder使用的是底层方法arrayCopy来进行拼接。

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);

对于上面的方法,可以将数组中指定位置的数据拷贝到其他数组的指定位置。

而作为String拼接字符串

String s="";
for(int i=0;i<5;i++){
    s+=i;
}

上面的代码每一次循环都会创建一次String的对象,所以损耗比较大,所以对于stirng的"+="操作只适用于不在循环内的拼接。

队友选择使用StringBuild更加方便也更加灵活

d、项目每个类和方法都有javadoc进行注释,既指明了每个类和方法的作用,也方便阅读和使用,这对于后续生成项目文档也有很大的帮助

e、由于项目各个部分分工明确,模块化的思想的运用,代码也具有良好的扩展性

f、对于查重的实现,选择使用hashcode作为每个题目的唯一标识,方便有效

g、采用静态代码块初始化,可以看出队友具有很好的java基础,代码质量高

缺点

兴帆同学的缺点主要在于不够细致,希望兴帆同学在以后的编程过程中能够细心一点

a、注释部分冗余,有些注释通过你的变量命名便可以知晓它的作用,就没必要逐行解释,这样显得代码有点繁琐,没有很大的必要

b、部分命名不够细致,比如question类的命名没有使用大写开头,还有少量的变量命名也可以适当改进

c、由于这个程序是给老师使用的,所以终端的输出时需要注意的,出现异常时,将异常信息打印给用户看是十分不友好的

d、生成的题目并不是很好处理,特别是高中题目和初中题目,根号和三角函数的运算是一个大问题,题目难以解出答案,这需要改进出题函数的逻辑

e、有些空行是多余的,虽然这些都是小问题,但是仍然需要注意

4、总结

队友的代码虽然有一些小毛病,但是总体来说,代码质量还是很高的,让我也学到了很多,希望可以和队友一起进步,在接下来的结队合作中共同成长,做出自己满意的项目

posted @ 2021-09-27 21:11  INACTIVITY  阅读(112)  评论(0)    收藏  举报