第三次blog

(1) 前言:总结三次题目集的7-8题目的知识点、题量、难度等情况
这个题目涉及的知识点,包括:

  1. 电路基础:题目要求理解电路的基本组成,包括串联电路、并联电路以及它们之间的连接关系。
  2. 电路元件:题目涉及了多种电路元件,如开关、分档调速器、连续调速器、白炽灯、日光灯、吊扇等,需要理解这些元件的基本特性和功能。
  3. 电路控制:题目要求通过输入信息控制电路元件的状态或参数,这需要对电路控制有一定的理解。
  4. 数据解析:题目中提供了多种格式的数据输入,需要解析这些数据以进行电路模拟。
  5. 模拟计算:题目要求模拟电路的运行,包括计算电路中的电压、电流等参数,尽管在这个题目中并没有直接要求计算电流,但为后续的迭代做了铺垫。
  6. 输出格式:题目规定了特定的输出格式,需要按照要求格式化输出结果。
    题量分析
    从题目描述来看,这是一个单一的问题,但包含了多个子问题和复杂的输入/输出要求。虽然题目本身没有直接给出多个独立的题目,但理解和模拟一个包含多种电路元件和复杂连接关系的电路可以视为一个较大的题量。
    难度分析
    这个题目的难度相对较高,原因如下:
  7. 复杂性:题目中包含了多种电路元件和复杂的连接关系,需要深入理解电路的基本原理和元件特性。
  8. 数据解析:题目中的输入数据采用了特定的格式,需要编写代码来解析这些数据,这增加了题目的难度。
  9. 模拟计算:虽然题目没有直接要求计算电流等参数,但模拟电路的运行需要一定的电气和电子工程知识。
  10. 输出要求:题目规定了严格的输出格式,需要确保输出的结果符合题目要求。
  11. 扩展性:题目还提到了后续的迭代设计,这意味着题目本身可能只是一个起点,后续的内容可能会更加复杂。
    (2) 设计与分析:重点对题目的提交源码进行分析
    这是设计的类图

设计的问题:
• Main 类中直接进行了大量的逻辑操作,这违反了单一职责原则(SRP)。Main 类应该只负责启动程序,而不是包含所有的业务逻辑。
• Separation 类和 Regex 类的作用并不清晰。从代码上看,Separation 类似乎用于存储一些字符串数据,但没有明确的职责。而 Regex 类用于定义正则表达式,但同样缺乏明确的职责定义。
• Series 类中的 p 字段似乎是用于存储 Parallel 类的实例,但在类的定义中并没有看到这个字段的声明。这意味着可能存在类之间的不恰当耦合。
• 设计模式缺失:
o 代码中没有明显使用到设计模式来简化复杂的逻辑或提高代码的可维护性。例如,可以使用工厂模式来创建 Series 和 Parallel 类的实例,使用策略模式来处理不同的电路条件等。
• Main 类中的 setInput(0) 和 setOutput(220) 方法调用使用了硬编码的值,这降低了代码的灵活性和可重用性。这些值应该作为参数传递给方法,或者从配置文件中读取。
• 代码中的循环和条件语句嵌套较多,导致逻辑复杂且难以维护。应该尝试通过重构代码来简化逻辑,例如使用更清晰的类结构和方法来分解任务。
• 当前的代码结构使得添加新的电路类型或处理新的电路条件变得困难。应该考虑使用更灵活的设计来提高代码的可扩展性,例如使用接口或抽象类来定义电路类型和条件处理器。

(3)采坑心得:对源码的提交过程中出现的问题及心得进行总结
问题分析

  1. 类结构和设计问题:
    o Separation、Regex、Series、Parallel 类之间的关系不明确,从给定的代码片段中难以判断它们之间的完整交互和职责。
    o Parallel 类和 Series 类之间的关联处理不当,特别是将 Parallel 对象添加到 Series 对象的 p 属性(这个属性在提供的代码片段中并未声明)是不合理的,因为通常并联电路不会嵌套在串联电路中。
    o Series 类中的 setCircuit 方法被调用但似乎没有实际用途,因为电路类型(串联或并联)通常在创建对象时已知。
  2. 正则表达式使用问题:
    o 使用了三个正则表达式匹配器(parallelMatcher、seriesMatcher、circuitMatcher)但没有明确定义这些正则表达式的模式,这可能导致不正确的匹配。
    o 正则表达式应该明确区分串联电路、并联电路和总电路的不同结构。
  3. 循环和逻辑错误:
    o 在 if-else 语句中,如果第一个 if 条件满足(即匹配到串联电路),则不会检查后续的 else if 条件(即使它可能也是正确的)。
    o p.addS(item); 在 parallelMatcher.find() 的 while 循环中执行可能不正确,因为 circuitMatcher 可能不会正确匹配嵌套在并联电路中的串联电路。
  4. 未处理的异常情况:
    o 如果 seriesArrayList 为空或最后一个元素不是期望的总电路,那么 seriesArrayList.get(seriesArrayList.size() - 1) 可能会抛出 IndexOutOfBoundsException。
    o 没有处理无法找到匹配序列的情况。
  5. 代码可读性和可维护性问题:
    o 代码片段中缺少注释,难以理解其意图和逻辑。
    o 变量和类名(如 p、s)不够描述性,增加了代码的维护难度。
    (4)改进建议:对相应题目的编码改进给出自己的见解,做到可持续改进
  6. 重构类结构和设计:
    o 明确 Separation、Regex、Series、Parallel 类的职责和它们之间的交互。
    o 引入更清晰的接口或抽象类来表示电路的不同类型(串联、并联)。
    o 使用组合而非继承来表示电路之间的关系(例如,并联电路包含多个串联电路)。
  7. 优化正则表达式:
    o 定义明确且测试过的正则表达式模式,用于匹配不同类型的电路。
    o 使用命名捕获组来提高代码的可读性。
  8. 改进循环和逻辑:
    o 使用嵌套的循环和条件语句来正确处理嵌套的电路结构。
    o 添加异常处理来捕获并处理潜在的错误情况。
  9. 增强代码的可读性和可维护性:
    o 添加注释以解释代码的意图和逻辑。
    o 使用更具描述性的变量和类名。
    o 编写单元测试来验证代码的正确性。
  10. 重构代码:将业务逻辑从 Main 类中分离出来,创建专门的类来处理电路模拟的逻辑。
  11. 明确类职责:为每个类定义清晰的职责,并确保它们之间的依赖关系合理。
  12. 使用设计模式:考虑使用适当的设计模式来简化代码结构,提高代码的可维护性和可扩展性。
  13. 添加异常处理:对可能出现的异常进行捕获和处理,以提高程序的健壮性。
  14. 改进数据封装:确保类的属性和方法都被正确地封装,并遵循封装性的原则。

(5)总结:
在解决这个关于电路模拟的题目集过程中,我学习到了多个方面的知识和技能,包括面向对象编程(OOP)的概念、正则表达式的应用、数据结构的使用,以及算法设计和实现的技巧深化了对类和对象的理解,学会了如何根据实际需求定义类及其属性和方法。掌握了封装、继承和多态等OOP核心概念,理解了它们在构建复杂系统中的作用。学会了编写和使用正则表达式来匹配和解析文本数据,这在处理电路信息字符串时非常有用。深入了解了ArrayList等集合类的使用,学会了如何高效地存储和检索对象。体会到了选择合适的数据结构对于提升程序性能的重要性。在解析电路信息时,学会了设计合理的算法来遍历和匹配字符串。在构建电路结构时,理解了如何设计算法来维护电路组件之间的关系。意识到了代码组织的重要性,学会了如何根据功能将代码拆分成不同的类和模块。理解了设计模式在简化复杂逻辑和提高代码可维护性中的作用。需要深入学习并掌握各种设计模式,了解它们的应用场景和优缺点,以便在实际开发中能够灵活运用。需要加强对异常处理的学习,了解如何合理地捕获和处理程序中可能出现的各种异常,提高程序的健壮性。需要学习如何编写清晰、准确的设计文档和代码注释,以便其他开发人员能够理解和维护代码。编程是一个不断学习和实践的过程,需要保持对新技术、新方法的关注和学习,同时不断实践并改进自己的编程技能。

posted @ 2024-06-29 20:51  我_喜_欢  阅读(14)  评论(0)    收藏  举报