OO第三次部落格作業

小丑-zw發表於2024-06-29

OO第二次部落格作業

目錄

1.前言
2.設計與分析
3.採坑心得
4.改進建議
5.總結

1.前言

物件導向設計(Object-Oriented Design,簡稱OOD)是一種軟體設計方法,它基於物件導向程式設計(Object-Oriented Programming,簡稱OOP)的原則,將軟體系統的設計表示為一組物件及其相互作用。物件導向設計的核心思想是將現實世界中的問題抽象成物件,每個物件都有其屬性和方法,物件之間透過訊息傳遞進行互動。

物件導向設計的關鍵概念包括:

1.類(Class):類是建立物件的模板或藍圖,它定義了物件的結構和行為。類包含屬性和方法,屬性用於描述物件的狀態,方法用於定義物件的操作。

2.物件(Object):物件是類的例項,它是根據類定義建立的具體實體。每個物件都有其獨特的屬性值和方法執行。

3.封裝(Encapsulation):封裝是物件導向設計的基本原則之一,它意味著將物件的內部狀態(屬性)和對外提供的服務(方法)封裝在一起,隱藏物件的內部細節,僅透過介面與外界互動。

4.繼承(Inheritance):繼承允許新的類(子類)繼承一個已存在類(父類)的屬性和方法。子類可以擴充套件父類的行為,也可以新增新的屬性和方法。

5.多型(Polymorphism):多型性允許不同類的物件對同一訊息做出響應,並以不同的方式執行相應的操作。這使得同一個介面可以有多種不同的實現。

物件導向設計的過程通常包括以下步驟:

1.需求分析:理解並分析使用者需求,確定系統必須完成哪些任務。

2.抽象:將現實世界的實體抽象成類,確定類的屬性和方法。

3.設計類:定義類及其屬性和方法,確定類之間的繼承和關聯關係。

4.建立物件:根據類的設計建立物件,並實現物件之間的互動。

5.測試和驗證:透過編寫測試用例來驗證設計是否滿足需求,確保系統的正確性和健壯性。

物件導向設計的好處包括提高軟體的可重用性、可維護性和可擴充套件性,同時也使得軟體系統更加模組化和易於理解。透過使用物件導向設計,開發者可以構建出更加靈活、易於管理和更新的軟體系統。

2.設計與分析

1.第七次pta作業:
設計思路:在上次pta作業上,迭代一個互斥開關和窗簾,互斥開關只有連線上面和下面兩種情況,窗簾的開合與燈光的總強度相關

程式碼:

class H implements Comparable {

private String name;
private int h;

}

class S extends By {

private int r = 15;

public void Light() {
    if (this.getLux() >= 0 && this.getLux() <= 50) {
        lux = 100;
    } else if (this.getLux() >= 50 && this.getLux() <= 100) {
        lux = 80;
    } else if (this.getLux() >= 100 && this.getLux() <= 200) {
        lux = 60;
    } else if (this.getLux() >= 200 && this.getLux() <= 300) {
        lux = 40;
    } else if (this.getLux() >= 300 && this.getLux() <= 400) {
        lux = 20;
    } else {
        lux = 0;
    }
    System.out.println("@" + name + ":" + lux + "%");
}

}
設計思路:由於需要燈光的總強,所以需要算出,其他的與前一次差不多

程式碼:

else {

        for (T t : ts) {
            if (t.getKs().size() > 0) {
                for (K k : t.getKs()) {
                    if (k.getK() == 0) {
                        s = 0;
                        break;
                    } else {
                        s = 1;
                    }
                }
            } else {
                s = 1;
            }
            if (s == 1) {
                t.setState(1);
            } else {
                t.setState(0);
            }
            double R = 0;
            if (t.getState() == 1) {
                if (t.getControls().size() > 0) {
                    for (Control control : t.getControls()) {
                        pressure = control.get(pressure);
                    }
                    R = t.getR();
                    for (By by : bies) {
                        by.setPressure(pressure * by.getR() / R);
                    }
                } else {
                    R = t.getR();
                    for (By by : bies) {
                        by.setPressure(pressure * by.getR() / R);
                    }
                }
            } else {
                for (By by : bies) {
                    by.setPressure(0);
                }
            }
        }
    }

(部分)
分析:第七次作業中,我有以下幾個缺點:
1.不瞭解基本概念:Java是一門物件導向程式語言,因此瞭解基本概念,如類、物件、繼承、封裝、多型等,是必要的。如果您不瞭解這些基本概念,可以嘗試閱讀Java的入門書籍或線上資源,並多練習相關的例項程式碼。
2.程式碼不夠可讀:可讀性是編寫高質量程式碼的重要特徵。可以透過使用有意義的變數名和函式名、新增註釋和文件、遵循程式碼風格指南等方式來提高程式碼的可讀性。
3.缺乏程式設計習慣:程式設計習慣可以幫助您編寫更加可靠和可維護的程式碼。例如,可以嘗試使用try-catch語句來處理異常,使用迴圈和條件語句來控制程式流程,使用集合和陣列來儲存資料等。
4.不瞭解設計模式:設計模式是一種解決常見問題的解決方案,可以幫助您編寫更加可擴充套件和可維護的程式碼。如果您不熟悉設計模式,可以嘗試閱讀相關書籍或線上資源,並多練習相關的例項程式碼。
5.缺乏測試:測試是確保程式碼正確性和可靠性的重要手段。可以嘗試編寫單元測試和整合測試,以幫助您發現並修復程式碼中的錯誤。
總之,要想提高自己的Java程式設計能力,需要多練習,多學習,並多思考。不斷地總結自己的不足和優點,並從中學習和提高自己。同時,也可以尋找志同道合的夥伴,一起交流和學習,共同進步。
2.第八次pta作業:
設計思路:在上次pta的前提下,完善了多個並聯,並且多了一個二極體類來控制電路。

程式碼:

if (ms.size() > 0) {

        for (T t : ts) {
            if (t.getNamem().size() > 0) {
                if (t.getKs().size() > 0) {
                    for (K k : t.getKs()) {
                        if (k.getK() == 0) {
                            s = 0;
                            break;
                        } else {
                            s = 1;
                        }
                    }
                } else {
                    s = 1;
                }
                if (s == 1) {
                    t.setState(1);
                } else {
                    t.setState(0);
                }
            }
        }
        for (T t : ts) {
            if (t.getNamem().size() == 0) {
                if (s == 0) {
                    t.setState(0);
                } else {
                    if (t.getKs().size() > 0) {
                        for (K k : t.getKs()) {
                            if (k.getK() == 0) {
                                t.setState(0);
                                break;
                            } else {
                                t.setState(1);
                            }
                        }
                    }
                }
            }
        }
        for (T t : ts) {
            if (t.getNamem().size() > 0) {
                if (t.getState() == 1) {
                    if (t.getControls().size() > 0) {
                        for (Control control : t.getControls()) {
                            pressure = control.get(pressure);
                        }
                    }
                    s1 = 1;
                } else {
                    s1 = 0;
                }
            } else {
                if (t.getState() == 1) {
                    s2++;
                }
            }
        }
        if (s1 == 0 || s2 == 0) {
            for (By by : bies) {
                by.setPressure(0);
            }
        } else if (s2 == 1) {
            double R = 0;
            for (T t : ts) {
                if (t.getState() == 1) {
                    R += t.getR();
                } else {
                    R += 0;
                }
            }
            for (T t : ts) {
                if (t.getState() == 1) {
                    for (By by : t.getBies()) {
                        by.setPressure(pressure * by.getR() / R);
                    }
                } else {
                    for (By by : t.getBies()) {
                        by.setPressure(0);
                    }
                }
            }
        } else {
            double R = 0;
            double r = 0;
            double r1 = 0;
            for (T t : ts) {
                if (t.getState() == 1) {
                    if (t.getNamem().size() > 0) {
                        R += t.getR();
                    } else {
                        r = (double) 1 / t.getR();
                        r1 += r;
                    }
                }
            }
            R += 1 / r1;
            for (T t : ts) {
                if (t.getState() == 0) {
                    for (By by : t.getBies()) {
                        by.setPressure(0);
                    }
                } else {
                    if (t.getNamem().size() > 0) {
                        for (By by : t.getBies()) {
                            by.setPressure(pressure * by.getR() / R);
                        }
                    } else {
                        for (By by : t.getBies()) {
                            by.setPressure(pressure / r1 / R / t.getR() * by.getR());
                        }
                    }
                }
            }
        }
    } else {
        for (T t : ts) {
            if (t.getKs().size() > 0) {
                for (K k : t.getKs()) {
                    if (k.getK() == 0) {
                        s = 0;
                        break;
                    } else {
                        s = 1;
                    }
                }
            } else {
                s = 1;
            }
            if (s == 1) {
                t.setState(1);
            } else {
                t.setState(0);
            }
            double R = 0;
            if (t.getState() == 1) {
                if (t.getControls().size() > 0) {
                    for (Control control : t.getControls()) {
                        pressure = control.get(pressure);
                    }
                    R = t.getR();
                    for (By by : bies) {
                        by.setPressure(pressure * by.getR() / R);
                    }
                } else {
                    R = t.getR();
                    for (By by : bies) {
                        by.setPressure(pressure * by.getR() / R);
                    }
                }
            } else {
                for (By by : bies) {
                    by.setPressure(0);
                }
            }
        }
    }

(部分)
分析:在第八次作業中,由於是最後一次,態度有些懈怠,但也為此付出了不少的時間,也進行了一次小小的總結,總結如下:
1.在規劃任務時,我會根據作業要求,規劃任務的步驟和時間表。我會確保我有足夠的時間來完成每個步驟,並且我會盡力地利用我的時間來完成作業。
2.在設計解決方案時,我會根據作業要求,設計一個解決方案。我會在紙上或在電子裝置上進行草圖和設計,並確保我的解決方案符合作業要求。

3.在編寫程式碼時,我會遵循良好的程式設計習慣,例如使用有意義的變數名、註釋和格式化程式碼。我會一步一步地編寫程式碼,並確保每一步都符合我的設計。
4.在測試和除錯時,我會編寫測試用例來測試我的程式碼,並確保我的程式碼符合作業要求。如果我的程式碼出現問題,我會耐心地除錯我的程式碼,直到我的程式碼符合作業要求。
5.在提交作業時,我會確保我已經按照作業要求完成了所有步驟,並且已經測試和除錯過程式碼。我會仔細地檢查我的程式碼,並確保我的程式碼符合作業要求。
總的來說,我在做Java作業時,我會盡力地完成任務,並確保我的程式碼符合作業要求。我會保持積極態度和好奇心,不斷地學習和探索。即使遇到困難,我也會保持耐心和毅力,繼續努力地學習和解決問題。

3.採坑心得

1.第七次pta作業:在這次作業中,我發現了許多問題,現列舉以下三個
(1)互斥開關的閉合,只有1和2,沒有不閉合的情況。
(2)由於要算出總亮度,所以燈有一個單獨的類,其他子類繼承它。
(3)這次又多個串聯並聯,要考慮多種情況。
2.第八次pta作業:這次作業,不僅發現了一系列問題,也自我作了一些總結
(1)注意二極體方向,方向不同情況不同。
(2)心態要好,儘管很痛苦,但是還得練。
(3)不能輕易放棄。

4.改進建議

1.審題!審題!審題!題目審不好,不僅會讓信心遞減,更會消磨做下去的鬥志。
2.記住單一職責,合理運用封裝、繼承、多型。
3.動手前,設計好所需的類,做好設計,是好的程式設計師的第一步,也是根基。

5.總結

在這三次作業中,最主要的問題還是設計問題,其次就是審題,再者就是能力問題,為此,我要做出如下的策略:
1.花更多的時間去設計,而不是提筆就寫。
2.一定要先審題,不然後續的編寫會在你不知情的情況下出現很多錯誤。
3.認真對待每次作業,併為下一次做準備,爭取把自己的程式設計能力培養上來。
4.堅持下去,不輕言放棄。

相關文章