作業資訊
這個作業屬於哪個課程 | https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP/ |
---|---|
這個作業要求在哪裡 | https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08 |
這個作業的目標 | 功能設計與物件導向設計,物件導向設計過程,面嚮物件語言三要素,彙編、編譯、解釋、執行 |
作業正文 | https://www.cnblogs.com/wangsiqi828828/p/18551021 |
教材學習內容總結
-
功能設計與物件導向設計
功能設計
定義:功能設計主要關注系統或軟體應該具備什麼樣的功能來滿足使用者需求。它側重於從使用者角度出發,確定軟體需要完成的任務和操作流程。
特點:以功能為核心,將系統看作是一系列功能模組的組合。在設計過程中,通常先進行需求分析,梳理出所有需要實現的功能點,然後對這些功能點進行詳細設計,包括輸入輸出、資料處理等方面。物件導向設計
定義:物件導向設計(OOD)是一種設計方法,它以物件為基礎,將現實世界中的事物抽象成物件,物件包含資料(屬性)和行為(方法)。透過物件之間的互動來實現系統功能。
特點:具有封裝性、繼承性和多型性。封裝性使得物件的內部資料和實現細節對外部隱藏,只提供公共的介面來訪問物件的功能;繼承性允許建立新的類(子類)來繼承現有類(父類)的屬性和方法,從而實現程式碼的複用;多型性使得不同物件對相同訊息(方法呼叫)可以產生不同的響應。 -
物件導向設計過程
需求分析、識別物件和類、 定義類的屬性和方法、確定類之間的關係、設計使用者介面(如果需要) -
彙編、編譯、解釋、執行
彙編
定義:組合語言是一種低階程式語言,它使用助記符來代替機器語言的二進位制指令。彙編過程是將組合語言源程式轉換為機器語言目標程式的過程。
特點:組合語言與機器硬體密切相關,不同的CPU架構有不同的組合語言。它能夠直接訪問和控制計算機硬體資源,如暫存器、記憶體等。但是,組合語言的程式設計效率相對較低,因為它需要程式設計師對計算機硬體有深入的瞭解,並且程式碼的可讀性和可維護性較差。執行
定義:執行是指計算機執行程式的過程,無論是編譯後的程式還是透過直譯器解釋執行的程式。在執行過程中,計算機的CPU按照程式中的指令序列,從記憶體中讀取資料和指令,進行運算和操作,完成程式設定的任務。
特點:執行的效率和程式的最佳化程度、計算機硬體的效能等因素有關。對於編譯後的程式,執行速度通常較快,因為編譯過程中已經進行了一些最佳化。而對於解釋執行的程式,執行速度可能會受到直譯器效能的影響。
教材學習中的問題和解決過程(先問 AI)
問題1:物件導向設計的原則有哪些?
- 問題1解決方案:
1.單一職責原則(SRP)
定義:一個類應該只有一個引起它變化的原因,即一個類只負責一項職責。
解釋:如果一個類承擔了過多的職責,那麼這些職責的變化可能會影響這個類。例如,一個類既負責使用者資料的儲存,又負責使用者介面的展示,當儲存方式或者介面展示要求發生變化時,這個類就需要頻繁修改,這樣會導致程式碼的穩定性變差。
2.開閉原則(OCP)
定義:軟體實體(類、模組、函式等)應該對擴充套件開放,對修改關閉。
解釋:這意味著當需要增加新功能時,應該透過擴充套件已有程式碼來實現,而不是修改已有的穩定程式碼。這樣可以保證原有程式碼的穩定性,減少修改可能帶來的錯誤。
3.里氏替換原則(LSP)
定義:子型別必須能夠替換它們的父型別。也就是說,在任何使用父型別物件的地方,都可以用子型別物件來替換,而程式的行為不會發生改變。
解釋:這保證了繼承關係的正確性和合理性。如果違反了這個原則,可能會導致程式出現錯誤或者不符合預期的行為。
4.依賴倒置原則(DIP)
定義:高層模組不應該依賴低層模組,二者都應該依賴抽象;抽象不應該依賴細節,細節應該依賴抽象。
解釋:這有助於降低模組之間的耦合度。當高層模組和低層模組都依賴抽象時,具體的實現可以方便地替換,而不會影響到其他模組。
5.介面隔離原則(ISP)
定義:客戶端不應該被迫依賴於它不使用的介面。一個類對另一個類的依賴應該建立在最小的介面上。
解釋:這避免了客戶端因為依賴不需要的介面而導致的複雜性增加和潛在的錯誤。將大的介面拆分成多個小的、專門的介面,可以使客戶端只依賴自己需要的部分。
6.迪米特法則(LoD),也叫最少知識原則
定義:一個物件應該對其他物件有最少的瞭解。也就是說,一個類應該儘量減少對其他類的依賴,只和直接的朋友(成員變數、方法引數、返回值等)進行互動。
解釋:這樣可以降低類之間的耦合度,使得系統更加靈活和易於維護。如果一個類過多地瞭解其他類的內部細節,當其他類發生變化時,這個類可能會受到很大的影響。
基於AI的學習
程式碼除錯中的問題和解決過程
其他(感悟、思考等,可選)
無
學習進度條
|
| 程式碼行數(新增/累積)| 部落格量(新增/累積)|學習時間(新增/累積)|重要成長
|
|
-------- | :----------------😐:----------------😐:---------------: |:-----😐
| 目標 | 5000行 | 30篇 | 400小時 | |
| 第一週 | 200/200 | 2/2 | 20/20 | |
| 第二週 | 300/500 | 2/4 | 18/38 | |
| 第三週 | 500/1000 | 3/7 | 22/60 | |
| 第四周 | 300/1300 | 2/9 | 30/90 | |
嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進自己的計劃能力。這個工作學習中很重要,也很有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。
參考:軟體工程軟體的估計為什麼這麼難,[軟體工程 估計方法](http://www.cnblogs.com/xinz/archive/2011/04/06/2007294
.html)
-
計劃學習時間
:XX
小時 -
實際學習時間
:XX
小時 -
改進情況:
(有空多看看[現代軟體工程 課件
軟體工程師能力自我評價表](
http://www.cnblogs.com/xinz/p/3852177
.html))
參考資料
- 《電腦科學概論(第七版)》
- ...