OOP四到六次作业总结
一.前言:
第七八次为家庭电路分析程序。
在第七次作业中,家庭电路系统,匹配类设计不当
在第八次作业中,我修改了输出类,并优化类的设计
二,设计与分析:
1.家居强电电路模拟程序-3(第七次作业)
在本次作业中,我对类的设计较为直白,输出类也没有进行优化,在数据计算为完毕后进行输出,然而这可能导致排序出现错误。
此外,由于匹配原则的修改,对于匹配类的设计出现失误,使用非必要的循环嵌套导致出现错误,我对匹配函数进行修改,区别于前两次作业,匹配的结构更加清晰。
同时,计算方法较为复杂,if条件判断使用过多,导致部分特殊结构分析出错。
在后续作业中,我对父类设计与计算方法设计进行优化。
此次作业我对类间关系设计进行了优化,例如,首先提取数据时分别将其存入Arraylist内,然后在试卷类中使用Arraylist存放电器类,使得对分数进行计算时对T与M类的匹配更加清晰方便。
此次作业的思考让我对类的设计与类间关系有了更加清晰的认识,进行大型程序的设计时,优先考虑类的关系,这样思路就比较清晰,然后进行类的设计,然后进行数据读取的设计。过去思路较为凌乱,总是先考虑类的设计而忽略了类关系的设计,导致手忙脚乱,不停的修改类的设计。
复杂类图如下:
可见对于匹配的设计过于繁杂,后续进行优化
UML图如下:
对于总线类设计也应继承于Appliance父类,便于遍历
2.家居强电电路模拟程序-4(第八次作业)
在本次作业中我对输出类进行优化
增设sort方法,便于进行统一排序,优化输出结构。
增设二极管类。
同时我将总线类设计为Appliance的子类,增设并联电路。便于对总线进行遍历。
在遍历时加入对短路的判断,在进行电阻计算,断路判断后,进行分压计算式加入对电流判断,过大短路。
同时对计算方法进行改进,减少if条件判断的使用。优化电压的计算,优化了遍历结构,便于进行计算。
同时对排序后的输出进行修改。
但是对于子类的设计仍略显繁杂,计算方法仍有改进空间。
复杂度:
可见总计算方法较复杂
UML图如下
三,采坑心得
- if结构使用过多,导致许多特殊情况测试失败,且导致程序难以修改,导致可拓展性大大降低。在进行程序初步设计时,应对特殊情况进行考虑,思考普遍性方法,减少if结构使用,以提高程序可拓展性
- 对于数据的读入,应综合使用split方法,charAt方法与正则表达式,正则表达式匹配精确且分组方便,便于后续对数据进行处理,但使用步骤较为繁杂,且数据结构发生变化时,需不断进行修改。Split方法用于对字符产基于某字符的分组,使用很方便,但分组结构会产生错误,甚至需要多次使用达到精确分组效果。charAt方法用于对字符某字符进行提取,图区极为精确,但提取字符较少,使用情况较少。
- 对于输出,在数据计算后进行输出显然不够严谨,可能导致排序错误,计算混乱等,可以增设输出类或使对应类实现comparable接口,便于排序,输出。
此外,诸如,基础数据变量初始化时需赋值,类变量的引用,public,private等变量修饰符的使用,这样的细节问题需注意。 - 对于正则表达式的使用,如果在Java字符串中编写正则表达式时,你需要考虑双重转义。例如,要匹配一个字面点号(.),你需要在Java字符串中写\.此外,不要在循环中重复编译相同的正则表达式,因为这会降低性能,可能导致循环无法结束。默认情况下,正则表达式会尝试匹配输入字符串的任何部分。如果你想确保整个字符串都匹配正则表达式,你应该使用^和$来分别匹配字符串的开始和结束。
- 对于循环嵌套,嵌套的循环可能会使代码难以阅读和维护。尝试简化逻辑,减少嵌套层数,如果必须使用嵌套循环,确保每一层循环的目的都很清晰,并且逻辑上能够很好地组织在一起。
四,改进建议
- 提高程序可读性,例如
将长方法拆分成多个短方法,每个方法执行一个特定的任务,使用有意义的名称,使代码更易于阅读和理解。删除重复的代码块,并使用方法、类或库来重用代码。为代码添加适当的注释,解释代码的目的、行为以及任何重要的假设。
例如各个类的设计,名称,方法设计进行优化,有利于后续对于程序的修改,以及电压计算方法的简化。 - 对于集合的使用,善于利用各种集合会使程序大大简化。Arraylist类似于数组,方便遍历修改增加等操作,hashmap中键值对的使用使用数据的对应使用更加方便,但同时也由于只能存键值对导致遍历相对繁琐。set类似于数学中集合,其中元素不重复,不同于前两个,元素按照大小进行排列。每种数据存储结构均有其优缺点,明细这一点对程序进行改善。据需求选择合适的数据结构。例如,如果需要频繁地插入和删除元素,LinkedList可能更适合;如果需要快速查找元素,HashMap或HashSet可能更合适。
在本次作业中,将各个小电器使用HashMap存储,会使对总线遍历更加方便简洁。 - 对于程序可拓展性,善于使用接口,抽象类会事半功倍
接口和抽象类可以定义一组规范,由不同的类来实现这些规范。实现解耦,通过将实现与接口分离,可以提高代码的灵活性和可扩展性。
使用模块化设计,使应用程序的组成部分更加清晰,有助于应用程序的扩展。每个模块都可以独立开发、测试和维护。
例如对于计算方法的设计,进行模块化设计,可大大减少其复杂度。 - 学习使用便捷的开发工具,例如idea,可利用其广泛的插件市场进行对代码的解读,修改。
- 单一职责原则、开放封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。将常量、配置和参数值存储在配置文件或数据库中,以便于修改和维护。
五,总结
在近几次作业中,最大的问题仍然是输出结构与if结构的使用,在后续作业中,我会着重于对这两方面进行修改
此外,对于各种接口,例如可比较性等,数据集合的使用会使程序设计事半功倍,随着java学习不断深入,我对这些数据集合,接口的使用会更加熟练,深入,提高程序便捷性。
善用idea等开发工具,使用其广泛的插件,可以便捷的对程序进行解读,例如类图,复杂度插件。
在Java学习后期,我已经掌握了Java语言的基础知识和核心概念,同时我不断地深化和扩展自己的知识体系,掌握更多的高级特性和技术。我通过实践来加深对Java语言的理解和掌握。同时,我需要关注Java社区和行业动态,了解最新的技术趋势和最佳实践,以便不断提升自己的技术水平。
我认为java语言的上限较高,意味着我仍有很长的学习java之路要走。不断练习,最重要的是不断练习,通过编写各种类型的程序来巩固所学知识,并逐步提升编程能力。
此外,在学习的过程中,只有通过不断地学习和实践,才能真正掌握Java语言,并在未来的职业发展中取得更好的成绩。