第7天:物件導向程式設計 - 概念與應用
課程簡介
今天,我們將探討物件導向程式設計(Object-Oriented Programming, OOP)的基本概念和應用。OOP 是一種編程範式,將程式分解為「物件」,並藉由這些物件互相合作來完成任務。在 C# 中,OOP 是核心,掌握這些概念將有助於理解更複雜的程式架構。
學習目標
- 瞭解物件導向程式設計的四大核心概念:封裝、繼承、多型與抽象
- 學習如何定義類別和建立物件
- 瞭解屬性與方法在類別中的應用
- 使用建構函數來初始化物件
課程內容
1. 物件導向的核心概念
物件導向程式設計基於以下四個主要概念:
- 封裝(Encapsulation):將資料和方法綁定在一起,限制外部存取,以實現模組化和隱藏複雜性。
- 繼承(Inheritance):允許一個類別從另一個類別繼承屬性和方法,促進程式碼重用。
- 多型(Polymorphism):允許多種形態的物件處理相同的訊息,有助於增強程式的彈性。
- 抽象(Abstraction):通過簡化複雜問題,保留最重要的資訊,並忽略不重要的細節。
2. 定義類別與建立物件
在 OOP 中,「類別」(Class)是物件的藍圖,定義了物件的屬性和方法;而「物件」(Object)是基於類別創建的具體實例。
定義類別
- 使用
class
關鍵字來定義類別。
範例:
1
2
3
4
5
6
7
8
9
10
public class Person
{
public string Name;
public int Age;
public void Greet()
{
Console.WriteLine("Hello, my name is " + Name + ".");
}
}
建立物件
- 使用
new
關鍵字來創建物件。
範例:
1
2
3
4
Person person = new Person();
person.Name = "Alice";
person.Age = 30;
person.Greet();
3. 屬性與方法
類別可以包含「屬性」(Properties)和「方法」(Methods)。屬性描述物件的特徵,而方法則定義物件的行為。
屬性
- 屬性通常以
public
存取修飾詞定義,並使用大寫字母開頭。
方法
- 方法通常用於定義物件的功能,例如上面例子中的
Greet
方法。
4. 建構函數
建構函數是特殊的方法,在創建物件時自動呼叫,用於初始化物件的屬性。建構函數名稱與類別名稱相同,並且不需要回傳類型。
範例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Person
{
public string Name;
public int Age;
// 建構函數
public Person(string name, int age)
{
Name = name;
Age = age;
}
public void Greet()
{
Console.WriteLine("Hello, my name is " + Name + " and I am " + Age + " years old.");
}
}
// 創建物件並使用建構函數初始化
Person person = new Person("Bob", 25);
person.Greet();
此範例中,建構函數在創建 Person
物件時,自動初始化 Name
和 Age
屬性。
5. 繼承
繼承允許我們創建一個新的類別,繼承另一個類別的屬性和方法。C# 使用冒號(:
)來表示繼承。
範例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Animal
{
public void Eat()
{
Console.WriteLine("This animal is eating.");
}
}
public class Dog : Animal
{
public void Bark()
{
Console.WriteLine("The dog is barking.");
}
}
// 使用繼承
Dog dog = new Dog();
dog.Eat(); // 繼承自 Animal 類別
dog.Bark(); // Dog 類別的自有方法
在此範例中,Dog
類別繼承了 Animal
類別的 Eat
方法。
6. 多型
多型允許我們在父類別和子類別之間互換使用物件。使用 virtual
和 override
關鍵字可以定義和覆寫方法,實現多型。
範例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("The animal makes a sound.");
}
}
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("The dog barks.");
}
}
// 多型
Animal myAnimal = new Dog();
myAnimal.MakeSound(); // 呼叫 Dog 類別覆寫後的 MakeSound 方法
實作練習
- 建立一個類別並創建物件
- 在
Program.cs
中新增以下程式碼:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
using System; class Program { static void Main(string[] args) { Person person1 = new Person("Alice", 30); person1.Greet(); Dog dog = new Dog(); dog.Eat(); dog.Bark(); dog.MakeSound(); } } public class Person { public string Name; public int Age; public Person(string name, int age) { Name = name; Age = age; } public void Greet() { Console.WriteLine("Hello, my name is " + Name + " and I am " + Age + " years old."); } } public class Animal { public virtual void MakeSound() { Console.WriteLine("The animal makes a sound."); } public void Eat() { Console.WriteLine("This animal is eating."); } } public class Dog : Animal { public override void MakeSound() { Console.WriteLine("The dog barks."); } public void Bark() { Console.WriteLine("The dog is barking."); } }
- 在
- 執行程式
- 在終端執行:
1
dotnet run
- 檢視輸出,觀察類別之間的繼承關係以及方法的覆寫效果。
- 在終端執行:
教學重點
- 物件導向程式設計的四大核心概念。
- 建立類別並創建物件。
- 瞭解並使用建構函數來初始化物件。
- 繼承與多型的基礎應用。
在接下來的課程中,我們將進一步探討更進階的物件導向技術,如介面(Interface)與抽象類別(Abstract Class),並應用它們來構建更強大的程式結構!
本文章以 CC BY 4.0 授權