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.堅持下去,不輕言放棄。