---
# System prepended metadata

title: 第9章 物件導向設計OOD、高階程式語言
tags: [Introduction of computer science]

---

# 物件導向設計分解過程
頭腦風暴Brainstroming: 列出問題的可能Class清單。
篩選Filtering: 確認核心Class。
場景Scenarios: 分配責任。
責任演算法Responsibility Algorithms: 為每個Class的責任寫出演算法。

# 程式執行
* **編譯器Compiler** 一次轉成機器碼。通常比直譯器快，因為只需翻譯一次。

* **直譯器Interpreter(解釋器)** 逐行翻譯並直接執行(不產生機器碼)。

* **組譯器Assembler(彙譯器)** 逐行翻譯成機械碼，相較於高階語言**移植性更低**

* **JAVA** 先**編譯**成 Bytecode，再由 JVM (Interpreter) 執行

* **Bytecode** 一種中間代碼，需要直譯才能變成機械語言。

編譯器

# 範式Paradigm
* **指令式範式Imperative Paradigms** 注重於解決問題的過程(要怎麼做)。
    - 程序範式Procedural Paradigms 
    將程式的語句分組成子程序，每個子程序執行解決整個程序所需的特定任務。
    例如C、Python、JAVA。

    - 物件面向範式Object-Oriented Paradigm
    資料物件是主動的。物件及其被操作的程式碼被捆綁在一起
    使每個物件都負責其自身的操作 - responsibility
    例如JAVA(偏向於物件面向)、Python。


* **宣告式範式Declarative Paradigms** 注重於想要達到的結果(要做什麼)。
    - 函式： 基於數學函數的概念，問題的解決以函數呼叫的形式表達
    沒有變量，也沒有賦值語句。例如，兩個值的加法可以這樣表示：(+ 30 40)
    
    - 邏輯： 從規則推斷出答案。
    ```
    owns(mary, bo).
    owns(ann, kitty).
    owns(bob, riley).
    ```
    owns是關係名稱，對象位於括號內，
    表示mary擁有bo或bo擁有mary取決於設計師，但須保持一致

# Functionality of Object-Oriented Languages
* **Encapsulation 封裝** 
封裝的實現機制是**Class**。
將數據和操作捆綁在一起，以使數據的邏輯特性和操作與**實現細節分離**。
這樣一來，封裝強制實現了**信息隱藏**。

* **Inheritance 繼承**
層次結構中的Class位於越下層，就會繼承其父Superclass的所有行為和數據(資料越複雜)
。
```
Person class
Superclass：無
Derived class：Student

Student Class
Superclass：Person
Derived class：無
```
* **Polymorphism 多型、多態性**
**具有相同的名稱但不同的實現方法，根據調用對象的不同而執行不同的版本**
使得代碼更容易維護且更具擴展性
```
考慮一個稱為 Animal 的基類別，派生出 Dog 和 Cat 這兩個子類別。
假設這些類別都有一個名為 MakeSound 的方法，
但每個類別的 MakeSound 方法實作都不同。
當你調用某個 Animal 類別的實例的 MakeSound 方法時，
系統會動態選擇執行該實例實際所屬類別的 MakeSound 方法
```
    
    
# Boolean Expression
| Symbol | Meaning |
| -------- | --------|
|  **!=** or **<>** or **/=**  | Not Equal   |
| **=** or **==** |   Equal   |


# 物件導向設計OOD
將數據和操作封裝在class中，**封裝性**、**重用性**、**維護性**、**擴展性**。