前言
知識點:本次大作業為數字電路模擬程序,主要知識點包括基礎邏輯門包括與 、 或 、 非 、異或 、同或的邏輯實現;擴展元件三態門、譯碼器、數據選擇器 、 分配器的控制邏輯與多引腳管理;面向對象設計包括抽象基類、子類繼承、工廠模式;信號傳播的循環更新機制解決元件依賴的信號傳遞。第一次以 “單一元件的邏輯實現” 和 “簡單信號傳遞” 為主,題量適中、難度偏基礎,第二次從 “單一邏輯” 延伸到 “控制邏輯、編碼 / 解碼規則、多狀態輸出”,題量增加的同時,難度呈階梯式上升 —— 不僅需要理解元件的硬件邏輯,還要處理更復雜的引腳映射、信號同步問題。
難度及題量:第一次大作業核心難度集中在 “邏輯門的輸入引腳遍歷 + 輸出計算”,以及 “信號從輸入引腳到元件的傳遞”—— 比如與門需要遍歷所有輸入引腳、判斷是否全 1;異或門需要檢查兩個輸入引腳是否都有信號。整體難度偏 “理解邏輯 + 代碼實現”,無額外規則負擔,第二次對應新增的 4 類複雜元件,題量圍繞元件獨特規則做針對性驗證,難度升級為 “多引腳規則 + 多狀態輸出 + 交叉依賴” 的複合挑戰,既銜接基礎又訓練多約束下的拆解能力,適配知識掌握的節奏。

設計與分析

第一次大作業:第一次大作業聚焦5 類基礎邏輯門與、或 、非 、異或 、同或的模擬,核心要求包括:元件命名規則:與 / 或門為 “標識符 (輸入引腳數)+ 編號”,非 / 異或 / 同或門為 “通識符 + 編號”;信號規則:輸入引腳信號不全則忽略元件,輸出僅 0/1 兩種狀態;輸出規則:按元件類型與→或→非→異或→同或、同類型按編號排序輸出有效元件的輸出引腳電平。題目共 6 個測試用例,前 5 個驗證基礎 / 組合邏輯,第 6 個考察 “輸入不全忽略元件” 的邊界場景,整體聚焦 “單一邏輯實現 + 簡單信號傳遞”

基於SourceMonitor的源代碼分析

數字電路實驗_cd4518設計十進制計數器_複雜度


從中可以得到:代碼共 338 行、200 條語句,包含 8 個類(抽象類 + 5 個邏輯門子類 + 工廠類 + 主類),類與方法分佈符合單一職責(平均每類 2.38 個方法、每方法 10 條語句)。複雜度上,Main.main()是核心複雜點(複雜度 14、語句 31、塊深度 6),因聚合了輸入解析、信號傳播、計算、輸出全流程,嵌套層級較多;而邏輯門子類(如AndGate)複雜度≤4,僅負責單一邏輯。註釋佔比僅 13.3%,關鍵模塊説明不足;ComponentFactory.createComponent()因多分支正則匹配,複雜度達 9。整體看,代碼功能完整、基礎模塊簡潔,但主方法聚合度過高、註釋覆蓋率低,後續需拆分main()、補充註釋、優化工廠類邏輯,以提升維護性與可讀性。

第二次大作業:第二次大作業是升級後的數字電路模擬程序,基於面向對象架構適配基礎與擴展共 9 類元件。核心設計上,通過ComponentType枚舉統一管理元件類型,抽象類Component新增引腳信號映射、輸出有效性標識及分層抽象方法,實現邏輯計算與格式輸出解耦。元件層保留基礎邏輯門核心邏輯,擴展三態門、譯碼器等元件,精準匹配其控制條件與輸出規則;工廠類新增 4 類元件正則匹配規則,遵循開閉原則。主程序重構信號處理流程,通過三步閉環實現信號傳播、引腳同步與輸出計算,新增連接映射提升通用性,結果分類排序適配 9 類元件輸出要求。代碼亮點是高擴展性與規則精準適配,潛在優化點在於降低工廠類分支複雜度、補充核心邏輯註釋,整體是需求驅動重構的典型案例,工程實踐價值較高。

基於SourceMonitor的源代碼分析

數字電路實驗_cd4518設計十進制計數器_工廠類_02


代碼規模擴增至 747 行、435 條語句,包含 12 個類(新增三態門、譯碼器等 4 類元件及枚舉類),類數量隨功能擴展同步增加,平均每類 3.38 個方法、每方法約 9.59 條語句,保持了模塊化拆分。複雜度上,ComponentFactory.createComponent()成為最複雜方法(複雜度 11、語句 45),因新增了 4 類元件的正則匹配分支;Main.main()複雜度降至 6,較首次代碼的聚合度明顯降低(拆分了部分邏輯),但塊深度仍達 5,嵌套層級偏多。邏輯門子類複雜度仍≤4,新增元件類(如Decoder.calculateOutput())複雜度為 8,因包含控制條件、多引腳解析等邏輯。註釋佔比 13.7%,仍存在關鍵邏輯説明不足的問題。整體看,代碼通過擴展類結構適配了複雜元件需求,主方法耦合度降低,但工廠類分支複雜度上升、註釋覆蓋率不足,後續需優化工廠類的分支邏輯、補充核心方法註釋,以提升可維護性。

踩坑心得
第一次大作業:在第一次數字電路模擬作業開發中,核心踩坑點集中在信號傳播邏輯和邊界規則處理兩方面。初期僅通過單次遍歷元件計算輸出,未考慮組合邏輯門的鏈式依賴問題 —— 當某元件的輸出作為另一元件的輸入時,單次計算無法完成信號的逐級傳遞,導致與門→非門→或門這類組合邏輯的輸出結果錯誤,需補充 “信號傳播→元件計算” 的循環閉環,直到無新輸出產生,才解決了信號傳遞不完整的問題。同時,開發中忽略了 “輸入引腳不全則忽略元件” 的邊界規則,未先校驗所有輸入引腳是否有有效信號,直接按邏輯門公式計算輸出,使得第 6 個測試用例中輸入不全的元件仍被錯誤計算,觸發輸出結果報錯。後續通過在每個元件的calculateOutput()方法中增加輸入引腳遍歷校驗,若任一引腳無信號則標記輸出無效,才符合題目對邊界場景的要求,也讓代碼邏輯更貼合硬件電路的實際工作規則。
第二次大作業:第二次數字電路模擬作業開發中,核心踩坑點集中在複雜元件規則拆解、輸出格式適配與架構兼容性三方面。新增的譯碼器、數據分配器等元件,因多引腳類型(控制 / 輸入 / 輸出)和特殊邏輯規則,初期未徹底拆解引腳編號範圍(如譯碼器 S1/S2/S3 對應 0/1/2 號控制引腳),直接按基礎元件邏輯映射引腳,導致輸入編碼解析、輸出引腳匹配頻繁出錯。輸出格式適配也出現偏差,譯碼器 “元件名:引腳號”、數據分配器 “-” 表示無效輸出的特殊格式,初期沿用基礎元件的 “元件名 - 引腳:值” 格式,造成輸出結果不符合測試要求。此外,首次作業的引腳管理架構無法兼容擴展元件的多類型引腳,需重構抽象類的引腳映射邏輯,否則新增元件需大量修改原有代碼。工廠類新增 4 類元件的正則匹配規則後,分支嵌套加深,因正則表達式轉義、分組錯誤,多次出現元件實例創建失敗的問題。後續通過逐行梳理元件規則、拆分工廠類分支邏輯、提前定義輸出格式接口,才逐步解決這些問題,也意識到開發前拆解需求、做好架構擴展設計的重要性。

改進建議
第一次大作業:核心問題為耦合高、邊界校驗不足、信號傳播不徹底。需拆分Main類的輸入解析邏輯為獨立工具類,解耦主流程;補充輸入引腳全量校驗,過濾無效輸入的元件;優化信號傳播邏輯為循環閉環,直到無新輸出產生。改進後代碼職責更清晰,邊界場景覆蓋完整,組合邏輯的信號傳遞精準度提升。
第二次大作業:核心問題為工廠類分支複雜、引腳規則硬編碼、輸出格式耦合。需拆分ComponentFactory的匹配邏輯為多方法,降低分支嵌套;將元件引腳規則抽為常量或配置類,避免硬編碼;抽象輸出格式接口,讓元件自行實現輸出邏輯,解耦主流程的格式拼接。改進後工廠類可維護性提升,引腳規則修改更靈活,輸出格式適配成本降低。

課堂檢測分析
這次課堂作業考察了包括但不限於:基礎語法:數組定義 / 初始化、基本數據類型範圍、標識符規則、註釋格式、編譯運行命令、位運算、邏輯運算(短路特性)、字符串與基本類型互轉。面向對象:抽象類 / 接口的特性(構造函數、方法、繼承)、方法重寫 / 重載規則、訪問權限(protected、public 等)、final/abstract/static 關鍵字、super 關鍵字、封裝、多態的前提與特性。和代碼規範
通過這次課堂測驗我認識到自己有許多不足,主要包括:
對抽象類 / 接口的特性理解模糊(如 “抽象類是否有構造函數”“接口方法是否有方法體”),混淆了二者的定義規則;
混淆方法 “重寫” 與 “重載” 的規則(重寫要求方法名、參數完全一致,重載要求參數列表不同);
對 static 關鍵字的作用範圍理解錯誤(static 不能修飾類,只能修飾成員、方法、代碼塊)
忽略語法細節:如數組初始化時 “int a[][] = new int[3]” 是錯誤的(二維數組需指定列或初始化元素)、byte類型範圍是 - 128~127(340 超出範圍);
遺漏關鍵字約束:如final和abstract不能同時修飾方法(final 禁止重寫,abstract 要求重寫)、abstract不能修飾成員變量;
忽略短路運算特性:邏輯或 “||” 左側為 true 時,右側表達式不會執行(如 3-15 題中y++不會執行,y 仍為 0)。
對訪問權限的範圍掌握不精準(protected 修飾的成員在 “不同包的子類” 中可訪問,但回答時誤選其他範圍);
對多態的前提理解錯誤(多態需要 “繼承 + 方法重寫 + 父類引用指向子類對象”,遺漏 “方法重寫” 的要求);
對字符串轉換方法不熟悉:如char[]轉字符串需用new String(chars),而非chars.toString()(該方法返回對象地址)。
通過這次課堂檢測我將從以下三方面改進:
梳理核心概念清單:整理抽象類 / 接口、重寫 / 重載、關鍵字約束等易混淆知識點,標註核心差異(如抽象類有構造函數、接口默認方法有方法體)
實操驗證理解:編寫小案例測試多態前提、訪問權限、字符串轉換等規則
聚焦數組初始化、數據類型範圍、短路運算等語法細節,通過專項練習題鞏固,重點驗證

總結
學到的核心內容
從基礎版 “單一邏輯實現”,到擴展版 “多元件規則適配”,逐步理解面向對象設計的核心:抽象類 + 子類實現高擴展,單一職責降低耦合;掌握了複雜硬件規則譯碼器控制條件與代碼邏輯的映射方法,學會用循環閉環解決信號依賴問題;認識到代碼指標複雜度、嵌套深度對可維護性的影響,通過方法拆分、接口抽象優化代碼結構。
需進一步學習研究的方向
元件擴展層面:目前僅覆蓋組合邏輯,需學習時序電路(如觸發器)的反饋信號處理,適配更復雜的電路場景
架構設計層面:未抽象調度接口,需研究策略模式,實現不同信號傳播算法的靈活替換