物件導向設計基本概念、三大特性(封裝、繼承、多型)、Class(類別)、封裝Encapsulation、繼承Inheritance、多型Polymorphism
類別Class
類別Class就像是設計藍圖、範本,定義物件的內部結構以及特點,而在程式世界則是由屬性(attribute)以及方法(method)構成。
程式語言C#,用人來當範例:
如下抽象人的類別,屬性有姓名、性別、年齡,方法有吃的動作。
class person
{
public string Name = "";
public string age = "";
public string sex = "";
public string eat()
{
return "eat apple";
}
public string sayDetial ()
{
return "name : " + Name + "、age : " + age + "、sex : " + sex;
}
}
物件Object
物件Object就像實體的東西,例如人、鳥、狗、貓等等,在程式世界就是New的概念,將類別實體化。
搭配上述類別範例來實體化一個人,宣告p這個實體,名字是Alex、性別是M、年齡是25,行為能夠吃蘋果以及說出基本資料。
static void Main(string[] args)
{
person p = new person();
p.Name = "Alex";
p.sex = "M";
p.age = "25";
Console.WriteLine(p.eat());
Console.WriteLine(p.sayDetial());
Console.Read();
}
結果:
三大特性
一.封裝Encapsulation
顧名思義將資料封裝起來,定義那些屬性以及方法是否對外提供存取,而使用者只能知道類別哪些是對外公開,而無法得知內部構造,我們用上述類別為例,只知道可以透過sayDetial()取得基本資料,而我們並不會知道它內部是如何取得資料。
封裝修飾詞:
1.public(無任何限制)
2.protected(僅允許在自已類別和子類別中存取)
3.private(僅允許在自己類別存取)
二.繼承Inheritance
子類別(subclass)也可稱之為衍生類別(derived class)。
父類別(super class)也可稱之為基礎類別(base class)。
當子類別繼承了父類別代表,子類可以擁有父類所提供的屬性(attribute)以及方法(method),將共通點傳承下來衍生出自己新的特點,最大的目的就是code reuse,減少程式中重複的部分。
範例我們一樣沿用上述person類別實現繼承的例子。
//artist(子類)繼承了person(父類),衍生了自己新的屬性以及方法卻不需要再重新撰寫Name、sex,因為繼承了父類
class artist : person
{
public string stageName = "";
public String skill()
{
return stageName + " 正在用水彩畫畫";
}
}
private static void Main(string[] args)
{
artist art = new artist();
art.Name = "美美";
art.sex = "F";
art.age = "20";
art.stageName = "築夢踏實";
Console.WriteLine(art.skill());
Console.WriteLine(art.eat());
Console.WriteLine(art.sayDetial());
Console.Read();
}
結果:
三.多型Polymorphism
多型又包含了多載(Overloading)以及複寫(Overloading)。
多載(Overloading)
多個相同名稱的Method,因傳入不同的參數,依序各別執行。
string showparms(string p1)
{
return p1;
}
string showparms(string p1, string p2)
{
return p1 + p2;
}
覆寫(Overloading)
當父類提供的Method實作結果並非子類別想要的,此時可以透過覆寫的方式來重新實作。
//假設鳥的叫聲預設是嘰嘰喳喳,但是當貓頭鷹繼承了鳥類別,而發出的聲音則是嗚嗚,此時可利用覆寫的方式實作
class bird
{
protected virtual string makeSound()
{
return "嘰嘰喳喳";
}
}
class owl : bird
{
protected override string makeSound()
{
return "嗚嗚";
}
}
物件導向設計五大原則SOLID可參考:https://dotblogs.com.tw/jc_blog/2019/11/21/solid