前言

本次大作業是第一個面向對象編程的實操練習,難度從中到難,層層遞進。

  • OOP題目集01
    大部分是作為前面Java程序練習的過渡用的練習題,題目簡單,題型常見不復雜,能幫助我們學習更多方法運用於Java編程當中。
    第一次電梯調度程序也是基礎的電梯類設計,初步瞭解題目的需求,為以後的迭代設計奠定基礎。
  • OOP題目集02
    本次題目集對類設計有了更嚴格的要求標準,題目複雜度逐漸上升,涉及類的創建和使用,能夠更好地加深面向對象編程思想。
    第二次電梯調度程序在第一次的基礎上進行了迭代涉及,瞭解單一職責原則。
  • OOP題目集03
    本題目集需要解決更深層次的應用,涉及到類的繼承等等。
    這次的電梯調度程序則進一步開始迭代性設計。

設計與分析

由於能力上的不足等原因,有關單部電梯調度的程序未能成功調通(或未完成),故在此主要分析我代碼上的缺陷不足和問題所在。

題目集1:單部電梯基礎調度

類圖設計

面向對象編程大作業總結 _複雜度

源碼分析要點

首先,編譯並運行之後顯而易見的出現了錯誤:運行時錯誤,會一直循環打印,並且樓層數量始終為0,顯然出現了很多邏輯錯誤。
這邊是用ai工具分析的情況:

  • 邏輯混亂
    Main類中,使用字符串長度(input.length()>=3&&input.length()<6)來區分內部和外部請求不可靠。例如,外部請求<10,UP>長度為7,會被錯誤分類;內部請求如100(3字符)可能被誤判為外部請求。
    改進建議:最好使用正則表達式或解析請求內容來區分類型
  • 數據封裝不足,違反OOP原則
    Elevator類的字段(如IQOQ)被聲明為public,並在Main類中直接訪問(例如elevator.OQ.add(input)),破壞了封裝性。
    改進建議:將字段設為private,並通過公共方法(addRequest(String request))來添加請求,內部根據請求類型自動分類

分析報告

面向對象編程大作業總結 _嵌套_02


面向對象編程大作業總結 _嵌套_03

報告顯示:
代碼質量指標:

  • 分支覆蓋率:27.6% - 測試覆蓋率較低
  • 註釋率:21.7% - 註釋相對充分
  • 方法複雜度:平均每個方法7.06條語句

複雜度問題:

  • 最大圈複雜度:4(標有*號,表示有方法較複雜)
  • 平均複雜度:1.85(標有*號,超出理想範圍)
  • 最大嵌套深度:4層

題目集2:單部電梯增強調度

類圖設計

面向對象編程大作業總結 _代碼質量_04

源碼分析要點

由於時間問題,我並沒有完成最後的代碼,因此以下是使用ai工具分析其他代碼部分的結果:

  • 調度算法邏輯問題
    hasRequestsInDirection方法中,條件elevator.getCurrentFloor() == req.getFloor()可能邏輯不正確,電梯當前樓層等於請求樓層時應該直接處理
  • 方法複雜度依然偏高
    determineDirection()hasRequestsInDirection()`方法邏輯較複雜。
  • 缺少輸入解析層

分析報告

面向對象編程大作業總結 _嵌套_05

面向對象編程大作業總結 _複雜度_06

報告顯示:
代碼質量指標:

  • 分支覆蓋率:17.8% - 測試覆蓋率下降
  • 註釋率:9.3% - 註釋比例減少
  • 方法複雜度:3.10 - 方法規模明顯減小

複雜度問題:

  • 最大圈複雜度:4(標有*號,表示有方法較複雜)
  • 平均複雜度:1.14(標有*號,但相比第一次的1.85顯著降低)
  • 最大嵌套深度:4層
  • 平均嵌套深度:1.41層

題目集3:單部電梯優化調度

類圖設計

面向對象編程大作業總結 _代碼質量_07

源碼分析要點

  • 重複請求過濾不完整
    雖然內部請求有去重,但外部請求沒有。
  • 樓層有效性檢查缺失
    添加請求時沒有檢查樓層是否在有效範圍內。
  • 方向匹配邏輯可以優化
    shouldStopremoveRequests中重複了相似的方向檢查邏輯。
  • 硬編碼的初始輸出
    Main類中硬編碼了初始方向輸出。

分析報告

面向對象編程大作業總結 _代碼質量_08


面向對象編程大作業總結 _代碼質量_09

報告顯示:
代碼質量指標:

  • 分支覆蓋率:22.3% - 測試覆蓋率有所改善,但仍偏低
  • 註釋率:22.3%

複雜度問題:

  • 最大圈複雜度:3
  • 平均複雜度:1.54(相比第二版的1.14有所上升)
  • 最大嵌套深度:6層
  • 平均嵌套深度:1.85層

踩坑心得

第一次設計最大的問題就是邏輯混亂複雜,所有功能都往一個類裝,調度邏輯、狀態管理、隊列處理混雜在一起。
第二次有了參考類圖設計,結構方面稍微改善了點,但由於第一次未能打好基礎,所以第二次也沒有成功寫出完整的程序。
第三次終於能正常運行了,但依然存在答案錯誤,未通過測試點的問題,這説明我在新增功能時沒有同步增加測試,而且嵌套深度過深,條件判斷過於複雜了。
隨着程序的複雜度上升,應在註釋方面多注意,方便未來調試。

改進建議

可以針對架構設計、複雜度控制等方面進行改進,詳細的前面已註明,不再多説。

總結

收穫與成長

通過本階段的練習,我能夠學會如何設計類以及合理進行職責劃分,並且能從只關注功能到關注複雜度、覆蓋率,學習了迭代優化思維,能夠通過持續重構改善代碼質量。