物件導向程式設計

在寫這章投影片的時候我猶豫了很久,這週的內容對於成為一個觀念正確的程式設計師,可以說是相當重要的,但內容卻又生硬了點,於是我決定把物件導向程式設計的五個特色獨立成這一個文件,如果你對於成為食字獸有所恐懼,可以先行跳過本章,並不會因此就看不懂以後的內容,遇到問題再回來重讀仍然是可以的。

我們先來一段程式碼,這裡面會出現少許還未學過的語法,但各個物件的功能大家應該能從我們熟悉的Stringprint()這些程式碼猜測出來。我們也幫大家準備好模擬器裡面寫好的版本

class 人類 {
    var 名字:String
    func 打招呼(對象: String) {
        print("你好!", 對象)
    }
    init(名字:String) {
        self.名字 = 名字
    }
}
class 工程師: 人類 {
    func 使用電腦() {
        print(self.名字, "打開了電腦,開始寫程式")
    }
}
class 鄉民: 人類 {
    func 使用電腦() {
        print(self.名字, "打開了電腦,開始逛批踢踢")
    }
    override func 打招呼(對象: String) {
        print("欸,", 對象)
    }
}
// 實際使用的程式碼
var 妹妹 = 人類.init("凹凹")  // 毫無反應,就是個妹妹
var 教主 = 工程師.init("教主") // 教主是個工程師
var 天道 = 鄉民.init("天道")  // 天道是個鄉民

在上面的程式碼中,我們設計了人類工程師鄉民三種物件類別,此時,我們的程式碼還沒有產生實際的意義,電腦知道了什麼是人類工程師鄉民,但想像一下就知道,人類這個類別既不會有名字,也無法打招呼。

要確實的使用這些物件類別,我們必須得宣告實際的物件,例如範例程式碼中的人類物件妹妹,她擁有一個名字凹凹,也可以真的去使用打招呼()的指令,程式碼進行到這邊才有了實際的意義,這是物件導向程式設計的第一個特色「抽象」,意思是物件類別在被實例化之前,都只是抽象的概念。

現在,你可以繼續加入程式碼,例如先試著讓教主和你打招呼。

教主.打招呼("在這邊輸入你的名字")

在這行程式碼內,你其實並不知道打招呼這個指令是怎麼編寫而成的,但你在我的介紹之下,確實知道這個指令會有什麼效果。物件導向程式設計隱藏了大部分指令的具體執行步驟,在較龐大的專案中,這減低了程式設計複雜性,並且維護了指令的一致性和安全性,這個特色叫做「封裝」。

其次,教主是個工程師物件,此類別的物件領地內只有一個自訂指令使用電腦(),然而你的打招呼()程式碼卻被正確執行了,這是因為藉由class 工程師:人類的宣告,電腦將認為所有工程師物件都是人類(但所有人類未必都是工程師),因此人類所擁有的屬性名字和自訂指令打招呼()工程師都能使用,這個特色叫做「繼承」。

教主.使用電腦()
天道.使用電腦()

我們再讓天道和教主都去使用電腦,即使他們都是人類,卻仍然各自印出了不同的訊息,這是因為使用電腦()這個行動在鄉民工程師兩種物件裡面擁有不同的設計,這個特色叫做「多型」。

results matching ""

    No results matching ""