2024-2025-1 20241325 王向龍 《計算機程式與設計》第八週學習總結

20241325王向龙發表於2024-11-17

2024-2025-1 20241325 《計算機基礎與程式設計》第8周學習總結

這個作業屬於哪個課程 2024-2025-1-計算機基礎與程式設計
這個作業要求在哪裡 2024-2025-1計算機基礎與程式設計第八週作業
這個作業的目標 功能設計與物件導向設計 >物件導向設計過程 面嚮物件語言三要素 彙編、編譯、解釋、執行
作業正文 https://www.cnblogs.com/wangxianglong999/p/18551105

教材學習內容總結


功能設計

  • 功能設計主要著眼於系統應具備的具體能力和作用,圍繞使用者期望及業務需求展開。比如設計一款電商APP,要規劃商品展示、下單、支付等功能,注重流程順暢與實用性,它為後續開發奠定清晰的功能框架基礎。

物件導向設計

  • 物件導向設計把現實世界裡的實體抽象成軟體中的物件,像把汽車抽象成有屬性(顏色、型號等)和行為(啟動、行駛等)的物件。運用封裝隱藏內部細節,透過繼承複用程式碼,以多型實現不同形態下的靈活呼叫,讓軟體結構更靈活、易維護和擴充。

  • 二者緊密聯絡,功能設計確定大方向,物件導向設計則以其獨有的設計方式,將功能具體地用物件、類等元素構建實現,共同服務於高質量軟體系統的打造。


面嚮物件語言有三個關鍵要素,分別如下:

封裝

  • 封裝是指將物件的屬性和操作方法結合在一起,形成一個相對獨立的單元,對外隱藏物件的內部實現細節。就好比一臺電視機,使用者只需透過遙控器操作開關鍵、頻道調節鍵等簡單介面(相當於對外公開的方法),而不需要了解其內部電路構造(內部實現細節)等。透過封裝可以增強資料的安全性,避免外部隨意訪問和篡改物件內部的資料,同時讓程式碼的使用更加簡單清晰,不同部分之間的耦合性降低。

繼承

  • 繼承允許建立的新類(子類)基於已有的類(父類)來構建,子類會自動獲得父類的屬性和方法,並且還可以根據自身需求新增新的屬性和方法或者重寫父類的方法。例如,在動物分類體系中,“哺乳動物”類繼承“動物”類,它就擁有了動物類的基本屬性如“有生命”等,在此基礎上“哺乳動物”類又可以定義自身特有的屬性如“胎生”等。繼承提高了程式碼的複用性,減少了重複程式碼的編寫,也有助於構建更合理、有層次的類體系結構。

多型

  • 多型意味著同一個操作作用在不同的物件上,可以有不同的解釋和執行方式。比如在圖形繪製系統中,有“圓形”“矩形”等不同圖形類,它們都有“繪製”這個方法,但具體繪製圓形和繪製矩形的實現過程不同(即執行方式不一樣)。多型讓程式可以根據物件的實際型別靈活呼叫相應的方法,增強了程式的擴充套件性和靈活性,使得程式碼能更好地應對多種變化情況。

** 彙編**

  • 彙編是將組合語言源程式轉換為機器語言目標程式的過程。組合語言使用助記符來代表機器指令,比如用“MOV”代表資料傳送指令等。程式設計師透過編寫組合語言程式碼,再借助彙編器進行彙編操作,生成對應的二進位制機器碼,這些機器碼能夠直接被計算機硬體識別並執行。組合語言與硬體聯絡緊密,常用於編寫對效能、硬體控制要求較高的程式,像底層的驅動程式等,不過其編寫難度相對較大,程式碼可讀性比高階語言要差一些。

編譯

  • 編譯是把高階語言(如C、C++、Java等語言)編寫的源程式一次性地轉換成目標機器可執行的機器語言程式(在有些情況下是中間程式碼形式等)的過程。例如,使用C語言編寫了一個程式,透過編譯器(如GCC編譯器)對其編譯,編譯器會對源程式進行詞法分析、語法分析、語義分析等一系列處理,最終生成可執行檔案。編譯後的程式執行效率通常較高,不過如果源程式有修改,那就需要重新編譯整個程式才能再次執行。

解釋

  • 解釋則是另一種執行高階語言程式的方式,直譯器會逐行讀取源程式程式碼並立即執行相應的操作,不會像編譯那樣事先生成完整的可執行檔案。比如Python語言,執行Python指令碼時,直譯器逐行解析程式碼,遇到一條語句就執行一條語句對應的功能。這種方式的優點是便於除錯、修改程式碼後無需重新編譯等,靈活性強,但相對編譯型語言來說,執行效率往往會低一些,因為每次執行都需要重新解釋程式碼。

執行

  • 執行就是計算機執行已經經過彙編、編譯或者可以直接被解釋執行的程式程式碼,讓計算機按照程式碼中設定的邏輯完成相應任務的過程。對於編譯後的程式,作業系統可以直接載入可執行檔案到記憶體中執行;對於解釋型語言,直譯器在後臺持續對程式碼進行解讀並驅動相應的操作,最終實現程式預設的功能,像讓一個遊戲程式執行起來展示遊戲畫面、實現遊戲互動等就是執行程式的體現。

這幾種概念在程式從編寫到最終在計算機上執行發揮著各自關鍵的作用,並且相互配合推動軟體開發和執行的順利開展。


教材學習中的問題和解決過程

問題一:繼承具體指什麼,如何繼承,透過標頭檔案嗎?

繼承的含義

  • 繼承是物件導向程式設計中的一個重要概念,它指的是在建立新類(通常稱為子類或派生類)時,基於已有的類(稱為父類或基類)來構建的一種機制。子類會自動獲得父類的所有非私有屬性(成員變數)和方法(成員函式),就好像子類繼承了父類所具備的“能力”和“特徵”。
  • 例如,假設有一個“動物”類作為父類,它具有屬性“體重”“年齡”以及方法“進食”“睡覺”等。然後建立一個“哺乳動物”類作為子類,“哺乳動物”類就會自動繼承“動物”類的“體重”“年齡”這些屬性以及“進食”“睡覺”這些方法,在此基礎上,“哺乳動物”類還可以根據自身特點新增新的屬性如“胎生”,新增新的方法如“哺乳”等,同時也可以對從父類繼承來的方法進行重寫(修改其具體實現邏輯),以適應子類的特定需求。

如何實現繼承(以常見程式語言為例)

C++語言中的繼承實現

  • 在C++中,透過使用 : 符號後面跟上繼承方式(public、private、protected)來宣告繼承關係。例如:
class Animal {
    // 動物類的屬性和方法定義
    int weight;
public:
    void eat() {
        // 進食方法的實現邏輯
    }
};

class Mammal : public Animal {
    // 哺乳動物類在繼承動物類基礎上新增新屬性和方法
    bool isViviparous;  // 新增屬性,表示是否胎生
public:
    void lactate() {
        // 哺乳方法的實現邏輯
    }
};

這裡 Mammal 類透過 public 繼承方式繼承了 Animal 類,就獲取了 Animal 類的相關成員,同時可以擴充套件自身的內容。

Java語言中的繼承實現

  • 在Java中,使用 extends 關鍵字來表示繼承關係。示例如下:
class Animal {
    int weight;
    public void eat() {
        // 進食方法實現邏輯
    }
}

class Mammal extends Animal {
    boolean isViviparous;
    public void lactate() {
        // 哺乳方法實現邏輯
    }
}

Mammal 類透過 extends 關鍵字繼承了 Animal 類,從而繼承了相應的屬性和方法,並能進一步擴充。

關於標頭檔案(主要針對C++)

  • 在C++中,標頭檔案在繼承相關的使用場景中有重要作用,但它本身不是實現繼承的核心機制。標頭檔案常用於宣告類、類的成員以及類之間的關係等資訊。比如在上面 AnimalMammal 的例子中,通常會把 Animal 類的定義放在一個標頭檔案(假設叫 animal.h)中,像這樣:
#ifndef ANIMAL_H
#define ANIMAL_H

class Animal {
    int weight;
public:
    void eat();
};

#endif

然後在 Mammal 類所在的原始檔(假設叫 mammal.cpp)中透過 #include "animal.h" 把標頭檔案包含進來,這樣 Mammal 類就能知曉 Animal 類的結構,進而實現繼承等操作。不過要明確的是,標頭檔案只是一種方便組織程式碼、進行類宣告等的輔助手段,真正的繼承還是透過類定義中的語法(如 : 符號及後面的繼承方式)來達成的。

  • 而在Java等語言中,並沒有像C++這樣嚴格依賴標頭檔案的概念,Java透過包(package)機制等來管理類的組織和引用等,在實現繼承時重點還是在使用 extends 關鍵字構建類之間的繼承關係上。

總之,繼承是物件導向程式設計構建類層次結構、實現程式碼複用的關鍵特性,不同程式語言有著各自相應的語法來實現它,標頭檔案在部分語言中起到輔助宣告等作用但並非繼承的本質實現方式。
問題二:還是沒聽懂?捂臉

繼承的含義

  • 繼承是物件導向程式設計中的一個重要概念,它指的是在建立新類(通常稱為子類或派生類)時,基於已有的類(稱為父類或基類)來構建的一種機制。子類會自動獲得父類的所有非私有屬性(成員變數)和方法(成員函式),就好像子類繼承了父類所具備的“能力”和“特徵”。
  • 例如,假設有一個“動物”類作為父類,它具有屬性“體重”“年齡”以及方法“進食”“睡覺”等。然後建立一個“哺乳動物”類作為子類,“哺乳動物”類就會自動繼承“動物”類的“體重”“年齡”這些屬性以及“進食”“睡覺”這些方法,在此基礎上,“哺乳動物”類還可以根據自身特點新增新的屬性如“胎生”,新增新的方法如“哺乳”等,同時也可以對從父類繼承來的方法進行重寫(修改其具體實現邏輯),以適應子類的特定需求。

如何實現繼承(以常見程式語言為例)

C++語言中的繼承實現

  • 在C++中,透過使用 : 符號後面跟上繼承方式(public、private、protected)來宣告繼承關係。例如:
class Animal {
    // 動物類的屬性和方法定義
    int weight;
public:
    void eat() {
        // 進食方法的實現邏輯
    }
};

class Mammal : public Animal {
    // 哺乳動物類在繼承動物類基礎上新增新屬性和方法
    bool isViviparous;  // 新增屬性,表示是否胎生
public:
    void lactate() {
        // 哺乳方法的實現邏輯
    }
};

這裡 Mammal 類透過 public 繼承方式繼承了 Animal 類,就獲取了 Animal 類的相關成員,同時可以擴充套件自身的內容。

Java語言中的繼承實現

  • 在Java中,使用 extends 關鍵字來表示繼承關係。示例如下:
class Animal {
    int weight;
    public void eat() {
        // 進食方法實現邏輯
    }
}

class Mammal extends Animal {
    boolean isViviparous;
    public void lactate() {
        // 哺乳方法實現邏輯
    }
}

Mammal 類透過 extends 關鍵字繼承了 Animal 類,從而繼承了相應的屬性和方法,並能進一步擴充。

關於標頭檔案(主要針對C++)

  • 在C++中,標頭檔案在繼承相關的使用場景中有重要作用,但它本身不是實現繼承的核心機制。標頭檔案常用於宣告類、類的成員以及類之間的關係等資訊。比如在上面 AnimalMammal 的例子中,通常會把 Animal 類的定義放在一個標頭檔案(假設叫 animal.h)中,像這樣:
#ifndef ANIMAL_H
#define ANIMAL_H

class Animal {
    int weight;
public:
    void eat();
};

#endif

然後在 Mammal 類所在的原始檔(假設叫 mammal.cpp)中透過 #include "animal.h" 把標頭檔案包含進來,這樣 Mammal 類就能知曉 Animal 類的結構,進而實現繼承等操作。不過要明確的是,標頭檔案只是一種方便組織程式碼、進行類宣告等的輔助手段,真正的繼承還是透過類定義中的語法(如 : 符號及後面的繼承方式)來達成的。

  • 而在Java等語言中,並沒有像C++這樣嚴格依賴標頭檔案的概念,Java透過包(package)機制等來管理類的組織和引用等,在實現繼承時重點還是在使用 extends 關鍵字構建類之間的繼承關係上。

總之,繼承是物件導向程式設計構建類層次結構、實現程式碼複用的關鍵特性,不同程式語言有著各自相應的語法來實現它,標頭檔案在部分語言中起到輔助宣告等作用但並非繼承的本質實現方式。

基於AI的學習


程式碼除錯中的問題和解決過程

問題一:寫的程式碼不夠簡潔,繁瑣不易看懂且無法正確執行。
解決:詢問學長有關問題的解決辦法,知曉了對於題目分析的重要性——不要著急去解決問題,而是要先分析,再選擇語句體系,確定迴圈體和迴圈條件,最後才是敲寫程式碼。
問題二:在for(i=0;flag&&i<n;i++)中flag的作用是什麼?
解決:透過閱讀整段程式碼,以及分析題目,知道了flag的作用是確定在何時結束內層迴圈

上週考試總結:

感覺沒達到自己的預估水平,寫的程式碼繁瑣且缺少邏輯性,事後做了如下總結
1、心態不好,著急解決問題沒有分析;
2、寫程式碼的習慣不好,並沒有分析問題,確定迴圈語句和迴圈條件而直接進行程式碼的編寫,從這點看考試失利是理所當然。
3、個人邏輯習慣不好,需要慢慢更正;

學習進度:

|-------||程式碼行數|
|第八週| 300/500|

相關文章