這個作業屬於https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP
這個作業要求https://www.cnblogs.com/rocedu/p/9577842.html#WEEK01
• 這個作業的目標瞭解功能設計與物件導向設計
• 物件導向設計過程
• 面嚮物件語言三要素
• 彙編、編譯、解釋、執行
作業正文https://www.cnblogs.com/gly03/p/18548809
教材學習內容總結
電腦科學概論
功能設計與物件導向設計
功能設計是按照產品定位的初步要求,在對使用者需求及現有產品進行功能調查分析的基礎上,對所定位產品應具備的目標功能系統進行概念性構建的創造活動。而物件導向設計(Object-Oriented Design,OOD)則是一種軟體設計方法,它採用與結構化設計不一樣的視角,將世界抽象成一系列具有一定職責的自由資料個體(即物件),這些物件之間相互協作,共同完成高階的行為。
物件導向設計過程
物件導向設計過程是一個抽象的過程,它根據業務需求,關注與業務相關的屬性和行為,忽略不必要的屬性和行為,由現實世界中的“物件”抽象出軟體開發中的“物件”。這一過程通常包括以下幾個步驟:
- 發現類:透過在需求中找出名詞的方式確定類。
- 發現類的屬性:進一步細化類的特徵,明確每個類所包含的屬性和資料。
- 發現類的方法:透過找出動詞的方式確定方法,即類能夠執行的操作或行為。
此外,物件導向設計還需要關注物件之間的關係,如組合、繼承、分類、擴充套件等,並使用這些關係來描述物件之間的互動。
面嚮物件語言三要素
面嚮物件語言通常包含以下三個基本要素:
- 封裝(Encapsulation):封裝把資料和動作集中在一起,使資料和動作的邏輯屬性與他們的實現細節分離。它實現了資訊隱蔽,使得類的內部狀態只能透過類提供的方法進行訪問和修改,從而提高了程式碼的安全性和可維護性。
- 繼承(Inheritance):繼承是指類獲取其他類的屬性(資料欄位和方法)的機制。透過繼承,新的類(派生類或子類)可以繼承已有類(超類或基類)的屬性和方法,從而實現程式碼的重用和擴充套件。
- 多型(Polymorphism):多型是語言在執行時確定給定呼叫將執行哪些可能的方法的能力。它允許一個介面或父類引用指向子類物件,並在執行時根據物件的實際型別呼叫相應的方法。多型性提高了程式碼的靈活性和可擴充套件性。
需要注意的是,有些資料將“共享性”也列為面嚮物件語言的一個要素,但“封裝性(資訊隱蔽)”是更為核心和普遍接受的一個要素。
彙編、編譯、解釋、執行 - 彙編:組合語言是一種低階程式語言,它用助記符代替機器指令的操作碼,用地址符號或標號代替指令或運算元的地址。組合語言需要透過彙編器翻譯成機器碼才能執行。組合語言與特定的機器語言指令集一一對應,因此不同平臺之間不可直接移植。
- 編譯:編譯是將高階程式語言(如C、C++、Java等)編寫的原始碼轉換為可執行的機器語言的過程。編譯過程通常包括詞法分析、語法分析、語義分析、中間程式碼生成、程式碼最佳化和目的碼生成等階段。編譯後的程式可以直接在目標機器上執行。
- 解釋:解釋是在程式執行時將原始碼逐條翻譯成機器語言並執行的過程。解釋型語言(如Python、JavaScript等)不需要預先編譯成機器語言,而是由直譯器在執行時逐條解釋並執行原始碼。解釋型語言通常具有較好的靈活性和跨平臺性,但執行效率相對較低。
- 執行:執行是程式在機器上執行的過程。無論是編譯後的程式還是解釋執行的程式,最終都需要在目標機器上執行以完成特定的任務。執行過程涉及指令的讀取、解碼、執行和結果儲存等步驟。
C語言
在C語言中,陣列和指標是兩個非常重要的概念,它們各自有獨特的用途,但也存在緊密的聯絡。下面將分別介紹陣列和指標,並探討它們之間的關係。
陣列
陣列是一組具有相同型別的變數的集合,這些變數在記憶體中連續儲存。陣列透過下標來訪問其元素,下標從0開始。在C語言中,陣列名代表陣列首元素的地址(即陣列首地址)。
陣列的定義方式如下:
c複製程式碼
int arr[10]; // 定義一個包含10個整數的陣列
可以透過下標來訪問陣列中的元素,例如:
c複製程式碼
arr[0] = 1; // 設定陣列第一個元素為1
int value = arr[1]; // 獲取陣列第二個元素的值
指標
指標是C語言中的一個重要概念,它用於儲存變數的地址。指標變數本身也佔用記憶體,但其儲存的是另一個變數的地址,而不是資料值。
指標的定義方式如下:
c複製程式碼
int *ptr; // 定義一個指向整數的指標
可以將一個變數的地址賦值給指標,例如:
c複製程式碼
int x = 10;
ptr = &x; // 將變數x的地址賦值給指標ptr
透過指標可以間接訪問和修改它所指向的變數的值,例如:
c複製程式碼
*ptr = 20; // 修改指標ptr所指向的變數的值為20
int y = *ptr; // 獲取指標ptr所指向的變數的值
陣列與指標的關係
在C語言中,陣列名在大多數情況下都會被編譯器處理為指向陣列首元素的指標。這意味著,當我們把陣列名傳遞給函式時,實際上傳遞的是陣列首元素的地址,而不是整個陣列。
例如,以下函式接受一個整數陣列和一個陣列大小作為引數:
c複製程式碼
void printArray(int *arr, int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]); // 或者使用 *(arr + i)
}
printf("\n");
}
在呼叫這個函式時,我們可以傳遞陣列名和陣列的大小:
c複製程式碼
int main() {
int myArray[5] = {1, 2, 3, 4, 5};
printArray(myArray, 5); // 傳遞陣列名和大小
return 0;
}
在這個例子中,myArray作為陣列名被傳遞給了printArray函式,它實際上被處理為指向陣列首元素的指標(即&myArray[0])。
注意事項 - 陣列的大小在編譯時是固定的,而指標可以指向任何型別的變數,並且可以在執行時改變其指向。
- 當陣列作為函式引數傳遞時,陣列名會退化為指向陣列首元素的指標,因此函式內部無法獲取陣列的大小(除非透過額外的引數傳遞)。
- 指標操作需要謹慎,以避免野指標(未初始化或已釋放的指標)和指標越界等問題。
綜上所述,陣列和指標在C語言中各自扮演著重要的角色,它們之間既有區別又有聯絡。理解它們的概念和用法對於掌握C語言至關重要。