OOP 7-8次作業總結

源颖發表於2024-06-29

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.持續學習和改進:認識到程式設計是一個不斷學習和改進的過程。透過本次作業發現了自己在某些方面的不足,如介面和抽象類的使用、程式碼註釋的缺失等。未來將繼續努力提升自己的程式設計能力,學習更多的新技術和方法,以更好地應對各種挑戰。
綜上所述,本次作業不僅是一次對物件導向程式設計和演算法設計的實踐,更是一次對自我能力和態度的提升。透過總結經驗和教訓,相信在未來的學習和工作中能夠取得更大的進步。