第三次Blog大作业

前言

本次blog大作业主要对第七,第八次大作业进行总结,这两次大作业都偏难,涉及到了继承关系,多态性,集合相关接口和类,电路状态,比较器接口实现排序逻辑的知识点。

设计与分析

题目分析
  本题是在 “家居强电电路模拟程序 - 2” 基础上进行的功能扩展。主要变化集中在电路结构的复杂性增加、新设备的引入以及输入输出格式的调整。
电路结构变化
  允许多个并联电路串联在一起,这意味着电路的层次结构更加复杂,需要考虑不同并联电路之间的相互影响以及它们在串联关系中的整体特性。一条串联电路中可以包含其他串联电路,这种嵌套结构进一步增加了电路分析的难度,需要合理地处理嵌套电路之间的连接和参数传递。明确不考虑并联电路中包含并联电路这种复杂嵌套情况,简化了部分电路分析的复杂度,但仍需要对现有复杂结构进行精确处理。输入的串联电路信息必须在并联信息之前,且不允许乱序输入,这要求程序在解析输入时严格按照顺序进行处理,确保电路结构的正确构建。
新设备引入
  互斥开关:具有特殊的引脚结构和工作特性,有 3 个引脚,存在两种状态且每次只能接通一个分支引脚,同时设置了限流电阻。在电路计算中,需要考虑其不同状态下对电路电阻和电流的影响,以及引脚连接关系对整体电路的作用。
  受控窗帘:其工作状态不仅与电压有关,还受室内灯光光照强度的控制。这需要在电路模拟中,综合考虑其他灯光设备的状态来确定窗帘的打开比例,增加了电路与设备之间的交互复杂性。
输入格式变化
  设备信息通过特定的标识符和编号表示,引脚使用 “设备标识 - 引脚编号” 格式,这种明确的标识方式有助于准确地描述设备及其连接关系,但也要求程序在解析时能够精确识别和处理。
  连接信息采用 “[引脚号 引脚号]” 的格式,简洁明了地表示设备引脚之间的连接,但需要程序对这种格式进行严格的解析和验证,确保连接的正确性。
  控制设备调节信息针对不同类型的控制设备有不同的格式,如开关和互斥开关通过 “# + 设备标识 + 设备编号” 切换状态,分档调速器通过 “# + 设备标识 + 设备编号 + [+/-]” 调节档位,连续调速器通过 “# + 设备标识 + 设备编号 + : + 数值” 设置档位。这要求程序能够准确识别不同类型的控制指令,并正确地应用到相应的设备上。
  新增串联电路信息和并联电路信息的输入格式,分别为 “#T + 电路编号 + : + 连接信息 +... + 连接信息” 和 “#M + 电路编号 + : + [串联电路信息 +... + 串联电路信息]”。这种格式清晰地描述了电路的层次结构,但需要程序具备强大的解析能力,能够将输入信息准确地转化为实际的电路模型。
输出格式变化
  要求按特定顺序(开关、分档调速器、连续调速器、白炽灯、日光灯、吊扇、互斥开关、受控窗帘)依次输出所有设备的状态或参数,每个设备占一行,同类设备按编号从小到大输出。这对程序的输出逻辑提出了严格要求,需要对设备进行分类和排序,确保输出结果符合规定格式。
  不同类型设备的输出参数有特定的格式要求,如开关状态用文字表述,连续调速器档位保留两位小数,互斥开关显示引脚接通状态,受控窗帘显示打开百分比等。这需要程序在输出时根据设备类型进行相应的格式化处理。
通用规则
  数值计算及输出处理:在计算过程中使用 double 类型保存和计算可能出现小数的数值,确保计算精度,但在最终输出时采用截尾规则去掉小数部分,只保留整数部分。这要求程序在计算和输出环节进行合理的类型转换和数值处理。
  电路连接信息顺序:所有连接信息必须按从电源到接地的顺序依次输入,电源 “VCC” 在第一个连接的第一项,接地 “GND” 在最后一个连接的后一项,且双引脚连接时靠电源端在前。这种严格的顺序要求有助于程序正确构建电路模型,避免因连接顺序错误导致的计算错误。
调速器连接限制:调速器输入端只能直连 “VCC”,且整个电路最多只有一个连接在电源上的调速器,且不包含在并联电路中。这对调速器在电路中的位置和连接方式进行了明确限制,程序在构建电路和进行计算时需要遵循这些规则。
设计思路
数据结构设计
  定义一个基础的设备类(如 Equipment),作为所有电路设备的基类,包含设备的通用属性(如设备类型、设备编号)和方法(如获取设备信息的方法)。
针对不同类型的设备(开关、调速器、灯、风扇、互斥开关、受控窗帘等),分别定义子类继承自 Equipment 类,在子类中添加特有的属性和方法,以满足不同设备的特性需求。例如,开关子类添加开关状态属性和状态切换方法,互斥开关子类添加引脚连接状态和电阻属性等。
  设计串联电路类(Series)和并联电路类(Parallel),用于表示电路的串联和并联结构。这两个类可以包含设备列表或子电路列表,以及计算电路参数(如电阻、电压)的方法。
  使用合适的数据结构来存储输入信息和设备对象,如使用 LinkedList 存储设备标识列表,LinkedHashMap 存储设备对象与标识的映射关系,方便对设备进行管理和查询。
输入解析模块
  编写一个输入解析器,按照题目给定的输入格式,对输入信息进行逐行解析。首先识别输入信息的类型(设备信息、连接信息、控制信息、电路信息等),然后根据不同类型进行相应的解析处理。
  对于设备信息,创建相应的设备对象,并将其存储到合适的数据结构中。对于连接信息,解析引脚编号,建立设备之间的连接关系。对于控制信息,根据设备类型和指令格式,调用相应设备的控制方法,更新设备状态。
  在解析串联电路信息和并联电路信息时,构建相应的电路对象,并将其与已有的设备对象进行正确连接,形成完整的电路模型。
电路计算模块
  实现一系列的电路计算方法,根据电路的连接结构和设备特性,计算电路中的电压、电流、电阻等参数。对于串联电路,根据欧姆定律和设备电阻计算每个设备的电压降;对于并联电路,先计算各支路的等效电阻,再根据总电压分配电流到各支路。
  在计算过程中,考虑互斥开关的不同状态对电路电阻的影响,以及受控窗帘与灯光设备之间的交互关系。例如,在计算光照强度时,需要汇总所有灯光设备的亮度信息,然后根据光照强度计算窗帘的打开比例。
  针对电路中的特殊情况,如调速器的连接限制、电压范围限制等,进行相应的处理和验证,确保计算结果的合理性和准确性。
输出模块
  根据题目要求的输出顺序和格式,编写输出方法。首先对设备进行分类和排序,按照开关、分档调速器、连续调速器、白炽灯、日光灯、吊扇、互斥开关、受控窗帘的顺序,将同类设备按编号从小到大排列。
  对于每个设备,调用其相应的方法获取设备的状态或参数,并按照规定的格式进行输出。例如,开关输出状态文字表述,连续调速器输出保留两位小数的档位信息,互斥开关输出引脚接通状态,受控窗帘输出打开百分比等。
错误处理与异常机制
  设计完善的错误处理机制,对输入信息进行有效性验证。例如,检查设备标识符是否正确、引脚编号是否合法、控制指令格式是否符合要求等。对于不符合要求的输入,给出明确的错误提示信息,帮助用户纠正错误。
  在电路计算过程中,处理可能出现的异常情况,如电压或电流超出合理范围、电路短路等。根据题目要求,对于不会造成无穷大电流的短路情况进行合理处理,例如调整电路参数或输出特定的错误提示;对于会造成无穷大电流的短路情况,按照题目要求不进行处理,但在程序中可以进行相应的标记或记录。
类的设计分析
  Electricalment 类
定义:这是一个基础类,用于表示所有的电路设备,包含了设备的基本属性和一个显示设备状态的方法。
属性:
eletype:表示设备类型的字符串。
eleid:表示设备编号的字符串。
inputVolt:设备的输入电压。
outputVolt:设备的输出电压。
resistnum:设备的电阻值,默认值为 0。
方法:
Electricalment(String eletype, String id):构造函数,用于初始化设备类型和编号。
showstus(Electricalment e):根据设备类型显示其状态或参数。通过判断设备类型,调用不同的处理逻辑来格式化输出设备信息。
  ElectSwitch 类
定义:继承自 Electricalment 类,代表开关设备。
属性:
Kstate:表示开关状态的整数,0 表示打开,1 表示合上。
方法:
ElectSwitch(String id):构造函数,初始化开关编号和初始状态为 0。
changestate():切换开关状态。
changeoutputVolt(double inputVolt):根据开关状态计算输出电压。
  SpeedAdjustDevice 类
定义:继承自 Electricalment 类,代表分档调速器。
属性:
level:表示调速器档位的整数。
方法:
SpeedAdjustDevice(String id):构造函数,初始化调速器编号和初始档位为 0。
changeoutputVolt(double inputVolt):根据当前档位计算输出电压。
  ParamSetDevice 类
定义:继承自 Electricalment 类,代表连续调速器。
属性:
parameter:表示调速器档位参数的双精度浮点数,范围在 [0.00 - 1.00] 之间。
方法:
ParamSetDevice(String id):构造函数,初始化连续调速器编号和初始档位参数为 0。
setparameter(double p):设置调速器的档位参数。
changeoutputVolt(double inputVolt):根据档位参数计算输出电压。
  BrightControlDevice 类
定义:继承自 Electricalment 类,代表白炽灯。
属性:
Blight:表示白炽灯亮度的双精度浮点数。
方法:
BrightControlDevice(String id):构造函数,初始化白炽灯编号和初始亮度为 0。
setlight(double inputVolt):根据输入电压设置白炽灯的亮度。
  SunlightDevice 类
定义:继承自 Electricalment 类,代表日光灯。
属性:
Rlight:表示日光灯亮度的双精度浮点数。
方法:
SunlightDevice(String id):构造函数,初始化日光灯编号和初始亮度为 0。
setlight(double inputVolt):根据输入电压设置日光灯的亮度。
  FanDevice 类
定义:继承自 Electricalment 类,代表吊扇。
属性:
Drotate:表示吊扇转速的双精度浮点数。
方法:
FanDevice(String id):构造函数,初始化吊扇编号和初始转速为 0。
setrotate(double inputVolt):根据输入电压设置吊扇的转速。
  roadfan 类
定义:继承自 Electricalment 类,代表落地扇。
属性:
Arotate:表示落地扇转速的双精度浮点数。
方法:
roadfan(String id):构造函数,初始化落地扇编号和初始转速为 0。
setrotate(double inputVolt):根据输入电压设置落地扇的转速。
  ElectHswitch 类
定义:继承自 Electricalment 类,代表互斥开关。
属性:
state:表示互斥开关引脚接通状态的字符串。
two:表示互斥开关 1、2 引脚连接状态的布尔值。
three:表示互斥开关 1、3 引脚连接状态的布尔值。
方法:
ElectHswitch(String id):构造函数,初始化互斥开关编号和默认连接状态。
change():切换互斥开关的连接状态。
changer():根据连接状态设置电阻值和更新状态字符串。
  curtain 类
定义:继承自 Electricalment 类,代表受控窗帘。
属性:
openness:表示窗帘打开百分比的字符串。
方法:
curtain(String id):构造函数,初始化受控窗帘编号。
changeopenness(double light):根据光照强度设置窗帘的打开百分比。
  Series 类
定义:继承自 Electricalment 类,代表串联电路。
属性:
state:表示串联电路导通状态的整数,0 表示未导通,1 表示导通。
Serieslist:存储串联电路中设备标识的 LinkedList。
Seriesmap:存储串联电路中设备标识与设备对象映射关系的 LinkedHashMap。
方法:
Series(String id):构造函数,初始化串联电路编号和初始状态为 0。
changestate():根据串联电路中开关、互斥开关和子串联电路的状态,判断并更新串联电路的导通状态。
checkKDevices():检查串联电路中开关设备的状态,判断是否存在打开的开关。
checkHDevices():检查串联电路中互斥开关的状态,判断是否满足特定连接条件。
checkTDevicesForStateChange():检查串联电路中包含的子串联电路的状态,判断是否有导通的子串联电路。
  Parallel 类
定义:继承自 Electricalment 类,代表并联电路。
属性:
paralllist:存储并联电路中串联电路标识的 LinkedList。
parallmap:存储并联电路中串联电路标识与串联电路对象映射关系的 LinkedHashMap。
方法:
Parallel(String id):构造函数,初始化并联电路编号和电阻值为 0。
changer():根据并联电路中各串联电路的状态,计算并联电路的总电阻。
  comparator 类
定义:实现了 Comparator 接口,用于对 Electricalment 对象进行排序。
方法:
compare(Electricalment one, Electricalment two):根据设备类型的优先级顺序和设备编号,对两个 Electricalment 对象进行比较,返回比较结果。
getPriorityOrder():获取设备类型的优先级顺序列表。
reverseList(List originalList):反转字符列表。
getOrderIndex(char character):获取字符在优先级顺序列表中的索引。

部分代码分析

public void changestate() {
boolean shouldChangeState = false;

shouldChangeState = shouldChangeState || checkKDevices();

shouldChangeState = shouldChangeState || checkHDevices();

shouldChangeState = shouldChangeState || checkTDevicesForStateChange();

if (shouldChangeState) {
    this.state = 1;
}

for (String key : Seriesmap.keySet()) {
    if (key.startsWith("T")) {
        if (this.state == 1) {
            ((Series) Seriesmap.get(key)).state = 1;
        }
    }
}

}
  这个方法用于更新串联电路的导通状态。通过调用 checkKDevices、checkHDevices 和 checkTDevicesForStateChange 方法,判断串联电路中开关设备、互斥开关和子串联电路的状态,综合判断是否需要将当前串联电路的状态设置为导通(state = 1)。如果当前串联电路导通,且包含子串联电路,则将子串联电路的状态也设置为导通。
public void changer() {
double sum = 0;
for (String s : parallmap.keySet()) {
if (((Series) parallmap.get(s)).state == 0) {
sum += 1 / ((Series) parallmap.get(s)).resistnum;
if (sum == Double.POSITIVE_INFINITY) {
this.resistnum = Double.POSITIVE_INFINITY;
return;
}
}
}
this.resistnum = 1 / sum;
}
  该方法用于计算并联电路的总电阻。遍历并联电路中包含的串联电路,对于未导通的串联电路,将其电阻的倒数累加到 sum 中。根据累加结果计算并联电路的总电阻。如果 sum 为正无穷大,表示并联电路中存在开路情况,此时将总电阻设置为正无穷大。
public void showstus(Electricalment e) {
String output = "";

if (e instanceof ElectSwitch && ((ElectSwitch) e).Kstate == 0) {
    output = "@" + e.eleid + ":turned on";
} else if (e instanceof ElectSwitch && ((ElectSwitch) e).Kstate == 1) {
    output = "@" + e.eleid + ":closed";
}
// 

}
  showstus 方法用于根据设备类型显示其状态或参数。通过判断设备类型,调用不同的处理逻辑来格式化输出设备信息。例如,如果是开关设备,根据其开关状态输出相应的文字表述。对于其他类型的设备(如分档调速器、连续调速器、灯、风扇、互斥开关、受控窗帘),也有相应的处理逻辑来输出其状态或参数。

class comparator implements Comparator {

@Override
public int compare(Electricalment one, Electricalment two) {
    String key111 = one.eleid;
    String key222 = two.eleid;
    int orderIndex1 = getOrderIndex(key111.charAt(0));
    int orderIndex2 = getOrderIndex(key222.charAt(0));

    if (orderIndex1!= orderIndex2) {
        return orderIndex1 - orderIndex2;
    } else {
        return key111.compareTo(key222);
    }
}
// 

}
  comparator 类实现了 Comparator 接口,用于对 Electricalment 对象进行排序。在 compare 方法中,首先获取两个设备标识的首字符,根据设备类型的优先级顺序获取其索引。如果索引不同,根据索引大小进行排序;如果索引相同,则根据设备编号进行排序。这样可以确保按照题目要求的设备类型顺序和设备编号顺序对设备进行排序。

类图


改进建议

  细化类职责:当前部分类的职责不够单一,承担了过多不同类型的功能。例如,Series 类不仅管理串联电路的设备列表和状态,还包含复杂的状态更新逻辑。建议将与设备管理、状态更新等不同职责的代码分离到不同的方法或类中,使得每个类专注于一个核心功能,提高代码的内聚性。
  提取公共方法:在多个类中存在相似的代码片段,如设备属性的初始化、某些计算逻辑等。可以将这些公共代码提取到一个独立的工具类中,或者作为基类的公共方法,避免重复代码,提高代码的复用性。
  使用设计模式:考虑引入合适的设计模式来优化代码结构。例如,使用工厂模式来创建不同类型的设备对象,这样可以将对象创建的逻辑集中管理,提高代码的可维护性和扩展性。同时,在处理电路连接和控制逻辑时,可以借鉴责任链模式或命令模式,使代码更加灵活和易于扩展。

  增强输入验证:目前对用户输入的验证较为简单,仅验证了输入的前缀和部分格式。建议对输入的内容进行更全面的验证,包括设备标识符的唯一性、引脚编号的合理性、控制指令的参数范围等。对于不符合要求的输入,应给出详细的错误提示信息,帮助用户快速定位和解决问题。
  异常处理机制:在输入处理过程中,应增加更完善的异常处理机制。当输入无法解析或不符合预期时,应捕获异常并进行适当的处理,避免程序因异常而崩溃。可以定义自定义异常类,以便更好地分类和处理不同类型的输入错误。
  输入规范化:在处理输入之前,对输入进行规范化处理,例如去除多余的空格、统一大小写等,以提高输入的一致性和准确性,减少因输入格式不一致而导致的错误。
电路状态更新逻辑方面
  优化状态更新算法:在 Series 类和 Parallel 类的状态更新方法中,除了减少遍历次数外,还可以考虑使用更高效的算法来计算电路状态。例如,可以预先计算和存储一些中间结果,避免重复计算,从而提高状态更新的效率。

  抽象和接口的应用:进一步利用抽象类和接口来提高代码的复用性和扩展性。例如,可以定义一个 ElectricalCalculation 接口,包含各种电路计算方法,让不同的电路类(如 Series 和 Parallel)实现该接口,这样可以在不同的电路场景中复用这些计算方法。

PTA第八次大作业

因为临近期末了,好多作业和考试以及课设挤压时间,加上自己没有合理化管理时间和畏难的心理,导致我没有在规定的时间内完成第八次大作业。以下是对第八次大作业的分析和总结。

设计分析

题目分析
增加的内容:
管脚电压显示功能:在程序输出中增加对每个元器件管脚电压的展示,以便更全面地呈现电路运行状态信息。
电流限制机制:为各类元器件设定最大电流值,在程序运行过程中,实时监测电流情况。当某元器件的实时电流超出其最大电流时,在该元器件的输出信息末尾添加 “exceeding current limit error” 提示,以明确标识电流过载情况。
短路检测与处理:完善短路检测逻辑,当电路中出现因电流无穷大导致短路的情况时,不再输出所有元器件的信息,而是仅输出 “short circuit error” 提示,确保用户能够及时知晓电路故障状态。
复杂并联电路支持:拓展并联电路的功能,允许并联电路中的串联电路进一步包含其他并联电路,以更准确地模拟实际复杂电路结构,增强程序对多样化电路布局的模拟能力。
二极管元件特性实现:引入二极管元件,根据其正向导通、反向截止的电路特性,在电路模拟过程中准确模拟二极管的工作状态,丰富电路元件类型,提高模拟的真实性和完整性。
整体架构与设计思路
类的设计:
设备基类:作为抽象类,定义了设备的通用属性和抽象方法,为各类具体设备类提供统一的基础框架,确保子类具有一致的行为规范和属性定义。
具体设备类:开关类、互斥开关类、分档调速器类、连续调速器类以及各类受控设备类等均继承自设备基类。这些子类在继承通用属性和方法的基础上,重点实现与自身特性相关的逻辑,同时负责处理电流限制的判断逻辑,确保设备在安全电流范围内运行。
电路相关类:串联电路类和并联电路类分别负责存储电路连接信息、构建电路结构,并依据电路原理计算相关参数。此外,还需妥善处理电路的嵌套情况,无论是串联电路中的并联子电路,还是并联电路中的串联子电路,都能准确模拟和计算,以适应复杂电路的模拟需求。
电路模拟系统主类:作为整个程序的入口点,负责协调各个环节的工作流程,包括输入读取、设备与电路创建、状态计算与更新以及最终的输出展示等,确保整个模拟过程的顺利进行。
工作流程:
输入处理阶段:运用标准输入流,按行读取用户输入的信息,直至遇到 “end” 标志为止。随后,根据输入信息的格式,准确判断其类型,并进行分类处理。通过正则表达式或字符串分割等技术手段,提取设备相关信息,进而创建相应的设备对象,并将其合理地组织到电路结构中。同时,解析连接信息,建立起准确的电路连接关系,为后续的电路模拟计算奠定基础。对于控制调节信息,按照规定格式进行解析和处理,以便及时改变设备的工作状态,模拟实际电路中的控制操作。
电路状态计算与模拟阶段:在初始化阶段,依据电路的初始状态和连接情况,为每个元器件设置初始管脚电压,并在此过程中判断电流是否超出限制。当接收到控制调节信息后,根据电路原理和欧姆定律等知识,通过多次迭代计算,准确更新电路的状态,包括电压、电流、电阻等参数的变化,以及设备状态的切换,确保模拟结果的准确性和实时性。
输出环节:首先对设备进行排序,以满足特定的输出顺序要求。然后,遍历所有设备,按照规定的格式输出设备的详细信息,包括设备类型、编号、管脚电压、工作状态等。若在模拟过程中检测到短路情况,则按照约定输出 “short circuit error” 提示,避免输出可能误导用户的不准确设备信息。
异常处理机制:针对输入过程中不符合格式要求的情况,以及程序运行时可能出现的各类异常,如数学计算溢出、非法参数值等,分别设计合理的提示信息和处理逻辑。通过完善的异常处理机制,确保程序在面对各种异常情况时能够保持稳定运行,避免因异常导致程序崩溃或输出错误结果,从而提供可靠的电路模拟服务。
**类的分析 **
抽象基类 ElectricalEntity
功能概述:作为所有电路设备以及电路结构的抽象基类,为各类具体设备和电路结构定义了通用的属性和部分通用行为方法。该抽象类整合了与电路连接、状态更新、参数计算以及结果展示相关的基础逻辑,为整个电路模拟系统提供了统一的框架。
主要成员变量:
type:用于标识设备类型的字符串,不同类型的设备具有不同的功能和特性。
id:设备的唯一标识符,用于在电路系统中准确识别和管理每个设备。
pinInfo:包含引脚相关信息,用于描述设备与其他设备在电路中的连接方式和引脚状态。
resistance:设备的电阻值,初始化为 0,电阻值的大小会影响电路中的电流和电压分布。
inputVoltage、outputVoltage、currentVoltage:分别表示设备的输入电压、输出电压以及当前电压,这些电压值在电路运行过程中会根据电路状态和设备特性发生变化。
maxCurrent:设备允许通过的最大电流值,用于判断设备是否处于安全运行状态。
current:设备当前通过的电流值,实时反映设备在电路中的电流情况。
isReserved:布尔值,用于标记设备是否处于某种备用或特殊状态,以便在电路模拟中进行特殊处理。
主要方法及逻辑:
determineStateChange(ElectricalEntity comparedEntity):抽象方法,用于判断当前设备相对于给定设备 comparedEntity 的状态是否发生改变。不同类型的设备会根据自身特性实现该方法,以确定在电路中的状态变化情况。
calculateVoltage(Circuit circuit):根据给定的电路对象 circuit 的电阻和电压,计算当前设备的电压。在计算过程中,会充分考虑电路电阻为 0 或总电压过大等边界情况,并进行相应的处理,以确保电压计算的准确性和稳定性。
updatePinVoltage(ElectricalEntity previousEntity, Circuit circuit):用于更新设备与前一个设备 previousEntity 在电路 circuit 中的引脚连接相关的电压信息。针对不同类型的设备,如特殊的切换开关等,会有不同的处理逻辑,以正确传递和更新电压值,保证电路中电压信息的连贯性。
updatePinVoltageBasedOnState(Circuit circuit):根据设备相对于电路 circuit 的状态以及自身是否为特殊类型设备,更新设备的输入输出电压等引脚相关电压信息。在更新过程中,会对电压值进行边界处理,确保电压值在合理范围内,符合电路运行的物理规律。
updateReservedState():根据设备的引脚信息来更新 isReserved 状态,以便在电路模拟中对处于特殊状态的设备进行准确的管理和处理。
displayInfo():根据设备类型以及当前的各种参数情况,格式化输出设备相关的状态信息。输出内容包括设备的标识符、当前状态以及是否超出电流限制等提示信息,为用户提供直观的设备运行状态反馈。

开关类 SwitchDevice
功能概述:代表电路中的开关设备,主要用于控制电路的通断。该类继承了 ElectricalEntity 类的通用属性和方法,并在此基础上实现了自身特有的开关切换以及状态判断逻辑。
主要成员变量:
switchState:表示开关的当前状态,0 表示打开,1 表示关闭,初始化为 0。通过改变 switchState 的值,可以实现电路的通断控制。
主要方法及逻辑:
toggleState():用于切换开关的状态,将 switchState 的值在 0 和 1 之间进行切换,从而改变电路的通断情况。当 switchState 为 0 时,电路处于断开状态;当 switchState 为 1 时,电路处于导通状态。
determineStateChange(ElectricalEntity comparedEntity):重写父类方法,根据自身的 switchState 值判断相对于给定设备的状态是否改变。若 switchState 为 0(打开状态),则返回 false,表示电路不通;若 switchState 为 1(关闭状态),则返回 true,表示电路连通。
分档调速类 SpeedRegulator
功能概述:作为调节输出电压比例的设备,通过调整 speedLevel 属性来改变输出电压占输入电压的比例。该类继承自 ElectricalEntity 类,并实现了与电压调节相关的逻辑。
主要成员变量:
speedLevel:表示设备的速度级别或电压调节级别,初始化为 0。通过相应的指令,可以增加或减少该值,从而改变输出电压的大小,以满足不同的电路需求。
主要方法及逻辑:
determineStateChange(ElectricalEntity comparedEntity):重写父类方法,直接返回 true,意味着该设备默认总是处于一种对电路状态有影响的 “连通” 状态,即无论其 speedLevel 值如何,都被视为参与电路的正常运行。
calculateOutputVoltage(double inputVoltage):根据当前的 speedLevel 值计算并返回输出电压。不同的 speedLevel 对应不同的输出电压与输入电压的比例关系,同时会对边界情况进行处理,确保输出电压在合理范围内。
连续调速类 ContinuousRegulator
功能概述:可调节参数并且基于参数改变输出电压的设备,通过设置 parameter 属性来决定输出电压占输入电压的比例。该类继承了 ElectricalEntity 类的相关基础逻辑,实现了连续调节输出电压的功能。
主要成员变量:
parameter:表示调节参数,初始化为 0,可通过外部指令设置其具体值。该参数的取值范围在 0 到 1 之间,用于精确控制输出电压的比例,以满足不同的电路需求。
主要方法及逻辑:
determineStateChange(ElectricalEntity comparedEntity):重写父类方法,返回 true,表明设备默认对电路状态判断来说是处于有效连通状态,即该设备在电路中始终参与电压的调节和分配。
setParameter(double value):用于设置 parameter 参数的值,以便后续根据该参数计算输出电压。在设置参数时,会对输入值进行范围检查,确保其在有效范围内。
calculateOutputVoltage(double inputVoltage):依据当前的 parameter 值以及输入电压 inputVoltage 来计算输出电压。当 parameter 不在有效范围(小于 0 或大于 1)时,返回 0;同时考虑输入电压为 0 的情况进行相应处理,以保证输出电压的合理性。
发光设备类 LightDevice
功能概述:代表某种发光设备,如灯泡等,其发光亮度根据输入电压的不同而变化。该类继承了 ElectricalEntity 类的通用行为,并实现了与发光亮度计算相关的逻辑。
主要成员变量:
brightness:表示设备当前的发光亮度,初始化为 0。随着输入电压的变化,brightness 值会按照特定的规则进行更新,以反映发光设备的实际工作状态。
主要方法及逻辑:
determineStateChange(ElectricalEntity comparedEntity):重写父类方法,返回 true,意味着默认在电路状态判断中该设备处于有效工作状态,即该设备会根据输入电压正常调节发光亮度。
setBrightness(double inputVoltage):根据输入电压 inputVoltage 按照一定的分段函数逻辑来设置 brightness 的值。不同的电压区间对应不同的亮度计算方式,如电压在 0 到 9 之间亮度为 0,在 9 到 220 之间按照特定公式计算,大于 220 则亮度设为固定值 200 等,以准确模拟发光设备的亮度变化特性。

太阳光源类 SunlightDevice
功能概述:模拟太阳光源的设备,根据输入电压来确定光照强度。该类继承自 ElectricalEntity 类,并实现了与光照强度设置相关的逻辑。
主要成员变量:
illumination:表示设备当前的光照强度,初始化为 0。在电路运行过程中,illumination 值会根据输入电压的变化按照特定规则进行更新。
主要方法及逻辑:
determineStateChange(ElectricalEntity comparedEntity):重写父类方法,返回 true,表明在电路状态判断层面设备默认处于有效作用状态,即该设备会根据输入电压正常调节光照强度。
setIllumination(double inputVoltage):依据输入电压 inputVoltage 来设置光照强度。若电压为 0,则光照强度设为 0;否则设为固定值 180,体现了该设备特定的光照强度与电压关系。

风扇类 FanDevice
功能概述:代表风扇类设备,通过输入电压来调节风扇的旋转速度。该类继承了 ElectricalEntity 类,并实现了与风扇转速计算相关的逻辑。
主要成员变量:
rotationSpeed:表示风扇当前的旋转速度,初始化为 0。在电路运行过程中,rotationSpeed 值会根据输入电压的变化按照特定规则进行更新。
主要方法及逻辑:
determineStateChange(ElectricalEntity comparedEntity):重写父类方法,返回 true,说明在电路状态判断角度设备默认处于正常运行可影响电路状态的情况,即该风扇设备会根据输入电压正常调节旋转速度。
setRotationSpeed(double inputVoltage):基于输入电压 inputVoltage 按照不同的电压区间来计算并设置风扇的旋转速度。例如,电压小于 80 时转速设为 0,在 80 到 150、大于 150 等不同区间有不同的计算方式来确定具体转速值,以准确模拟风扇的转速调节特性。
落地风扇类 FloorFanDevice
功能概述:作为风扇设备的一种,同样依据输入电压来确定旋转速度。该类继承自 ElectricalEntity 类,并实现了自身独特的转速计算逻辑,以满足落地风扇的特定转速调节需求。
主要成员变量:
rotationSpeed:代表风扇的旋转速度,初始化为 0。在电路运行过程中,会根据输入电压的变化按照特定规则更新该值。
主要方法及逻辑:
determineStateChange(ElectricalEntity comparedEntity):重写父类方法,返回 true,意味着在电路状态考量中该设备默认处于有效运行状态,即该落地风扇设备会根据输入电压正常调节旋转速度。
setRotationSpeed(double inputVoltage):按照多个不同的电压区间来分别设置风扇的旋转速度,实现了基于不同电压范围对应不同挡位转速的逻辑,以准确模拟落地风扇的转速调节特性。
互斥开关类 ExclusiveSwitch
功能概述:用于切换连接不同的串联电路等情况,实现电路连接的灵活切换。该类继承自 ElectricalEntity 类,并实现了与互斥开关相关的逻辑。
主要成员变量:
voltageToSeries2、voltageToSeries3:分别表示连接到该开关的两个不同串联电路对应的电压值,初始化为 0。在电路运行过程中,这两个电压值会根据开关的连接状态和电路情况动态更新。
switchState:表示开关当前的状态,字符串类型,初始化为 "closed"。通过 changeState() 方法可切换为 "turned on" 等状态,同时关联着开关连接的不同电路情况。
series2、series3:分别指向连接到该开关引脚 2 和 3 的 SeriesCircuit(串联电路)对象,初始为 null,用于表示电路连接关系。
isConnectedToPin2:布尔值,用于标记当前开关是否连接到引脚 2 对应的电路,初始为 false。通过 changeState() 方法进行切换,并且关联着电阻等属性的变化。
主要方法及逻辑:
changeState():用于切换开关的连接状态,改变 isConnectedToPin2 的值,从而决定后续电路连接以及电阻等属性的改变情况。在切换状态时,会同时更新相关的电压和电阻值,以保证电路的正常运行。
updateResistanceAndState():根据 isConnectedToPin2 的值来更新开关自身的电阻,同时更新 switchState 状态字符串("turned on" 或 "closed")以反映当前连接情况。通过该方法,确保开关的电阻和状态与连接情况保持一致。
determineStateChange(ElectricalEntity comparedEntity):重写父类方法,首先判断给定设备 comparedEntity 是否为 Circuit 类型,若不是则返回 false。然后根据 isConnectedToPin2 的值来判断当前开关连接的是引脚 2 还是 3 对应的电路,并与给定设备 comparedEntity 进行比较,返回对应的连接状态判断结果,以确定开关在电路中的连接状态。

窗帘类 CurtainDevice
功能概述:窗帘设备,其开合程度根据输入电压以及整个电路中的光照强度等因素来调节。该类继承了 ElectricalEntity 类,并实现了与窗帘开合调节相关的逻辑。
主要成员变量:
opennessLevel:表示设备当前的开合程度,用于反映窗帘的打开或关闭状态。
主要方法及逻辑:
determineStateChange(ElectricalEntity comparedEntity):重写父类方法,返回 true,表明在电路状态判断中该设备默认处于有效可调节状态,即该窗帘设备会根据输入电压和光照强度正常调节开合程度。
adjustOpenness(double illumination):根据输入电压(通过 inputVoltage 属性体现)以及给定的光照强度 illumination 值按照不同的条件区间来设置设备的开合程度。通过该方法,实现了窗帘开合程度与电路参数的关联调节。
通断设备类 OnOffDevice
功能概述:根据自身的 deviceState 值以及相关条件来影响电路的连通情况。该类继承自 ElectricalEntity 类,并实现了与通断控制相关的逻辑。
主要成员变量:
deviceState:表示设备当前的通断状态,1 表示导通,0 表示截止,初始化为 1。通过改变 deviceState 的值,可以控制电路的通断。
主要方法及逻辑:
determineStateChange(ElectricalEntity comparedEntity):重写父类方法,根据自身的 deviceState 值判断相对于给定设备的状态是否改变。若 deviceState 为 1(导通状态),则返回 true,表示电路连通;若 deviceState 为 0(截止状态),则返回 false,表示电路断开。
抽象电路类 Circuit
功能概述:作为所有电路结构的抽象基类,定义了电路的通用属性和方法,为串联电路和并联电路等具体电路结构提供了统一的框架。该类主要负责管理电路中的设备,并提供了一些抽象方法,要求子类根据具体电路特性进行实现。
主要成员变量:
deviceMap:类型为 LinkedHashMap<String, ElectricalEntity>,用于存储该电路结构中所包含的各个设备。以设备编号作为键,对应的设备对象作为值,方便管理和查找电路内的设备。不同的电路子类(串联、并联)会基于实际情况往里面添加和操作设备。
deviceList:LinkedList 类型,通过 getDeviceList() 方法进行初始化,用于存放电路内部设备的列表形式。便于在一些需要顺序遍历设备的逻辑中使用,比如在更新电路中各设备的连接引脚、电压等信息时按顺序操作设备。
主要方法及逻辑:
getDeviceList():实例化 deviceList,将 deviceMap 中存储的设备值提取出来转换为列表形式,方便后续遍历等操作使用。通过该方法,能够快速获取电路中所有设备的列表,便于进行统一管理和操作。
updateVoltage():抽象方法,要求子类必须实现。目的是实现电路整体电压相关的更新逻辑,不同的电路结构(串联、并联)有各自不同的电压计算和分配规则。子类需要根据具体电路特性,实现该方法,以准确计算和更新电路中的电压值。
updateCurrent():抽象方法,同样需子类重写。用于更新电路中的电流情况,例如根据电路的总电阻、总电压以及各支路设备的电阻等信息来计算每个设备上通过的电流值。不同电路类型有不同的电流计算和分配策略,子类需要根据具体情况实现该方法。
updatePinVoltage():抽象方法,由子类实现。用于处理电路中各设备引脚相关的电压信息更新,考虑电路连接关系、设备先后顺序以及断路、通路等情况来正确设置各设备的输入输出电压等引脚电压值,确保电路中电压信息的正确传递和更新。子类需要根据具体电路结构和设备连接情况,实现该方法,以保证引脚电压的准确性。

串联电路类 SeriesCircuit
功能概述:代表串联电路结构,负责管理串联电路中的设备连接、状态更新以及参数计算等功能。该类继承自 Circuit 抽象类,实现了与串联电路相关的特定逻辑。
主要方法及逻辑:
updateState():用于更新串联电路的整体状态。通过遍历电路内包含的各个设备(通过 deviceMap),依据不同类型设备(如开关 SwitchDevice、特殊开关 ExclusiveSwitch、其他电路结构相关设备等)的状态来综合判断整个串联电路的通断情况。只要有一个设备处于断开状态,整个串联电路即判定为不通。
updateVoltage():重写 Circuit 类的抽象方法。遍历电路中的所有设备,调用每个设备从 ElectricalEntity 类继承而来的 calculateVoltage 方法,根据所在电路的电压、电阻情况计算自身电压,从而实现对各设备电压的更新。在计算过程中,会考虑电路中各设备电阻对电压分配的影响。
updateCurrent():重写 Circuit 类的抽象方法。首先通过 determineStateChange 方法判断整个串联电路相对于自身是否处于连通状态。若不连通,则直接返回,不进行后续操作;若连通,则遍历电路内各设备,对于状态满足条件(通过 determineStateChange 判断)的设备,将其电流值设为整个串联电路的电流值(current)。并且,如果设备本身也是电路结构(如嵌套的串联或并联电路),则递归调用其 updateCurrent 方法来更新内部电路设备的电流,以此确保串联电路中电流处处相等,并在嵌套电路中正确传递电流值。
updatePinVoltage():重写 Circuit 类的抽象方法。先通过 getDeviceList() 方法获取设备列表,然后从第一个设备开始处理引脚相关电压信息。对于特殊的 ExclusiveSwitch 等设备,根据其是否处于备用状态以及连接关系来设置对应的电压值。接着依次更新每个设备与前一个设备之间的连接引脚电压(通过 updatePinVoltage 方法)以及自身引脚电压(通过 updatePinVoltageBasedOnState 方法)。对于电路结构类型的设备,递归调用其 updatePinVoltage 方法。之后还要倒着再扫描一遍设备列表,处理断路开关后面设备的电势更新情况(通过相关方法),以此保证在各种复杂的串联电路连接以及通断情况下设备引脚电压信息的准确更新。
determineStateChange(ElectricalEntity comparedEntity):重写 Circuit 类方法。通过获取电路内所有设备列表并遍历,调用每个设备的 determineStateChange 方法判断是否相对于当前电路(自身)处于连通状态。只要有一个设备不连通,则整个串联电路相对于给定设备 comparedEntity 就判定为不连通(返回 false);只有所有设备都连通,才返回 true,以此判断整个串联电路与外部给定设备的连通性状态。

并联电路类 ParallelCircuit
功能概述:代表并联电路结构,负责管理并联电路中的设备连接、状态更新以及参数计算等功能。该类继承自 Circuit 抽象类,实现了与并联电路相关的特定逻辑。
主要方法及逻辑:
updateResistance():用于更新并联电路的总电阻值。首先判断整个并联电路相对于自身是否连通,如果不连通,则将总电阻设为极大值表示断路;若连通,则遍历电路内各设备(通过 deviceMap),对于状态满足条件(通过 determineStateChange 判断)的设备,根据其电阻值按照并联电阻计算公式(通过累加各支路电阻的倒数来计算总电阻的倒数,最后再取倒数得到总电阻)计算总电阻。在计算过程中,会考虑边界情况(如某个支路电阻为 0 则总电阻为 0 等)进行相应处理,以确保总电阻计算的准确性。
updateVoltage():重写 Circuit 类的抽象方法。遍历电路中的各设备,对于不是断路状态(通过判断设备相关状态,如假设串联电路的 state 能反映其断路情况,可能需要结合实际更严谨判断)的设备,将其电压设为并联电路的总电压(currentVoltage)。这是基于并联电路各支路电压相等的原理,实现对各设备电压的设置。
updateCurrent():重写 Circuit 类的抽象方法。遍历电路内各设备,根据并联电路总电阻以及各设备自身电阻情况,运用欧姆定律来计算每个设备上通过的电流值。对于总电阻极小时,根据设备自身电阻进一步判断分配电流,确保电流在各支路中的合理分配。
updatePinVoltage():重写 Circuit 类的抽象方法。遍历电路中的所有设备,将每个设备的输入电压(inputVoltage)和输出电压(outputVoltage)都设为并联电路的总输入输出电压,以保证并联电路中各设备的电压一致性。
determineStateChange(ElectricalEntity comparedEntity):重写 Circuit 类方法。通过获取电路内所有设备列表并遍历,调用每个设备的 determineStateChange 方法判断是否相对于当前电路(自身)处于连通状态。只要有一个设备连通,则整个并联电路相对于给定设备 comparedEntity 就判定为连通(返回 true),以此确定并联电路与外部给定设备的连通性状态。
比较器类 EntityComparator
功能概述:用于定义设备列表排序的规则,实现了 Comparator 接口的 compare 方法,以便对设备列表进行排序,满足特定的输出顺序要求。
主要方法及逻辑:
compare(ElectricalEntity entity1, ElectricalEntity entity2):实现接口方法。首先获取两个设备对象(entity1 和 entity2)编号字符串的首字符,然后查找其在预定义的设备类型顺序列表中的索引位置,按照这个索引位置来比较先后顺序。如果索引不同,则根据索引大小返回差值确定顺序;如果索引相同(即设备类型首字母相同),则按照设备编号字符串的字典序(通过 compareTo 方法)来进一步比较确定顺序。通过这种方式,实现整个列表按照设定规则的排序,确保设备信息输出时具有统一的顺序。

二极管类 Diode
功能概述:模拟电路中的二极管元件,具有正向导通、反向截止的电路特性。该类继承自 ElectricalEntity 类,并实现了与二极管特性相关的逻辑。
主要成员变量:
isForward:布尔值,用于标记二极管是否处于正向状态,初始化为 false。
主要方法及逻辑:
determineStateChange(ElectricalEntity comparedEntity):重写父类方法。根据输入电压与二极管的连接方向判断其状态。如果是正向连接且有电压输入,返回 true,表示导通;否则返回 false,表示截止。
calculateVoltage(Circuit circuit):重写父类方法。如果二极管处于导通状态(isForward 为 true),根据电路情况计算其两端电压;如果处于截止状态,则输出电压为 0。
updatePinVoltageBasedOnState(Circuit circuit):重写父类方法。根据二极管的导通或截止状态,更新其引脚电压信息。导通时按照正常电路逻辑更新,截止时将输入输出电压设为 0。
电路模拟系统主类 CircuitSimulationSystem
功能概述:作为整个电路模拟系统的入口点,负责协调各个环节的工作流程,包括输入读取、设备与电路创建、状态计算与更新以及最终的输出展示等,确保整个模拟过程的顺利进行。
主要方法及逻辑:
startSimulation():程序的主要执行方法。通过标准输入流按行读取用户输入的信息,直至遇到 “end” 标志。然后依据输入格式判断输入类型,分类处理。通过正则表达式或分割等技术提取设备信息,创建设备对象,并将其添加到相应的电路结构中。解析连接信息,构建电路连接关系,按格式处理控制调节信息改变设备状态。
calculateAndUpdateStates():调用各个电路对象的状态更新、电压计算、电流计算等方法,基于初始状态与电路连接情况设置初始管脚电压并判断电流是否超限。接收调节信息后,依据电路知识多次迭代更新电路状态。
displayResults():将所有设备进行排序(通过 EntityComparator),然后遍历设备列表,调用每个设备的 displayInfo() 方法,按规定格式输出设备信息。若检测到短路情况,则输出特定提示 “short circuit error”。
handleExceptions():针对输入不符合格式及运行时可能出现的异常,如数学计算溢出、非法参数值等,分别进行捕获和处理。通过合理的提示信息告知用户异常情况,保障程序的稳定运行。

改进建议

  细化类职责:当前部分类的职责不够单一,承担了过多不同类型的功能。例如,Series 类不仅管理串联电路的设备列表和状态,还包含复杂的状态更新逻辑。建议将与设备管理、状态更新等不同职责的代码分离到不同的方法或类中,使得每个类专注于一个核心功能,提高代码的内聚性。
  提取公共方法:在多个类中存在相似的代码片段,如设备属性的初始化、某些计算逻辑等。可以将这些公共代码提取到一个独立的工具类中,或者作为基类的公共方法,避免重复代码,提高代码的复用性。
  使用设计模式:考虑引入合适的设计模式来优化代码结构。例如,使用工厂模式来创建不同类型的设备对象,这样可以将对象创建的逻辑集中管理,提高代码的可维护性和扩展性。同时,在处理电路连接和控制逻辑时,可以借鉴责任链模式或命令模式,使代码更加灵活和易于扩展。

  增强输入验证:目前对用户输入的验证较为简单,仅验证了输入的前缀和部分格式。建议对输入的内容进行更全面的验证,包括设备标识符的唯一性、引脚编号的合理性、控制指令的参数范围等。对于不符合要求的输入,应给出详细的错误提示信息,帮助用户快速定位和解决问题。
  异常处理机制:在输入处理过程中,应增加更完善的异常处理机制。当输入无法解析或不符合预期时,应捕获异常并进行适当的处理,避免程序因异常而崩溃。可以定义自定义异常类,以便更好地分类和处理不同类型的输入错误。
  输入规范化:在处理输入之前,对输入进行规范化处理,例如去除多余的空格、统一大小写等,以提高输入的一致性和准确性,减少因输入格式不一致而导致的错误。
电路状态更新逻辑方面
  优化状态更新算法:在 Series 类和 Parallel 类的状态更新方法中,除了减少遍历次数外,还可以考虑使用更高效的算法来计算电路状态。例如,可以预先计算和存储一些中间结果,避免重复计算,从而提高状态更新的效率。

  抽象和接口的应用:进一步利用抽象类和接口来提高代码的复用性和扩展性。例如,可以定义一个 ElectricalCalculation 接口,包含各种电路计算方法,让不同的电路类(如 Series 和 Parallel)实现该接口,这样可以在不同的电路场景中复用这些计算方法。

踩坑心得

  起初,对于设备和电路的抽象类设计不够清晰,没有充分发挥抽象类和接口的优势。例如,在定义 Equipment 抽象类时,部分方法的抽象程度不够合理,导致子类在实现这些方法时出现了一些混乱和重复的代码。这使得整个代码结构不够清晰,维护起来也较为困难。
改进措施:重新审视抽象类中的方法,将那些具有共性且与子类具体实现无关的行为抽象成更纯粹的抽象方法,让子类能够更加明确地专注于自身特性的实现,同时增强了代码的扩展性和可维护性。
  一些类承担了过多的职责,如 Series 类不仅负责串联电路的连接管理,还包含了复杂的状态更新和参数计算逻辑。这使得 Series 类变得庞大且难以理解,一旦出现问题,调试起来非常耗时。
改进措施:将 Series 类中的不同职责拆分成多个更小的方法,甚至可以考虑将部分相关逻辑提取到独立的辅助类中,使每个类专注于一项核心职责,遵循类职责单一性原则,提高代码的可读性和可维护性。
  在更新串联电路状态时,需要考虑多种设备(如开关、互斥开关、嵌套电路等)的状态组合,导致状态判断逻辑极其复杂,容易出现遗漏和错误。例如,在判断串联电路是否导通时,由于没有清晰地梳理各种设备状态之间的关系,最初的代码在某些情况下会得出错误的结果。
改进措施:采用更清晰的逻辑结构和状态机模式来处理电路状态的更新。通过定义明确的状态转换规则和条件,使状态判断更加直观和准确,减少了错误的发生概率。
  对用户输入的格式验证仅做了简单的前缀判断和部分正则表达式匹配,对于一些边缘情况和非法输入的处理不够完善。例如,当用户输入的设备标识符格式错误或者连接信息不完整时,程序可能会出现异常或产生错误的结果,导致系统的稳定性和准确性受到影响。
改进措施:完善输入格式验证机制,增加对各种可能出现的非法输入情况的检查,并给出详细的错误提示信息,引导用户正确输入。同时,对输入数据进行更严格的合法性检查,确保输入数据符合电路模拟的实际要求。
  在处理输入数据时,没有充分考虑数据的完整性。例如,在构建电路连接关系时,如果用户输入的连接信息缺失或不完整,可能会导致部分设备未正确连接到电路中,从而影响电路的正常运行和状态计算。
改进措施:在输入处理阶段增加对数据完整性的检查逻辑,确保所有必要的设备信息和连接信息都已完整提供。对于不完整的数据,及时提示用户补充完整,避免因数据缺失而引发的潜在问题。
  在多个地方存在相似的代码逻辑,例如在不同设备类中对电阻值的获取和计算、设备状态的判断以及一些类似的电压电流计算方法等,都存在大量的重复代码。这不仅增加了代码量,还使得代码的维护变得困难,一旦需要对这些重复逻辑进行修改,就需要在多个地方进行同步修改,容易出现遗漏和不一致的情况。
改进措施:提取公共的代码逻辑到独立的工具类或方法中,通过参数化和抽象化这些公共方法,使其能够在不同的类和场景中复用。这样不仅减少了代码的冗余,还提高了代码的可维护性和可扩展性,当需要对公共逻辑进行修改时,只需要在一处进行修改即可。
  整个代码的模块化程度不够高,各个功能模块之间的耦合度较强。例如,电路的构建、状态更新和输出显示等功能之间的界限不够清晰,相互依赖较多,导致在修改一个模块时,可能会影响到其他模块的正常运行,增加了代码的维护成本和出错的风险。
改进措施:对代码进行更细粒度的模块化划分,明确各个模块的职责和接口,降低模块之间的耦合度。通过合理的接口设计和依赖注入等方式,使各个模块能够独立开发、测试和维护,提高了代码的可复用性和可维护性。

总结

我觉得完成这次作业要耗费的时间和脑细胞都很好,凭我自己很难做出来,只能通过不断地请教同学,在跌倒和跌倒的循环里,提升自己的能力,虽然分数不高,但我觉得已经足够了。

学期总结

这个说长不长说短不短,让我觉得十分艰难的学期终于要过去了。大三上学期和以往发生了翻天覆地的变化,我最喜欢的水课没了,全是专业课,每门课都有很难的作业,比如java这门课的大作业,和zigbee的实验课等等,实战非常多 我们不仅需要学习书本的知识,还要具备动手和思考的能力,颠覆了我们中学时代的学习思维。但是,伴随成长痛的就是学习能力的提升,和代码能力的提升,比如现在为了通过考试,我们大多数人两天就能学完一门课,这种速成方法在真正的计算机领域却不适用,就像java的大作业,只有做过了才知道多不简单。
光是听老师讲课是做不出来的,这也验证了在大学拥有源源不断地自学能力和一颗追求进步地心是多么重要。我认为这是我做的不好地地方,我常常点到为止不愿意付出全力,这是不对的,我希望未来我也能成为一个努力的人。
下个学期虽然没有面向对象编程的课了,没有害怕的大作业了,但是其他“java”也随之而来,总之加油吧

posted @ 2024-12-28 17:01  嘻嘻嘻嘻xixi  阅读(52)  评论(0)    收藏  举报