OOP 7-8次作业总结
23201636-曾繁榕
目录
- 前言
- 设计与分析
- 踩坑心得
- 改进建议
- 总结
前言
本次作业知识点:类与对象的复杂使用,继承的进阶使用,各种接口的实现,复杂电路的处理,一个对象多个数据的储存输出,还主要考察了正则表达式的运用,字符串的提取分割;
个人体会:本次作业难度较难,题量适中,但有些比较复杂的类设计上容易出现错误;第八次作业加上两端引脚电压以及复杂电路处理,难度大大提升
大题源码
第七次作业
家具电路模拟程序-3
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.Collections;
import java.util.Comparator;
class Device{
protected String id;
protected int state;
double vt;
int gear;
double gea;
double r;
int brightness;
int bri;
public Device(String id) {
this.id = id;
this.state = 0;
}
public void updateState(){
}
public String getStatus(){
return "";
}
}
class Switch extends Device {
public Switch(String id) {
super(id);
}
public void updateState() {
state = state == 0 ? 1 : 0;
}
public String getStatus() {
return state == 0 ? "turned on" : "closed";
}
}
class Hswitch extends Device {
public Hswitch(String id) {
super(id);
state = 1;
}
public void updateState() {
state = state == 0 ? 1 : 0;
}
public void setR(){
if(gear==2)
r = 5;
else{
r = 10;
}
}
public String getStatus() {
return state == 0 ? "turned on" : "closed";
}
}
class Fcontrol extends Device {
private final int maxGear;
public Fcontrol(String id, int maxGear) {
super(id);
this.maxGear = maxGear;
}
public void updateState() {
if(gear<maxGear&&state==1)
gear++;
else if(gear>0&&state==0)
gear--;
}
public String getStatus() {
return String.valueOf(gear);
}
}
class Lcontrol extends Device {
private double gear;
public Lcontrol(String id) {
super(id);
}
public void updateState() {
gear = gea;
}
public String getStatus() {
return String.format("%.2f", gear);
}
}
class Blight extends Device {
// private int brightness;
public Blight(String id) {
super(id);
r = 10;
}
public void updateState() {
if(vt<10)
this.brightness = 0;
else if(vt<220)
this.brightness = 50 + (int) (5.0/7.0*(vt-10));
else if(vt>=220)
this.brightness = 200;
}
public String getStatus() {
return String.valueOf(brightness);
}
}
class Light extends Device {
// private int brightness;
public Light(String id) {
super(id);
r = 5;
}
public void updateState() {
if(vt==0)
this.brightness = 0;
else
this.brightness = 180;
}
public String getStatus() {
return String.valueOf(brightness);
}
}
class Scurtain extends Device {
String sta;
public Scurtain(String id) {
super(id);
r = 15;
}
public void updateState() {
if(vt<50){
sta = "100%";
}
else{
if(bri<50)
sta = "100%";
else if(bri<100)
sta = "80%";
else if(bri<200)
sta = "60%";
else if(bri<300)
sta = "40%";
else if(bri<400)
sta = "20%";
else
sta = "0%";
}
}
public String getStatus() {
return sta;
}
}
class Fan extends Device {
int speed;
public Fan(String id) {
super(id);
r = 20;
}
public void updateState() {
if(vt<80)
this.speed = 0;
else if(vt<150)
this.speed = 80 + (int) (4*(vt-80));
else if(vt>=150)
this.speed = 360;
}
public String getStatus() {
return String.valueOf(speed);
}
}
class Afan extends Device {
int speed;
public Afan(String id) {
super(id);
r = 20;
}
public void updateState() {
if(vt<80)
this.speed = 0;
else if(vt<100)
this.speed = 80;
else if(vt<120)
this.speed = 160;
else if(vt<140)
this.speed = 260;
else if(vt>=140)
this.speed = 360;
}
public String getStatus() {
return String.valueOf(speed);
}
}
class M {
double r;
String id;
List<T> ts;
public M(String id) {
this.id = id;
ts = new ArrayList<>();
}
public void add(T t) {
ts.add(t);
}
public void computeR(){
double sum = 0;
for(T t : ts){
// System.out.println(1.0/t.r);
if(t.isClosed()){
sum = sum + 1.0/t.r;
}
}
this.r = (1.0/sum);
}
}
class T {
double r;
String id;
int bri;
double vt;
List<M> ms;
List<T> ts;
List<Device> devices; // 存储电路中的设备
public T(String id) {
this.id = id;
devices = new ArrayList<>();
ms = new ArrayList<>();
ts = new ArrayList<>();
}
public void add(Device device) {
devices.add(device);
}
public void addm(M m) {
ms.add(m);
}
public void addt(T t){
ts.add(t);
}
public void updateState(){
for(Device device : devices){
if(device instanceof Fan)
{
device.vt = 1.0*device.r/r*vt;
device.updateState();
}
else if(device instanceof Afan)
{
device.vt = 1.0*device.r/r*vt;
device.updateState();
}
else if(device instanceof Blight)
{
device.vt = 1.0*device.r/r*vt;
device.updateState();
// brisum = brisum+device.brightness;
}
else if(device instanceof Light)
{
device.vt = 1.0*device.r/r*vt;
device.updateState();
// brisum = brisum+device.brightness;
}
else if(device instanceof Scurtain)
{
device.vt = 1.0*device.r/r*vt;
}
}
}
public boolean isClosed(){
for (Device device : devices){
if(device instanceof Switch){
if(device.state==0)
return false;
}
else if(device instanceof Hswitch){
if(device.state == 0&&device.gear==2||device.state == 1&&device.gear==3)
return false;
}
}
return true;
}
public void computeR(){
for (Device device : devices){
this.r = this.r + device.r;
}
for (M m : ms)
this.r = this.r + m.r;
for(T t : ts)
this.r = this.r + t.r;
}
}
class Circuit {
List<Device> devices; // 存储电路中的设备
public Circuit() {
devices = new ArrayList<>();
}
public void add(Device device) {
devices.add(device);
}
public void updateState(String control) {
}
public void getStatus() {
StringBuilder sb = new StringBuilder();
ArrayList<String> names = new ArrayList<>();
int sum = 0;
devices.sort(new Comparator<Device>()
{
@Override
public int compare(Device d1,Device d2)
{
String id1 = d1.id;
String id2 = d2.id;
return id1.compareTo(id2);
}
});
for (Device device : devices) {
if(device instanceof Switch){
sum++;
// if(sum<=devices.size()-1)
// sb.append("@").append(device.id).append(":").append(device.getStatus()).append("\n");
// else
// sb.append("@").append(device.id).append(":").append(device.getStatus());
System.out.println("@"+device.id+":"+device.getStatus());
}
}
for (Device device : devices) {
if(device instanceof Fcontrol){
sum++;
if(sum<=devices.size()-1)
sb.append("@").append(device.id).append(":").append(device.getStatus()).append("\n");
else
sb.append("@").append(device.id).append(":").append(device.getStatus());
System.out.println("@"+device.id+":"+device.getStatus());
}
}
for (Device device : devices) {
if(device instanceof Lcontrol){
sum++;
if(sum<=devices.size()-1)
sb.append("@").append(device.id).append(":").append(device.getStatus()).append("\n");
else
sb.append("@").append(device.id).append(":").append(device.getStatus());
System.out.println("@"+device.id+":"+device.getStatus());
}
}
for (Device device : devices) {
if(device instanceof Blight){
sum++;
if(sum<=devices.size()-1)
sb.append("@").append(device.id).append(":").append(device.getStatus()).append("\n");
else
sb.append("@").append(device.id).append(":").append(device.getStatus());
System.out.println("@"+device.id+":"+device.getStatus());
}
}
for (Device device : devices) {
if(device instanceof Light){
sum++;
if(sum<=devices.size()-1)
sb.append("@").append(device.id).append(":").append(device.getStatus()).append("\n");
else
sb.append("@").append(device.id).append(":").append(device.getStatus());
System.out.println("@"+device.id+":"+device.getStatus());
}
}
for (Device device : devices) {
if(device instanceof Fan){
sum++;
if(sum<=devices.size()-1)
sb.append("@").append(device.id).append(":").append(device.getStatus()).append("\n");
else
sb.append("@").append(device.id).append(":").append(device.getStatus());
System.out.println("@"+device.id+":"+device.getStatus());
}
}
for (Device device : devices) {
if(device instanceof Afan){
sum++;
if(sum<=devices.size()-1)
sb.append("@").append(device.id).append(":").append(device.getStatus()).append("\n");
else
sb.append("@").append(device.id).append(":").append(device.getStatus());
System.out.println("@"+device.id+":"+device.getStatus());
}
}
for (Device device : devices) {
if(device instanceof Hswitch&&device.gear==2){
sum++;
names.add(device.id);
if(sum<=devices.size()-1)
sb.append("@").append(device.id).append(":").append(device.getStatus()).append("\n");
else
sb.append("@").append(device.id).append(":").append(device.getStatus());
System.out.println("@"+device.id+":"+device.getStatus());
}
else if(device instanceof Hswitch&&device.gear==3){
int x=0;
sum++;
for(int i=0;i<names.size();i++){
if(device.id.equals(names.get(i))){
x=1;
}
}
if(sum<=devices.size()-1&&x==0)
sb.append("@").append(device.id).append(":").append(device.getStatus()).append("\n");
else if(sum<=devices.size()&&x==0)
sb.append("@").append(device.id).append(":").append(device.getStatus());
if(x==0)
System.out.println("@"+device.id+":"+device.getStatus());
}
}
for (Device device : devices) {
if(device instanceof Scurtain){
sum++;
if(sum<=devices.size()-1)
sb.append("@").append(device.id).append(":").append(device.getStatus()).append("\n");
else
sb.append("@").append(device.id).append(":").append(device.getStatus());
System.out.println("@"+device.id+":"+device.getStatus());
}
}
// System.out.println(devices.size());
// return sb.toString();
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Circuit circuit = new Circuit();
T t[] = new T[10];
M m[] = new M[10];
int tn = 0;
int mn = 0;
String regex = "K\\d+-\\d+";
String regex1 = "F\\d+-\\d+";
String regex2 = "L\\d+-\\d+";
String regex3 = "B\\d+-\\d+";
String regex4 = "R\\d+-\\d+";
String regex5 = "D\\d+-\\d+";
String regex6 = "#K\\d+";
String regex7 = "#F\\d+\\+";
String regex8 = "#F\\d+-";
String regex9 = "#L\\d+:.+";
String regex10 = "#T\\d+:.*";
String regex10_ = "T\\d+-IN";
String regex11 = "#M\\d+:.*";
String regex12 = "M\\d+-IN";
String regex13 = "A\\d+-\\d+";
String regex14 = "S\\d+-\\d+";
String regex15 = "H\\d+-\\d+";
String regex16 = "#H\\d+";
Pattern pattern = Pattern.compile("\\[([^\\[\\]]|\\[.*?\\])*\\]");
while (sc.hasNext()) {
String s = sc.nextLine();
if (s.equals("end")) {
break;
}
if(Pattern.matches(regex10,s))
{
String sstr[] = s.split(":");
String id = sstr[0].replace("#","");
t[tn] = new T(id);
Matcher matcher = pattern.matcher(s);
List<String> matchs = new ArrayList<>();
while (matcher.find()){
String match = matcher.group(0);
match = match.trim();
matchs.add(match);
}
for(String match : matchs)
{
// System.out.println(match);
s = match;
s = s.replace("[","");
s = s.replace("]","");
String str[] = s.split(" ");
if(str.length>1&&Pattern.matches(regex15,str[0])){
String str1[] = str[0].split("-");
if(Integer.parseInt(str1[1])!=1){
Hswitch a = new Hswitch(str1[0]);
circuit.add(a);
t[tn].add(a);
a.gear = Integer.parseInt(str1[1]);
a.setR();
}
}
if(str.length>1&&Pattern.matches(regex,str[1])){
String str1[] = str[1].split("-");
Switch k = new Switch(str1[0]);
circuit.add(k);
t[tn].add(k);
}
else if(str.length>1&&Pattern.matches(regex1,str[1])){
String str1[] = str[1].split("-");
Fcontrol f = new Fcontrol(str1[0],3);
circuit.add(f);
t[tn].add(f);
}
else if(str.length>1&&Pattern.matches(regex2,str[1])){
String str1[] = str[1].split("-");
Lcontrol l = new Lcontrol(str1[0]);
circuit.add(l);
t[tn].add(l);
}
else if(str.length>1&&Pattern.matches(regex3,str[1])){
String str1[] = str[1].split("-");
Blight b = new Blight(str1[0]);
circuit.add(b);
t[tn].add(b);
}
else if(str.length>1&&Pattern.matches(regex4,str[1])){
String str1[] = str[1].split("-");
Light r = new Light(str1[0]);
circuit.add(r);
t[tn].add(r);
}
else if(str.length>1&&Pattern.matches(regex5,str[1])){
String str1[] = str[1].split("-");
Fan d = new Fan(str1[0]);
circuit.add(d);
t[tn].add(d);
}
else if(str.length>1&&Pattern.matches(regex13,str[1])){
String str1[] = str[1].split("-");
Afan a = new Afan(str1[0]);
circuit.add(a);
t[tn].add(a);
}
else if(str.length>1&&Pattern.matches(regex14,str[1])){
String str1[] = str[1].split("-");
Scurtain a = new Scurtain(str1[0]);
circuit.add(a);
t[tn].add(a);
}
else if(str.length>1&&Pattern.matches(regex15,str[1])){
String str1[] = str[1].split("-");
if(Integer.parseInt(str1[1])!=1){
Hswitch a = new Hswitch(str1[0]);
circuit.add(a);
t[tn].add(a);
a.gear = Integer.parseInt(str1[1]);
a.setR();
}
}
else if(str.length>1&&Pattern.matches(regex12,str[1])){
String str1[] = str[1].split("-");
for(int i=0;i<mn;i++){
if(m[i].id.equals(str1[0]))
t[tn].addm(m[i]);
}
}
else if(str.length>1&&Pattern.matches(regex10_,str[1])){
String str1[] = str[1].split("-");
for(int i=0;i<tn;i++){
if(t[i].id.equals(str1[0]))
t[tn].addt(t[i]);
}
}
}
// System.out.println(t[tn].r);
tn++;
}
else if(Pattern.matches(regex11,s)){
String str[] = s.split(":");
String id = str[0].replace("#","");
m[mn] = new M(id);
s = str[1].replace("[","");
s = s.replace("]","");
String sstr[] = s.split(" ");
for(int i=0;i<sstr.length;i++){
for(int j=0;j<tn;j++){
if(sstr[i].equals(t[j].id)){
m[mn].add(t[j]);
}
}
}
mn++;
}
s = s.replace("[","");
s = s.replace("]","");
String str[] = s.split(" ");
if(str.length==1&&Pattern.matches(regex6,str[0])){
String ss = str[0].replace("#","");
for(int i=0;i<circuit.devices.size();i++){
if(ss.equals(circuit.devices.get(i).id))
circuit.devices.get(i).updateState();
}
// for(int i=0;i<t[tn-1].devices.size();i++){
// if(ss.equals(t[tn-1].devices.get(i).id))
// t[tn-1].devices.get(i).updateState();
// }
}
else if(str.length==1&&Pattern.matches(regex16,str[0])){
String ss = str[0].replace("#","");
for(int i=0;i<circuit.devices.size();i++){
if(ss.equals(circuit.devices.get(i).id))
circuit.devices.get(i).updateState();
}
}
else if(str.length==1&&Pattern.matches(regex7,str[0])){
String ss = str[0].replace("#","");
ss = ss.replace("+","");
for(int i=0;i<circuit.devices.size();i++){
if(ss.equals(circuit.devices.get(i).id)){
circuit.devices.get(i).state = 1;
circuit.devices.get(i).updateState();
}
}
// for(int i=0;i<t[tn-1].devices.size();i++){
// if(ss.equals(t[tn-1].devices.get(i).id)){
// t[tn-1].devices.get(i).state = 1;
// t[tn-1].devices.get(i).updateState();
// }
// }
}
else if(str.length==1&&Pattern.matches(regex8,str[0])){
String ss = str[0].replace("#","");
ss = ss.replace("-","");
for(int i=0;i<circuit.devices.size();i++){
if(ss.equals(circuit.devices.get(i).id)){
circuit.devices.get(i).state = 0;
circuit.devices.get(i).updateState();
}
}
// for(int i=0;i<t[tn-1].devices.size();i++){
// if(ss.equals(circuit.devices.get(i).id)){
// t[tn-1].devices.get(i).state = 0;
// t[tn-1].devices.get(i).updateState();
// }
// }
}
else if(str.length==1&&Pattern.matches(regex9,str[0])){
String ss[] = str[0].split(":");
double gear = Double.parseDouble(ss[1]);
String sss = ss[0].replace("#","");
for(int i=0;i<circuit.devices.size();i++){
if(sss.equals(circuit.devices.get(i).id)){
circuit.devices.get(i).gea = gear;
circuit.devices.get(i).updateState();
}
}
// for(int i=0;i<t[tn-1].devices.size();i++){
// if(sss.equals(t[tn-1].devices.get(i).id)){
// t[tn-1].devices.get(i).gea = gear;
// t[tn-1].devices.get(i).updateState();
// }
// }
}
// 根据输入的控制信息更新电路状态
// 这里需要根据实际输入的控制信息来更新电路状态
}
for(int i=0;i<tn-1;i++)
{
t[i].computeR();
// System.out.println(t[i].r);
}
for(int i=0;i<mn;i++){
m[i].computeR();
}
// System.out.println(m.r);
t[tn-1].computeR();
// System.out.println(t[tn-1].r);
double vt = 220;
for(int i=0;i<t[tn-1].devices.size();i++){
if(t[tn-1].devices.get(i) instanceof Fcontrol){
if(t[tn-1].devices.get(i).gear==0)
vt = 0;
else if(t[tn-1].devices.get(i).gear==1)
vt = (0.3 * vt);
else if(t[tn-1].devices.get(i).gear==2)
vt = (0.6 * vt);
else if(t[tn-1].devices.get(i).gear==3)
vt = (0.9 * vt);
}
else if(t[tn-1].devices.get(i) instanceof Lcontrol){
vt = (t[tn-1].devices.get(i).gea * vt);
}
else if(t[tn-1].devices.get(i) instanceof Switch)
{
if(t[tn-1].devices.get(i).state == 0)
vt = 0;
}
else if(t[tn-1].devices.get(i) instanceof Hswitch)
{
if(t[tn-1].devices.get(i).state == 0&&t[tn-1].devices.get(i).gear==2||t[tn-1].devices.get(i).state == 1&&t[tn-1].devices.get(i).gear==3)
vt = 0;
}
}
for(int i=0;i<t[tn-1].ts.size();i++){
if(!t[tn-1].ts.get(i).isClosed())
vt = 0;
}
int brisum = 0;
for(int i=0;i<t[tn-1].ts.size();i++){
t[tn-1].ts.get(i).vt = t[tn-1].ts.get(i).r/t[tn-1].r*vt;
t[tn-1].ts.get(i).updateState();
}
for(int j=0;j<mn;j++){
for(int i=0;i<m[j].ts.size();i++){
if(m[j].ts.get(i).isClosed()){
for(Device device : m[j].ts.get(i).devices){
if(device instanceof Fan)
{
device.vt = 1.0*(device.r/m[j].ts.get(i).r)*m[j].r/t[tn-1].r*vt;
device.updateState();
}
else if(device instanceof Afan)
{
device.vt = 1.0*(device.r/m[j].ts.get(i).r)*m[j].r/t[tn-1].r*vt;
device.updateState();
}
else if(device instanceof Blight)
{
device.vt = 1.0*(device.r/m[j].ts.get(i).r)*m[j].r/t[tn-1].r*vt;
device.updateState();
brisum = brisum+device.brightness;
}
else if(device instanceof Light)
{
device.vt = 1.0*(device.r/m[j].ts.get(i).r)*m[j].r/t[tn-1].r*vt;
device.updateState();
brisum = brisum+device.brightness;
}
else if(device instanceof Scurtain)
{
device.vt = 1.0*(device.r/m[j].ts.get(i).r)*m[j].r/t[tn-1].r*vt;
}
}
}
}
}
for(Device device : t[tn-1].devices){
if(device instanceof Fan)
{
device.vt = 1.0*device.r/t[tn-1].r*vt;
device.updateState();
}
else if(device instanceof Afan)
{
device.vt = 1.0*device.r/t[tn-1].r*vt;
device.updateState();
}
else if(device instanceof Blight)
{
device.vt = 1.0*device.r/t[tn-1].r*vt;
device.updateState();
brisum = brisum+device.brightness;
}
else if(device instanceof Light)
{
device.vt = 1.0*device.r/t[tn-1].r*vt;
device.updateState();
brisum = brisum+device.brightness;
}
else if(device instanceof Scurtain)
{
device.vt = 1.0*device.r/t[tn-1].r*vt;
}
}
for(int j=0;j<mn;j++){
for(int i=0;i<m[j].ts.size();i++){
if(m[j].ts.get(i).isClosed()){
for(Device device : m[j].ts.get(i).devices){
if(device instanceof Scurtain)
{
device.bri = brisum;
device.updateState();
}
}
}
else
{
for(Device device : m[j].ts.get(i).devices){
if(device instanceof Scurtain)
{
device.bri = 0;
device.updateState();
}
}
}
}
}
for(Device device : t[tn-1].devices){
if(device instanceof Scurtain)
{
device.bri = brisum;
device.updateState();
}
}
circuit.getStatus();
}
}
设计与分析
第七次作业
家居电路模拟程序-3
本次作业新加入两个类,分别是受控窗帘与互斥开关类,皆继承自电器类;
第八次作业
家居电路模拟系统-4
本次作业新加入了二极管类,类间嵌套关系更加复杂,串联电路中有串联和并联,并联中可能也有串联和并联;
踩坑心得
第七次作业
家居电路模拟程序-3
本次作业为家居电路第三次作业,作业难度进一步增大,加入了多个并联,多个串联等情况,以及受控窗帘,互斥开关两种新设备;
第八次作业
家居电路模拟系统-4
本次作业较难,问题主要对复杂电路的处理以及对引脚电压的计算,本次作业电路复杂,出现并联中含有并联的情况,另加入二极管设备;
改进建议
1.使用接口和抽象类:
接口: 可以定义一些共通的方法,比如电器设备的开关、更新状态等,通过实现接口,不同电器可以有自己的实现方式,同时也便于扩展新的设备类型。
抽象类: 可以用于定义一些共通的属性和方法,但不一定需要每个子类都实现。例如,可以定义一个电子设备抽象类,包含电压、电流等属性,以及一些基本的开关方法。具体的电器类可以继承这个抽象类并实现特定的功能。
2.优化类的设计:
减少冗余属性: 检查每个类的属性,确保没有多余的属性。如果某个属性只在少数几个子类中使用,可以考虑将这些属性移到对应的子类中。
使用组合代替继承: 当两个类之间关系不是“is-a”而是“has-a”时,应该使用组合而不是继承。例如,一个电路可以有多个设备,而不是设备继承自电路类。
优化数据存储:
3.使用HashMap存储引脚电压: 可以使用HashMap来存储每个设备的不同引脚电压,这样可以更灵活地处理引脚问题,同时代码也会更加清晰。
利用集合类: 使用ArrayList、HashSet等集合类来存储相关联的对象,比如电路中的设备、设备中的引脚等。
4.增加注释和文档:
注释: 对关键的类、方法、变量增加详细的注释,说明其用途、实现逻辑等。
文档: 编写项目文档,包括设计思路、类结构、接口说明等,方便团队成员理解和维护代码。
5.增强错误处理和日志记录:
错误处理: 在关键的操作点增加错误处理逻辑,比如电路短路、电流超限等情况,给出明确的错误提示。
日志记录: 记录关键的操作和状态变化,便于调试和追踪问题。
6.优化算法和性能:
算法优化: 检查当前的算法实现,看是否有更高效的实现方式。例如,电路的电压和电流计算可以通过更优化的算法来减少计算量。
性能优化: 对于大数据量或复杂电路的情况,考虑使用更高效的数据结构和算法,或者通过多线程、异步处理等方式来优化性能。
7.代码重构:
模块化: 将代码拆分成多个模块,每个模块负责一个相对独立的功能。这样可以降低代码间的耦合度,提高代码的可维护性。
重构: 定期对代码进行重构,删除无用的代码、优化代码结构、简化复杂逻辑等。
总结
1.面向对象编程的深入理解:通过设计和实现多个类(如设备类、开关类、电路类等),深刻理解了面向对象编程的核心概念,包括封装、继承和多态。这些概念在解决实际问题时非常有用,能够使得代码更加模块化、易于理解和维护。
2.复杂问题的分解与解决:面对复杂的电路模拟问题,学会了将大问题分解成若干个小问题来解决。通过定义不同的类来表示不同的设备和电路组件,以及通过组合和继承来构建复杂的电路结构,成功地将复杂问题简化为一系列可管理的任务。
3.算法和逻辑的实现:在实现设备状态更新、电路电压和电流计算等功能时,锻炼了算法设计和逻辑实现的能力。需要仔细考虑各种边界条件和异常情况,确保程序的健壮性和正确性。
4.错误处理和日志记录:意识到在复杂系统中错误处理和日志记录的重要性。通过添加错误处理和日志记录机制,能够及时发现和解决问题,提高系统的稳定性和可维护性。
5.性能优化的考虑:在处理大数据量或复杂电路时,开始关注程序的性能问题。思考如何通过优化算法、使用更高效的数据结构或采用多线程等方式来提高程序的执行效率。
6.团队合作与代码规范:虽然本次作业可能是个人完成,但在实际项目中团队合作和代码规范同样重要。意识到编写清晰、可读的代码,以及遵循统一的编码规范和风格,对于团队协作和代码维护至关重要。
7.持续学习和改进:认识到编程是一个不断学习和改进的过程。通过本次作业发现了自己在某些方面的不足,如接口和抽象类的使用、代码注释的缺失等。未来将继续努力提升自己的编程能力,学习更多的新技术和方法,以更好地应对各种挑战。
综上所述,本次作业不仅是一次对面向对象编程和算法设计的实践,更是一次对自我能力和态度的提升。通过总结经验和教训,相信在未来的学习和工作中能够取得更大的进步。