--- title: Lesson # 簡報的名稱 tags: Python Tutorial # 簡報的標籤 slideOptions: # 簡報相關的設定 # theme: solarized # 顏色主題 transition: 'fade' # 換頁動畫 parallaxBackgroundImage: 'https://cdn.discordapp.com/attachments/887196342135451652/889752537513750588/image0.png' parallaxBackgroundSize: '2100px 1000px' defaultTiming: 120 --- {%hackmd @ZZRT/CSS %} # 物件導向 Object Oriented --- Why OOP? - **減少重複的程式** - **易於維護、擴充** - 提高可讀性 - 有許多以物件導向為基礎的設計模式讓開發更快速 ---- What is OOP? ---- 物件導向程式設計 全名: Object Oriented Programming **類別**和**物件** 相對於物件導向,函數式程式語言像命令的形式讓電腦一步一步執行指令 而物件導向則是把所有的東西都視為一個機器 ---- 類別 ---- 類別定義了一件事物的特點 -- 屬性(attribute) 與如何操作物件的手段 -- 方法(method) ---- 物件 ---- 類別的實例(instance) 每個物件都具有類別的屬性和方法 並且都是獨一無二的 --- ```python # 鍵盤類 class Keyboard: model rating price ... ``` ---- 這是個鍵盤(物件)  ---- 這也是個鍵盤..  ---- 他們都屬於Keyboard類的**實例**(物件) 具有類別的屬性和名稱 ---- Keybord object  id: DKUSB1P02E3390197**3**K701  id: DKUSB1P02E3390197**9**K701 每個物件都是獨一無二的 藉由id(物件) 可以判斷是否為同一個物件(記憶體位址) ---- 鴨子型別: 「當看到一隻鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那麼這隻鳥就可以被稱為鴨子。」 ---- 我們不需要知道它是什麼種類的鴨子 只要知道它具有鴨子的行為 ---- 以物件的角度來看: 我們在意**操作物件的方法**(可以做什麼),而不是物件的類別 就像一顆滑鼠 不需要知道它的廠牌/型號 只要知道它的有左鍵、右鍵、滾輪… 就可以使用 ---- 我們關心的是**做甚麼** 而不是**怎麼做** --- ## 物件導向3+1要素 --- ## 繼承(inheritance) **提出相同的部分** ---- 子類別藉由繼承超(父)類別 使用超類裡的屬性和方法 繼承: **是一個**的關係 `Acer MOJFUO滑鼠` 繼承 `滑鼠` `Acer MOJFUO滑鼠` 是一個 `滑鼠` 錯誤: `兒子` 繼承 `父親` `兒子` 是一個 `父親` (??? ---- <ol class=quiz> Q1. 判斷以下的繼承關係是否正確 <li data-ans="o">貓 繼承 動物</li> <li data-ans="x">按鍵 繼承 鍵盤</li> <li data-ans="x">iphone12 繼承 iphone1</li> </ol> ---- ```python= class Mouse: 左鍵 右鍵 滾輪 usb線 # 非正式寫法 ``` ---- 繼承滑鼠類 ---- 可以擴充(extend)超類別 ---- 也可以複寫(overrider)超類別的方法或屬性 ex: 無線滑鼠 ---- 繼承的目的在於**提出相同的部分** 減少程式碼重複 當有過多的子類複寫超類的方法 就要重新檢視繼承的合適性 ---- 繼承常被濫用 要謹記繼承的核心觀念: **提出相同的部分** **是一個**的關係 --- ## 封裝 將複雜的方法**封裝**在類別裡 使用者只要知道他能做甚麼 ---- 將複雜的機構封裝在傳動系統裡 使用者只需要知道如和踩油門 不用知道齒輪箱裡的齒輪有幾齒 ---- 封裝會變動的東西 繼承提出相同的東西 因此**牽一髮而動全身** 將容易變動的部分封裝起來 避免複寫超類別 --- ## 多型 ---- 讓相同的方法在不同類別有不同的行為 進一步減少對類型的判定 和if-else判斷式 ```python= cat = Cat() dog = Dog() if isinstance(animal,Cat): animal.meow() elif isinstance(animal,Dog): animal.bark() ``` 當類別越來越多.. ```python= animals = [cat, dog, bird, pig, ...] for animal in animals: if isinstance(animal,Cat): animal.meow() elif isinstance(animal,Dog): animal.bark() elif isinstance(animal,Bird): animal.bark() elif isinstance(animal,Pig): animal.bark() ... ``` --- 抽象 ---
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up