OOP 7-8次作业总结

23201636-曾繁榕
目录

  1. 前言
  2. 设计与分析
  3. 踩坑心得
  4. 改进建议
  5. 总结
    前言
    本次作业知识点:类与对象的复杂使用,继承的进阶使用,各种接口的实现,复杂电路的处理,一个对象多个数据的储存输出,还主要考察了正则表达式的运用,字符串的提取分割;
    个人体会:本次作业难度较难,题量适中,但有些比较复杂的类设计上容易出现错误;第八次作业加上两端引脚电压以及复杂电路处理,难度大大提升
    大题源码
    第七次作业
    家具电路模拟程序-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.持续学习和改进:认识到编程是一个不断学习和改进的过程。通过本次作业发现了自己在某些方面的不足,如接口和抽象类的使用、代码注释的缺失等。未来将继续努力提升自己的编程能力,学习更多的新技术和方法,以更好地应对各种挑战。
综上所述,本次作业不仅是一次对面向对象编程和算法设计的实践,更是一次对自我能力和态度的提升。通过总结经验和教训,相信在未来的学习和工作中能够取得更大的进步。

posted @ 2024-06-29 11:55  源颖  阅读(11)  评论(0编辑  收藏  举报