题目集7~8的总结
一、前言
1、题目集7是第三次家居强电电路模拟程序。
(1)知识点
在上一次的基础上增加了互斥开关,互斥开关只有两种状态:开关接往上面的2号引脚、接往下面的3号引脚。开关每次只能接通其中一个分支引脚,而另一个分支引脚处于断开状态。为避免短路,互斥开关设置了限流电阻,12引脚之间默认电阻为5,13引脚之间默认电阻为10。还增加了受控窗帘,不考虑室外光照强度和室内空间大小等因素,窗帘受室内灯光的光照强度控制。本次迭代考虑多个并联电路串联在一起的情况。
(2)题量
只有一道题,题量适中。
(3)难度
引入多条并联电路串联起来,难度增加。互斥开关可以出现在两条电路中。
2、题目集8是第四次家居强电电路模拟程序
(1)知识点
在上一次的基础上增加了二极管,增加二极管元件,其电路特性为:正向导通,反向截止;其电器符号如图4所示,当电流从左至右流过时,二极管导通”conduction”,电阻为0;电流从右至左流动时,二极管截止”cutoff”,电阻无穷大,相当于开关打开。增加管脚电压的显示,在输出每个电器的状态信息后,再依次输出该电器每个管脚的电压。电器在工作时,过大的电流会引起电器过热,从而烧坏电路。本次迭代,每个元器件都有最大电流的设置,当实时电流超过最大电流时,在该电器输出信息的最后加入提示“exceeding current limit error”,与前面的信息之间用英文空格分隔。
(2)题量
只有一道题,题量适中。
(3)难度
引入并联电路里面有并联电路,难度增加,并且需要输出引脚电压,需要计算电流。
二、第三次家居强电电路模拟程序
1.需求分析
增加了互斥开关,互斥开关只有两种状态:开关接往上面的2号引脚、接往下面的3号引脚。开关每次只能接通其中一个分支引脚,而另一个分支引脚处于断开状态。为避免短路,互斥开关设置了限流电阻,12引脚之间默认电阻为5,13引脚之间默认电阻为10。互斥开关的默认状态为1、2引脚接通,1、3引脚断开。互斥开关可以反过来接入电路,即汇总引脚接往接地端,两个分支引脚接往电源端。
本次迭代模拟一种受控窗帘:受控窗帘的电路符号为S,其最低工作电压为50V,电压达到或超过50V,窗帘即可正常工作,不考虑室外光照强度和室内空间大小等因素,窗帘受室内灯光的光照强度控制。
本次迭代线路中可以包含多个串联起来的并联电路。
2.程序分析
Device (抽象类)
作用: 作为所有设备的父类,定义设备的通用属性。
数据成员:
name: 设备名称。
id: 设备编号。
resistance: 电阻。
potential: 电势。
方法成员:
getName(): 获取设备名称。
getId(): 获取设备编号。
setId(int id): 设置设备编号。
ControlDevice (抽象类,继承自Device)
作用: 用于定义控制设备的通用行为。
数据成员: 无新增。
方法成员:
setState(String num): 抽象方法,用于设置设备状态。
Switch (继承自ControlDevice)
作用: 模拟开关的状态(开/关)。
数据成员:
state: 开关状态,true为关闭,false为开启。
方法成员:
isState(): 获取开关状态。
getState(): 返回开关状态的字符串形式。
setState(String num): 切换开关状态。
MutexSwitches (继承自ControlDevice)
作用: 模拟互斥开关。
数据成员:
state: 开关状态。
pin: 引脚信息,用于区分。
方法成员:
isState(): 获取开关状态。
getState(): 返回开关状态的字符串形式。
setState(String num): 切换互斥开关状态。
BinningGovernor (继承自ControlDevice)
作用: 模拟分档调速器。
数据成员:
gears: 挡位数(0-3)。
voltage: 输出电压。
方法成员:
getOutputVoltage(double num): 根据挡位计算输出电压。
setVoltage(int voltage): 设置电压。
getGears(): 获取当前挡位。
setGears(int gears): 设置挡位。
setState(String num): 根据输入调节挡位。
ContinuousGovernor (继承自ControlDevice)
作用: 模拟连续调速器。
数据成员:
gears: 调速器挡位(连续)。
voltage: 输出电压。
方法成员:
getOutputVoltage(double num): 根据挡位计算输出电压。
getGears(): 获取当前挡位。
setGears(double gears): 设置挡位。
setState(String num): 根据输入调节挡位。
ControlledDevice (抽象类,继承自Device)
作用: 用于定义受控设备的通用行为。
方法成员:
setPotential(): 抽象方法,用于根据电势更新设备的状态。
Incandescent (继承自ControlledDevice)
作用: 模拟白炽灯。
数据成员:
brightness: 灯的亮度。
方法成员:
getBrightness(): 获取灯的亮度。
setBrightness(int brightness): 设置灯的亮度。
setPotential(): 根据电势计算亮度。
Fluorescent (继承自ControlledDevice)
作用: 模拟日光灯。
数据成员:
brightness: 灯的亮度。
方法成员:
getBrightness(): 获取灯的亮度。
setBrightness(int brightness): 设置灯的亮度。
setPotential(): 根据电势计算亮度。
CeilingFan (继承自ControlledDevice)
作用: 模拟吊扇。
数据成员:
speed: 吊扇的速度。
方法成员:
getSpeed(): 获取速度。
setPotential(): 根据电势计算速度。
Floorfan (继承自ControlledDevice)
作用: 模拟落地扇。
数据成员:
speed: 落地扇的速度。
方法成员:
getSpeed(): 获取速度。
setPotential(): 根据电势计算速度。
ControlledCurtains (继承自ControlledDevice)
作用: 模拟受控窗帘。
数据成员:
proportion: 窗帘的开合比例。
brightness: 受控灯亮度。
方法成员:
setBrightness(int brightness): 设置亮度。
getProportion(): 获取窗帘的开合比例。
setPotential(): 根据电势和亮度计算窗帘开合状态。
Concatenation (继承自Device)
作用: 模拟串联电路。
数据成员:
tandem: 用于存储串联的设备。
方法成员:
save(String num, Device s): 保存设备到串联电路中。
getTandem(): 获取串联设备列表。
Parallel (继承自Device)
作用: 模拟并联电路。
数据成员:
circuit: 用于存储并联的串联电路。
方法成员:
save(String num, Concatenation s): 保存串联电路到并联中。
Output
作用: 计算和输出整个电路的状态。
数据成员:
各类设备列表(如switches, binning, continuous等)。
voltage: 当前电路电压。
concatens: 总串联电路。
方法成员:
concatensistance(Concatenation concat): 计算串联电路总电阻。
parallelsistance(Parallel parallel): 计算并联电路总电阻。
setresistance(): 计算整个电路的电阻。
Voltage(Device devices): 根据设备电阻分配电压。
control(): 控制设备状态。
setSwitches(): 初始化设备列表。
output(): 按要求输出设备状态。
Main 类
方法成员:
public static void main(String[] args): 主程序,负责从用户输入读取数据并执行相应操作
总结
数据成员(属性):每个设备类通常有一个 name 和 id,还有根据设备类型不同的特定属性(如开关的 state,调速器的 gears,灯具的 brightness 等)。
方法成员(方法):设备类包含用于设置设备状态、获取设备属性值、控制设备行为的方法。在 Output 类中,主要的方法是 setSwitches()、control() 和 output(),用于管理设备的状态、控制电压输出、以及输出设备状态。
3.类图

4.关键代码讲解
if(str.startsWith("H")){
for(Map.Entry<String, Device> entry:concaten.entrySet()){
if(entry.getValue().getName().startsWith("T")) {
for (Map.Entry<String, Device> entry1 : ((Concatenation) entry.getValue()).tandem.entrySet()) {
if (entry1.getValue().getName().equals(str)) {
((MutexSwitches) entry1.getValue()).setState(str);
}
}
}
}
}
改变互斥开关状态,遍历串联电路,查找互斥开关,改变状态。
if (entry.getValue().getName().startsWith("H")) {
int nu = 0;
for (int i = 0; i < mutex.size(); i++) {
if (mutex.get(i).name.equals(entry.getValue().getName())) {
nu = 1;
break;
}
}
if (nu == 0) {
mutex.add((MutexSwitches) entry.getValue());
}
}
该代码片段主要用于处理设备集合中的互斥开关(MutexSwitches)设备,确保每个以 "H" 开头的设备名称在 mutex 列表中只添加一次。
遍历 mutex 列表,查看是否已有相同名称的设备存在。
使用标志变量 nu 来记录是否找到匹配的设备。如果 mutex 列表中尚不存在该设备(nu == 0),则将其添加到 mutex 列表中。
5.采坑心得
(1)遇到的问题一

测试点
#T3:[VCC B2-1] [B2-2 K1-1] [K1-2 S1-1] [S1-2 H1-1] [H1-3 GND]
#K1
end
输出
@K1:closed
@B2:0
@H1:closed
@S1:100%
一开始我以为互斥开关就一定会有两条,没有考虑它只有一条电路的情况,所以一开始我是存储引脚为2的那个设备。
解决方法:我就不单只储存引脚为2的那个设备,改为设备只储存一次。
(2)遇到的问题二

因为我算并联电阻的时候用串联相乘除以相加,而不是用倒数相加,所以会有精度问题
解决方法:修改代码为倒数相加计算。
(3)遇到的问题三

测试点
#T1:[IN H1-1] [H1-2 D2-1] [D2-2 OUT]
#T2:[IN H1-1] [H1-3 D1-1] [D1-2 OUT]
#M1:[T1 T2]
#T4:[IN K3-1] [K3-2 B2-1] [B2-2 OUT]
#T5:[IN K11-1] [K11-2 B1-1] [B1-2 OUT]
#M2:[T4 T5]
#T3:[VCC K2-1] [K2-2 M1-IN] [M1-OUT M2-IN] [M2-OUT GND]
#K11
#K2
end
输出
@K11:closed
@K2:closed
@K3:turned on
@B1:87
@B2:0
@D1:0
@D2:262
@H1:closed
这个是因为一开始我是按照id的那个顺序输出的,但是他其实是要按字典顺序输出,就像k11要在k2之前输出。
解决方法:修改代码,使得输出顺序是按照字典顺序输出。
6.改进建议
这一次的互斥开关我相当于是把它看为两个开关的计算,那么在下一次迭代时要计算引脚的电压就会有问题,所以我后面应该要把它看为是一个设备。
这一次的代码我没有使用到引脚,而下一次它需要输出引脚的电压,所以到时候也需要增加。
当前代码将检查和添加设备的逻辑直接写在一起,导致代码缺乏复用性。如果其他地方也需要类似的功能(如检查和添加设备到集合中),需要重复实现这些逻辑。可以将其提取为一个独立的方法,提高代码复用性和可维护性。
三、第四次家居强电电路模拟程序
1.需求分析
增加管脚电压的显示,在输出每个电器的状态信息后,再依次输出该电器每个管脚的电压。
电器在工作时,过大的电流会引起电器过热,从而烧坏电路。本次迭代,每个元器件都有最大电流的设置,当实时电流超过最大电流时,在该电器输出信息的最后加入提示“exceeding current limit error”,与前面的信息之间用英文空格分隔。
如果电路出现无穷大的电流造成短路,所有元器件信息不输出,仅输出提示“short circuit error”
本次迭代考虑并联电路中包含并联电路的情况,即构成并联电路的串联电路可以包含别的并联电路。
增加二极管元件,其电路特性为:正向导通,反向截止。
2.程序分析
抽象类 Device
作用:Device 是所有电路设备的基类,提供公共属性和方法,是一个抽象类,不能直接实例化。
数据成员
String name:设备名称。
double resistance:电阻值。
double current:电流。
double electricity:电量。
double potential:设备的电压。
double potential1 和 double potential2:设备两端引脚的电压。
String pin1 和 String pin2:设备两端引脚名称。
int location:设备在电路中的位置。
boolean decide:辅助标志位,标记某些设备的特定状态。
方法成员
构造方法:
Device():默认构造方法。
Device(String name, String pin1, String pin2):带参数的构造方法,用于初始化设备名称和引脚。
String getName():返回设备名称。
类关系
被其他设备类继承。
抽象类 ControlDevice
作用:ControlDevice 是控制设备的基类,派生出具体的控制设备(如开关、调速器等)。
数据成员
继承自 Device,无新增。
方法成员
构造方法:
ControlDevice():默认构造方法。
ControlDevice(String name, String pin1, String pin2):带参数的构造方法。
抽象方法 void setState(String num):设置设备状态的方法。
类关系
继承自 Device。
被具体控制设备(如 Switch, BinningGovernor 等)继承。
类 Switch
作用:表示一个开关,可以通过 state 属性控制电路通断。
数据成员
boolean state:开关的开/关状态。
方法成员
构造方法:
Switch():默认构造方法。
Switch(String name, String pin1, String pin2):初始化开关名称和引脚。
boolean isState():返回开关状态。
String getState():返回状态描述字符串("closed" 或 "turned on")。
void setState(String num):切换开关状态。
String toString():返回开关的状态及相关电压、电流信息。
类关系
继承自 ControlDevice。
类 MutexSwitches
作用:表示互斥开关,用于控制多个电路的互斥逻辑。
数据成员
boolean state:开关状态。
String pin3:第三引脚名称。
double potential3:第三引脚的电势。
double electricity1:通过第三引脚的电流。
方法成员
构造方法:
MutexSwitches():默认构造方法。
MutexSwitches(String name, String pin1, String pin2):初始化互斥开关名称和引脚。
boolean isState():获取状态。
String getState():返回状态描述字符串。
void setState(String num):切换状态。
String toString():返回互斥开关的状态及相关信息。
类关系
继承自 ControlDevice。
类 BinningGovernor
作用:表示分档调速器,可以通过设置档位来调节输出电压。
数据成员
int gears:当前档位。
double voltage:输出电压。
方法成员
构造方法:
BinningGovernor():默认构造方法。
BinningGovernor(String name, String pin1, String pin2):初始化调速器名称和引脚。
double getOutputVoltage(double num):根据档位和输入电压计算输出电压。
void setVoltage(int voltage):设置输出电压。
int getGears():获取档位。
void setGears(int gears):设置档位。
void setState(String num):根据输入调整档位。
String toString():返回档位状态及相关信息。
类关系
继承自 ControlDevice。
类 ContinuousGovernor
作用:表示连续调速器,支持精确调节输出电压。
数据成员
double gears:当前档位。
double voltage:输出电压。
方法成员
构造方法:
ContinuousGovernor():默认构造方法。
ContinuousGovernor(String name, String pin1, String pin2):初始化调速器名称和引脚。
double getOutputVoltage(double num):根据档位和输入电压计算输出电压。
void setGears(double gears):设置档位。
double getGears():获取当前档位。
void setState(String num):设置档位。
String toString():返回调速器的状态及相关信息。
类关系
继承自 ControlDevice。
抽象类 ControlledDevice
作用:ControlledDevice 是所有受控设备的基类,派生出具体的受控设备(如灯具、电风扇等)。
数据成员
继承自 Device,无新增。
方法成员
构造方法:
ControlledDevice():默认构造方法。
ControlledDevice(String name, String pin1, String pin2):初始化名称和引脚。
抽象方法 void setPotential():设置设备的电势。
类关系
继承自 Device。
被具体受控设备(如 Incandescent, Fluorescent 等)继承。
类 Incandescent
作用:表示白炽灯,根据电压计算亮度。
数据成员
double brightness:灯的亮度。
方法成员
构造方法:
Incandescent():默认构造方法。
Incandescent(String name, String pin1, String pin2):初始化名称和引脚。
double getBrightness():获取亮度。
void setBrightness(double brightness):设置亮度。
void setPotential():根据电压计算亮度。
String toString():返回灯的状态及相关信息。
类关系
继承自 ControlledDevice。
类 Fluorescent
作用:表示日光灯。
数据成员
double brightness:灯的亮度。
方法成员
构造方法:
Fluorescent():默认构造方法。
Fluorescent(String name, String pin1, String pin2):初始化名称和引脚。
double getBrightness():获取亮度。
void setBrightness(int brightness):设置亮度。
void setPotential():根据电压计算亮度。
String toString():返回灯的状态及相关信息。
类关系
继承自 ControlledDevice。
类 CeilingFan
作用:表示吊扇,根据电压计算速度。
数据成员
int speed:风扇速度。
方法成员
构造方法:
CeilingFan():默认构造方法。
CeilingFan(String name, String pin1, String pin2):初始化名称和引脚。
int getSpeed():获取速度。
void setPotential():根据电压计算速度。
String toString():返回风扇状态及相关信息。
类关系
继承自 ControlledDevice。
类 Floorfan
作用:表示落地扇,与吊扇类似。
数据成员
int speed:风扇速度。
方法成员
同 CeilingFan。
类关系
继承自 ControlledDevice。
类 ControlledCurtains
作用:表示智能窗帘,控制窗帘的开合比例。
数据成员
String proportion:开合比例。
double brightness:窗帘的亮度。
方法成员
构造方法:
ControlledCurtains():默认构造方法。
ControlledCurtains(String name, String pin1, String pin2):初始化名称和引脚。
void setBrightness(double brightness):设置亮度。
String getProportion():获取开合比例。
void setPotential():根据亮度和电压计算开合比例。
String toString():返回窗帘状态及相关信息。
类关系
继承自 ControlledDevice。
类 Diode
作用:表示二极管。
数据成员
boolean state:二极管状态(导通或截止)。
方法成员
构造方法:
Diode():默认构造方法。
Diode(String name, String pin1, String pin2):初始化名称和引脚。
String getState():获取状态描述字符串。
void setPotential():根据电压计算状态。
String toString():返回二极管状态及相关信息。
类关系
继承自 ControlledDevice。
类 Concatenation
作用:表示串联电路。
数据成员
Map<String, Device> tandem:存储串联的设备。
方法成员
构造方法:
Concatenation():默认构造方法。
Concatenation(String name):带名称的构造方法。
void save(String num, Device s):将设备保存到串联电路中。
Map<String, Device> getTandem():返回串联设备列表。
类关系
继承自 Device。
与其他 Device 关联。
类 Parallel
作用:表示并联电路。
数据成员
Map<String, Concatenation> circuit:存储并联的串联电路。
方法成员
构造方法:
Parallel():默认构造方法。
Parallel(String name):带名称的构造方法。
void save(String num, Concatenation s):将串联电路保存到并联电路中。
类关系
继承自 Device。
与 Concatenation 关联。
类 Output
作用:管理电路的计算、控制和输出。
数据成员
double voltage:输入电压。
各种设备列表(如 List
Map<String, Device> concatens:存储总串联设备。
方法成员
void concatensistance(Concatenation concat):计算串联电阻。
void parallelsistance(Parallel parallel):计算并联电阻。
void setresistance():计算整个电路的总电阻。
void Voltage(Device devices):计算电压分配。
void Electricity(Device devices):计算电流分配。
void PinVoltage(Device devices):计算设备引脚电压。
void control():控制整个电路的工作状态。
void setSwitches():将设备分类存储。
void output():输出设备的状态。
类关系
与 Device, Concatenation, 和 Parallel 关联或依赖。
Main 类
方法成员:
public static void main(String[] args): 主程序,负责从用户输入读取数据并执行相应操作
总结
数据成员(属性):每个设备类通常有一个 name 和 id,还有根据设备类型不同的特定属性(如开关的 state,调速器的 gears,灯具的 brightness 等)。
方法成员(方法):设备类包含用于设置设备状态、获取设备属性值、控制设备行为的方法。在 Output 类中,主要的方法是 setSwitches()、Electricity()、PinVoltage()、control() 和 output(),用于管理设备的状态、计算电流、计算引脚电压、控制电压输出、以及输出设备状态。
3.类图

4.关键代码讲解
for(Map.Entry<String,Device>entry:((Concatenation)devices).tandem.entrySet()){
if (devices.resistance == 0) {
entry.getValue().electricity = 0;
} else if(devices.resistance == -1) {
entry.getValue().electricity = devices.electricity;
}else{
entry.getValue().electricity = devices.potential / devices.resistance;
}
Electricity(entry.getValue());
}
计算电流,如果电路断路,设备电流为0,如果电阻为0,设备电流等于电路电流,否则电路电流等于电压除以电阻。
if(entry.getValue().name.startsWith("K")){
if(!((Switch)entry.getValue()).state){
if(num!=1){
entry.getValue().location++;
}
num++;
entry.getValue().decide = true;
}
}
计算引脚电压,计算一条路中有多少个是断开设备,然后标记第1个断开设备和最后一个断开设备,之后赋值第1个部分电路的引脚电压直接等于左边电路电压,最后一个部分电路的引脚电压就直接等于右边电路电压。
5.采坑心得
(1)遇到的问题一

当并联电路中有多条都是只有导线并且关闭时,那么电流需要平分。
解决方法:计算并联电路中有多条这样的电路,然后电流除以他们,计算出每条电路中的电流。
(2)遇到的问题二

一开始我理解错了题目,以为是有短路的电路,那么就是输出短路信息,其实不然他是需要主电路有短路,他才输出短路消息。
解决方法:所以我将判断短路的消息从遍历一整个电路改为查找主电路。
6.改进建议
(1)问题
串联和并联电路的电阻、电流等计算逻辑中存在多次重复遍历,效率较低。
改进建议
缓存结果:对于复杂电路的计算,使用缓存存储中间结果,避免重复计算。
并行计算:对于大型电路,采用多线程或并行流分段计算不同分支的电阻、电流。
(2)问题
电路状态的控制逻辑复杂且分散,尤其是 control() 方法过于庞大,职责不单一。
改进建议
职责分离:将 control() 的不同功能(如设置电压、电流、开关状态等)拆分为多个小方法。
事件驱动模型:使用观察者模式,当开关或调速器状态变化时,自动更新相关设备状态,避免手动调用。
(3)问题
目前 Output 类中通过手动区分设备类型(startsWith)将设备分类,逻辑复杂且容易出错。
改进建议
使用多态:将不同设备的逻辑分离到各自的类中,通过设备类型动态调用相应的方法。
统一管理设备列表:
使用 Map<Class<? extends Device>, List
通过 instanceof 或直接按类型存储,避免手动判断字符串前缀。
五、总结
通过三次题目集的实践,学会了如何将复杂的系统分解为多个独立的类,并合理分配每个类的职责。例如,在本次题目中,将电路中的设备分为 Device、ControlDevice 和 ControlledDevice 等抽象基类,并通过具体类实现不同功能。充分理解了继承的意义,尤其是通过抽象类和接口的使用,简化了通用逻辑的实现。例如,ControlDevice 和 ControlledDevice 的设计使得同类设备可以通过多态实现统一管理。深刻体会到封装的重要性,通过限制数据成员的直接访问,确保了系统的安全性和稳定性。
本阶段作业中,我学会了根据问题需求选择合适的数据结构。例如,在本题中,使用 Map 来存储串联和并联的设备关系,使设备的检索和管理更加高效。在电阻、电流、电压计算等问题中,通过递归和迭代的方法,设计出了逻辑清晰且高效的算法。这种递归逻辑对于解决树形或图形结构问题非常有帮助。在控制设备(如开关、调速器)和受控设备(如灯、风扇)的逻辑处理中,应用了类似策略模式的思想,将不同的设备操作逻辑独立封装。通过设备状态变化引发电路状态更新的逻辑,初步接触到事件驱动设计思路,虽然未完全实现,但提供了很好的思考方向。逐步理解了命名规范、类的职责分离、注释的重要性。例如,代码中通过方法命名 (setPotential, getOutputVoltage) 明确了功能,增强了代码的可读性。电路问题的复杂性使得人工验证变得困难,逐步认识到单元测试和集成测试对于验证系统行为的必要性。
实践中发现的问题:多个类中存在重复逻辑,导致代码量较大,修改时容易遗漏。过长的方法(如 control 和 output 方法)导致代码难以理解和维护。目前代码基本是通过手动输入测试逻辑,没有构建完善的单元测试体系。改进方向:引入工具类或抽象方法,将重复代码提取为通用模块。使用面向对象的设计模式进一步优化代码结构,减少耦合。为复杂功能编写单元测试,确保逻辑的正确性。
通过本阶段的学习,对面向对象编程的核心思想有了更深刻的理解,同时在复杂问题的分解与实现上也得到了很大的锻炼。这些经验将在后续的学习和开发中发挥重要作用。我理解了类与类之间的关系设计,合理使用继承、多态和封装来简化复杂系统。在解决递归计算和设备状态处理等问题时,提升了算法设计与实现能力。逐渐从单一功能实现过渡到考虑代码的复用性、扩展性和维护性。通过一次次的作业实践,认识到代码质量的重要性,并能主动优化已有逻辑。
学期总结
转眼间,一个学期的学习生活已经接近尾声。回顾这一学期,我收获满满,也有许多感触想要表达。这一学期,通过课程的学习和实践,我在编程能力、问题解决思维以及团队协作等方面有了显著提升。从最初对面向对象编程的陌生,到逐步掌握类的设计、继承与多态等核心思想,我的逻辑思维能力得到了极大的锻炼。同时,在实践中,我体会到算法和数据结构的重要性,学会了用递归、图结构等方法来解决复杂问题。在面对设计模式的初步探索中,我也认识到编程不仅仅是实现功能,更是一种系统性的设计艺术。此外,课程中的作业和项目让我明白了代码规范性和测试的重要性,也让我逐渐养成了书写清晰、易于维护的代码的好习惯。除了技术上的成长,我觉得更大的收获来自心态上的变化。一开始面对繁杂的任务时,我也有过迷茫和焦虑,但一次次的努力和坚持让我逐渐明白,只要付出耐心,理清思路,很多问题其实并没有想象中那么困难。每一次调试成功的瞬间,都会让我充满成就感,而这些点滴的累积也让我对未来的学习充满信心。心里想说的话很简单——感谢老师的辛勤付出,让我们在理论与实践中成长;也感谢同学们的陪伴和帮助,让学习的过程不再孤单。这个学期虽然辛苦,但我从中收获的不仅是知识,更是对自己的一份肯定和成长的喜悦。在未来的学习中,我会带着这份热情和坚持,继续努力,不断超越自己!
浙公网安备 33010602011771号