文章

第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 物件時,自動初始化 NameAge 屬性。


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. 多型

多型允許我們在父類別和子類別之間互換使用物件。使用 virtualoverride 關鍵字可以定義和覆寫方法,實現多型。

範例:

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 方法

實作練習

  1. 建立一個類別並創建物件
    • 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.");
          }
      }
      
  2. 執行程式
    • 在終端執行:
      1
      
      dotnet run
      
    • 檢視輸出,觀察類別之間的繼承關係以及方法的覆寫效果。

教學重點

  • 物件導向程式設計的四大核心概念。
  • 建立類別並創建物件。
  • 瞭解並使用建構函數來初始化物件。
  • 繼承與多型的基礎應用。

在接下來的課程中,我們將進一步探討更進階的物件導向技術,如介面(Interface)與抽象類別(Abstract Class),並應用它們來構建更強大的程式結構!

本文章以 CC BY 4.0 授權