OOP

  • 205
  • 0
  • C#
  • 2024-07-10

物件導向OOP(Object-oriented programming)

以前都把技術筆記寫在自己的筆記本,想說既然都要寫部落格,把基本的技術觀念也記錄在部落格,增加記憶力XD

物件導向是甚麼:

類別(Class)算是一個藍圖、屬靜態的,他沒有實體(Instance)的概念。
物件(Object)是一個看的到、摸的到的實體,屬於動態的,狀態會隨時改變,但架構與行為不會改變。

比喻:
類別就像是設計房子的設計藍圖,而物件是實際蓋好的房子。
兩者的關係是設計藍圖(類別)決定了房子怎麼蓋,有幾台電梯,幾間房間,幾條走道。
而實際蓋好的房子(物件)是照著設計藍圖所蓋出來的房子,人只能照設計藍圖的設計使用這間房子,並不會多出一個手扶梯,因為藍圖沒有。

物件導向三大特性:

一.封裝

類別的內部成員可以封裝起來,讓別人不知道其如何實作,只能透過它提供的公開類別成員來進行操作。

例如開車你只需要知道如何啟動汽車,而不需要知道啟動汽車內部如何運作的。

class 使用者
   {
       static void Main(string[] args)
       {
           汽車 tv = new 汽車();
           tv.啟動();
       }
   }
   public class 汽車
   {
       public void 啟動()
       {
           開啟引擎();
       }
       private void 開啟引擎() { }
   }

二.繼承

子類別可以繼承父類別的能力,直接使用父類別非私有的屬性和方法

父類別又叫做基底類別(Base Class),子類別又叫做衍生類別(Derived Class)。

將 Car 做為「父類別」,只保留汽車共同的屬性與方法,另外建立 Honda 與 Toyota 的「子類別」並繼承 Car 「父類別」,當今天需要使用到 Honda 與 Toyota  這二個廠牌的汽車物件時,只要直接 new 出 Honda 與 Toyota  ,就可以擁有汽車的屬性與方法。

    public class Car
    {
        public string Color { get; set; }
        public int Speed { get; set; }
        public void 啟動()
    }

    public class Honda : Car
    {

    }

    public class Nissan : Car
    {

    }

三.多型

父類別可以定義和實作 virtual「方法」 ,而子類別可以決定要不要覆寫這些方法,換句話說,子類別可以提供自己的定義和實作。 當使用者在呼叫同一個方法時,可以有不同行為稱之為多型。

父類別的方法若宣告為虛擬(virtual),則表示該方法可以被子類別覆寫(非必需)

父類別的方法若宣告為抽象(abstract),則表示該子類別一定要覆寫該方法(子類別為抽象類別除外)

class 使用者
   {
       static void Main(string[] args)
       {
           父類別 tv = new 子類別();
           tv.方法1();
           Console.ReadLine();
       }
   }
   public class 子類別 : 父類別
   {
       //可覆寫或不覆寫父類別虛擬方法
       public override void 方法1() { Console.WriteLine("子類別方法1"); }
       //一定要覆寫覆類別的抽象方法
       public override void 方法2() { }
   }
   public abstract class 父類別 
   {
       //子類別會繼承該屬性
       public string 屬性1 { get; set; }
       //子類別自己決定要不要覆寫
       public virtual void 方法1() { Console.WriteLine("父類別方法1"); }
       //子類別必須覆寫
       public abstract void 方法2();
   }


物件導向優點:可重用性和可維護性高。