个人项目互评代码分析

发布时间 2023-09-19 22:30:17作者: 软件2105-刘一凡

个人项目互评代码分析

软件2105-刘一凡

在看完金颖希同学的代码后,我有了一些看法与建议,在这篇博客中将对她的代码进行分析,并提出一些建议性的优化方案。个人拙见,希望能为项目的进一步改进提供一些思路。

整体结构:

代码结构相对清晰,分为数学题生成器和用户两部分,其中每个数学题生成器类负责不同难度级别的题目生成。最后在Main类中实现了控制台交互部分。

功能完成情况:

首先运行Main.java

fig:

在这里可以看到终端的文字提示引导功能足够完好,输入正确答案之后能获得用户的账号信息并且有多个可选操作。

fig:

如果输入错误(账号密码错误或格式错误),也有对应提示。

fig:

选择生成题目时,如果输入其他的符号或数量不符合要求,也会做检测。

fig:

输入合适的数字后,生成的题目也符合规范

fig:

切换难度格式错误时,会给出合适的反馈。

fig:

之后进行多个切换操作并生成相应数量的题目,最后退出,整个过程下来提示没有出现问题。

fig:fig:

生成的初高中题也合理,满足要求。

至此测试完毕

代码分析:

优点:

1.结构清晰: 代码按照功能模块进行了划分,有三个问题生成器和一个用户类,每个类负责一个具体的功能,每一个类下也分为几个方法来处理不同的功能,易于理解和维护。

  • fig:
  • 上图为三个生成器和他们的接口QuestionMaker,类的划分与使用合理。

2.JavaDoc和命名: 代码中,每一个类和方法都配置了对应的Javadoc,增强了可读性,使人一目了然。变量和方法的命名也符合Google的Java编码规范,易于理解。

  • fig:
  • 其中一个Javadoc例子,格式符合规范。

3.异常处理: 在文件读写和输入验证等地方,遇到异常时会catch并做出相应的处理,增强了代码的健壮性。

  • if (trueInput == 0) {
    num = Integer.*parseInt*(tempNum);
    break; // 输入合法,跳出循环
    } else {
    System.*out*.println("请输入10-30范围内的整数!");
    System.*out*.println("准备生成" + user.getType() + "数学题目,请输入生成题目数量(10-30)");
    }
    } catch (NumberFormatException e) {
    System.*out*.println("请输入10-30范围内的整数!");
    System.*out*.println("准备生成" + user.getType() + "数学题目,请输入生成题目数量(10-30)");
    }
    }

     

  • 以上为金同学在getValidInput获得合法题目数量函数中,进行的异常处理。

4.封装性良好: 类中的属性和方法进行了良好的封装(User类),User类属性均为private,有安全性提高了代码的易维护性和可读性。

  • public class User {
    
    private String name;
    private String password;
    private String type;
    
    */**
    \* *** *创建一个用户对象。
    \* **
    \* *** **@param** *name* *用户名
    \* *** **@param** *password* *用户密码
    \* *** **@param** *type* *用户类型
    \* **/
    \* public User(String name, String password, String type) {
    this.name = name;
    this.password = password;
    this.type = type;
    }
    
    public String getName() {
    return name;
    }
    
    public void setName(String name) {
    this.name = name;
    }
    
    public String getPassword() {
    return password;
    }
    
    public void setPassword(String password) {
    this.password = password;
    }
    
    public String getType() {
    return type;
    }
    
    public void setType(String type) {
    this.type = type;
    }
    }

     

5.用户交互友好: 通过控制台与用户进行交互,给予了用户清晰的操作指引,提升了用户体验。在前面的测试中可以明显感受到,引导性强,并且对于不合法的输入也进行了相应的处理。

缺点:

1.缺少必要的注释,硬编码多:在金同学的代码中,方法内部鲜有注释,对于方法实现的流程理解会有所不便,尤其是一些硬编码区域,例如生成操作数函数填入的参数为一个5,如果在这里不加数字,有时候会不理解填入参数的意义。应该使用常量或者注释来解释其含义,希望可以增加必要的注释或减少使用硬编码。

2.软件包分配不合理:该项目所有的类都集中在一个软件包中,会导致包内文件过多,降低了代码的可读性和维护性。一个包中包含了所有的功能模块,这违反了单一职责原则,使得代码可能会难以理解和管理。同时也不利于模块化的设计,代码灵活性受到限制,如果可以的话,尽量给每一个类分配至对应软件包,如util包,Control包等等。