📌 各種程式語言的類別(Classes)比較:VBA、Python、Java、C++
不同程式語言對於 類別(Class) 的支援程度有所不同。以下是 VBA、Python、Java、C++ 在類別的應用上有哪些 相似點與不同點。
🔹 什麼語言支援類別(Class)?
| 語言 | 是否支援類別(Class) | 是否完全物件導向(OOP) |
|---|---|---|
| Python | ✅ 支援 | 🟢 完全物件導向 |
| Java | ✅ 支援 | 🟢 完全物件導向 |
| C++ | ✅ 支援 | 🟡 既支援 OOP,也支援程序式 |
| VBA | 🟡 部分支援 | 🔴 主要是程序式,但可以模擬 OOP |
| JavaScript | ✅ 支援(ES6+) | 🟢 支援物件導向,但也可當作函式式語言 |
| C(ANSI C) | ❌ 不支援 | 🔴 純程序式語言 |
✅ 完全物件導向(OOP)語言 → Python、Java
🟡 可用 OOP,但不是強制 OOP → C++、JavaScript、VBA
🔴 沒有內建類別機制 → C(但可以用 struct 和函數模擬)
🔹 各語言的類別語法比較
以下是 VBA、Python、Java、C++ 的類別語法比較,以「汽車(Car)」類別為例。
🔹 Python:動態語言,支援 OOP
Python 是 完全物件導向 的語言,所有東西(甚至整數、函數)都是物件。
class Car:
def __init__(self, brand, color):
self.brand = brand # 屬性
self.color = color # 屬性
def drive(self):
print(f"{self.color} 的 {self.brand} 正在行駛!")
# 創建物件
car1 = Car("Toyota", "紅色")
car1.drive() # 輸出:紅色 的 Toyota 正在行駛!
✅ Python 特點:
- 動態型別(變數類型可變)
- 支援多重繼承
- 物件可直接修改屬性
- 簡潔易讀,沒有強制變數類型宣告
🔹 Java:強型別、純物件導向
Java 是 純物件導向 的語言,所有東西都必須定義在類別內。
class Car {
private String brand;
private String color;
// 建構子
public Car(String brand, String color) {
this.brand = brand;
this.color = color;
}
// 方法
public void drive() {
System.out.println(color + " 的 " + brand + " 正在行駛!");
}
public static void main(String[] args) {
Car car1 = new Car("Toyota", "紅色");
car1.drive(); // 輸出:紅色 的 Toyota 正在行駛!
}
}
✅ Java 特點:
- 強型別(變數類型固定)
- 必須顯式定義類別與方法
- 所有物件屬性預設是 private(封裝性強)
- 不支援多重繼承(但可以用 interface 模擬)
🔹 C++:支援 OOP,但不強制
C++ 既可以用 OOP,也可以用傳統程序式方式開發。
#include <iostream>
using namespace std;
class Car {
private:
string brand;
string color;
public:
// 建構子
Car(string b, string c) {
brand = b;
color = c;
}
void drive() {
cout << color << " 的 " << brand << " 正在行駛!" << endl;
}
};
int main() {
Car car1("Toyota", "紅色");
car1.drive(); // 輸出:紅色 的 Toyota 正在行駛!
return 0;
}
✅ C++ 特點:
- 強型別(類似 Java)
- 可使用 OOP,也可使用程序式開發
- 支援多重繼承
- 手動管理記憶體(new/delete)
🔹 VBA:基本上是程序式,但可以模擬類別
VBA 不是天生的 OOP 語言,但可以用 Class Module 來建立類別。
🔹 VBA 定義類別的方法
- 在 VBA 編輯器 中,點選「插入(Insert)」→「類別模組(Class Module)」
- 重新命名類別(例如:
Car) - 輸入以下程式碼:
' VBA 類別(Car.cls)
Private pBrand As String
Private pColor As String
' 設定品牌
Public Property Let Brand(value As String)
pBrand = value
End Property
Public Property Get Brand() As String
Brand = pBrand
End Property
' 設定顏色
Public Property Let Color(value As String)
pColor = value
End Property
Public Property Get Color() As String
Color = pColor
End Property
' 方法:開車
Public Sub Drive()
MsgBox pColor & " 的 " & pBrand & " 正在行駛!"
End Sub
🔹 VBA 使用類別的方法(標準模組)
Sub TestCar()
Dim myCar As New Car
myCar.Brand = "Toyota"
myCar.Color = "紅色"
myCar.Drive ' 彈出訊息框:紅色 的 Toyota 正在行駛!
End Sub
✅ VBA 特點:
- 主要是程序式語言
- 支援類別(透過 Class Module)
- 沒有真正的建構子(Constructor)
- 不支援繼承
- 主要應用在 Office 自動化(Excel、Word、Access)
🔹 Python、VBA、Java、C++ 類別的相似與不同
| 語言 | 支援 OOP? | 動態/靜態型別 | 支援繼承? | 支援多重繼承? | 主要應用領域 |
|---|---|---|---|---|---|
| Python | ✅ 是 | 動態型別 | ✅ 是 | ✅ 是 | AI、Web、數據分析 |
| Java | ✅ 是 | 靜態型別 | ✅ 是 | ❌ 否 | 企業系統、App |
| C++ | ✅ 是 | 靜態型別 | ✅ 是 | ✅ 是 | 遊戲、系統開發 |
| VBA | 🟡 部分支援 | 動態型別 | ❌ 否 | ❌ 否 | Office 自動化 |
🔹 總結
✅ Python、Java、C++ 都是 OOP 語言,但 Python 更靈活,Java 更嚴格,C++ 可 OOP 也可程序式。
✅ VBA 不是完全的 OOP,但可以模擬類別,適用於 Office 自動化。
✅ 學 OOP 的最佳語言 → Python(簡單易學),Java(規範嚴謹),C++(高效能),VBA(Office 應用)。
如果你想更深入學習某種語言的類別用法,歡迎問我! 🚀😊
沒有留言:
張貼留言