Download presentation
Presentation is loading. Please wait.
Published byLucinda Coradelli Sanches Modified 6年之前
1
C++ 與 物件導向 程式設計概念簡介 魏天君 2018/12/3
2
如何學好 C++ ? 最重要的是練習!! 知道這些後,沒用過就等於是不知道 當然的確有去… 了解 C語言 了解 物件導向程式設計
了解 既有的物件 MFC .Net 公司 / 私人 所開發的 買來的 知道這些後,沒用過就等於是不知道 2018/12/3
3
如何成為高手? 光把程式寫對還不夠,要想辦法把它寫得漂亮 (包括良好的寫碼風格、清楚的註解、整體架構制定的技巧、對執行效率的掌握、採用適合的演算法等等) 使用別人寫好的程式碼並不可恥,真正的高手善於重覆利用現成的程式碼或函式庫 現代程式設計的重要理念:寫出易於維護的程式碼是最重要的事 2018/12/3
4
如何成為高手? 花時間寫程式 2018/12/3
5
Why OOP? 有效率地產生程式碼 有效率地維護程式碼 泡沫軟體 / 蒸氣軟體 (vaporware) 接手舊的程式碼 – 看得懂嗎?
dBASE IV Lotus 1-2-3 以往大部分的美國國防軟體專案 有效率地維護程式碼 接手舊的程式碼 – 看得懂嗎? 共同開發程式碼 – 如何讓切割開來的各個元件順利合作? 2018/12/3
6
軟體創意的瓶頸:市場 使用者越多,新標準就越難推 使用者不在乎技術的難度; 只在乎好不好用 使得技術難以更新
Web Browser 16-bits programs 32-bits 64-bits 使用者不在乎技術的難度; 只在乎好不好用 多半是很主觀的:順手、方便、可愛好看、…等 – 總之就是 “適合我” 少數是客觀的:免費、快、可靠度 2018/12/3
7
物件的種類 靜態 動態 C++ Struct & function call Objective – C 物件管理者
物件的行為在編譯後,轉化成低階結構化的程式碼 快速 藉由最佳化的過程使得OOP程式的執行效率接近傳統的程式 但是別用物件寫 Driver 動態 Objective – C 物件管理者 物件始終保持原貌,加大了物件的彈性 慢 物件可以在執行時取得型別資訊、製造新的method、製造新物件 – 代價就是:慢 2018/12/3
8
什麼是物件? 真實事物的抽象對應 真實事物:凡是生活上所用到的任何東西 抽象(abstract):將事物的性質抽出
黃金獵犬 狗 動物 黃金獵犬 寵物 家庭成員 黃金獵犬 … … 如何把 “真實事物”抽象化全憑當時的需要 這往往也是物件導向分析(OOA)的一個重要部份 2018/12/3
9
物件的六大特性 為了模擬世界,物件必須有「資料」與「行為」兩大部分,與下列六個特性: Page 39的圖 要有資料結構 要有狀態 要有行為
要可被識別 要可被創造與消滅 要有生命週期 Page 39的圖 2018/12/3
10
Class 與 Instance Class Instance Object
由一群具有相同資料結構與相同行為的物件,在依據某個特性分類後,所形成的集合 類似 data type / Struct int, float, double 貓, 狗, 人 Instance 由 class所定義的某個具有相同資料結構與行為的物件 類似 某類的變數;也就是要著明 “學名” int i, j, k; //中的 i, j, k 都是整數變數 float x, y, z; //中的 x, y, z 都是浮點數變數 Kitty 是一隻貓; Snoopy 是一條狗; Peter 是一位人 Object Instance 的統稱 類似 所有變數的總集合;不用特別提及 “學名” 上方的 i, j, k, x, y, z 都是變數 Kitty,Snoopy,Peter 都是生物 2018/12/3
11
介面與資訊隱藏 介面 資訊隱藏(Information hiding) 製作物件的課題之一就是決定資訊隱藏的對象(包含資料與行為細節)
是物件的保護層 所有的訊息(message)都是送到介面來 資訊隱藏(Information hiding) 除非萬不得已,否則最好將物件的資料與行為細節隱藏 外界要對物件進行操作,就必須透過介面 製作物件的課題之一就是決定資訊隱藏的對象(包含資料與行為細節) 2018/12/3
12
Message與Method Message Method Page 48 的四點注意 物件之間用來溝通的工具
例如:MS Windows的message-driven 機制 透過 message 來驅動物件的 method。但是不用了解物件是如何執行的 – 資訊隱藏 訊息參數 – 是一種參數(parameter),method 依其內容會執行不同的動作 訊息參數不同的值對應method不同的動作 Method 被介面包裝在物件內部的行為與動作程序 每個 method 都對應一種 message 反之,每個 message驅動一個 method Message 送抵物件後,物件會選擇適當的 method 來動作 用來保留較大的彈性 Page 48 的四點注意 2018/12/3
13
抽象化的分類 抽象化資料:例如抽象化資料型別 抽象化控制:例如分支控制、例外處理 抽象化程序:例如參數化、鏈結處理
將實際的資料改為軟體的資料,使得在處理上能更佳的方便 例如:C++ 的 class、class的各種繼承、代理關係 抽象化控制:例如分支控制、例外處理 將實際的流程改為軟體中的流程控制與例外處理 例如: C++ 的 Loop、condiotion、錯誤處理 抽象化程序:例如參數化、鏈結處理 「如何去完成」的抽象化結果;function call 例如: C++ 的虛擬函式、動態連結、範例模板 2018/12/3
14
OOP的三把權杖 Brad Cox 提出的 Software-IC需要下列特性 繼承性、封裝性、動態連結 物件與message
繼承性(inheritance) 封裝性(encapsulation) 動態連結(dynamic binding) 繼承性、封裝性、動態連結 可以說是OOP最重要的三大基石、三把權杖 2018/12/3
15
繼承性(inheritance) Class 重複的地方得以濃縮 可以建立整套的知識體系與分工階層模型
例如:「貓」跟「狗」都是「動物」,所以被貓狗繼承的動物負責製作兩者都有的部分 資料:體型 行為:跑、跳 可以建立整套的知識體系與分工階層模型 讓同心協力的物件群能分層負責地完成每項工作 2018/12/3
16
封裝性(encapsulation) 降低軟體整體的複雜度 好的介面是小而美的
藉由「介面」所達成的「資訊隱藏」可以大大地減少物件之間不必要的關聯性 同時減少物件之間的相互干擾 在修改物件時,不會影響到其他物件 好的介面是小而美的 小:只對外開啟必要的溝通管道 美:簡而言之就是方便好用 2018/12/3
17
動態連結(dynamic binding)
系統再程式執行時(run-time),才將message和method連結在一起。而非在編譯的時候,就將它們的關係固定下來 動態連結時,message和method的連結取決於message的值 送出 message後,自動會有合適的 method被執行 – 較有彈性 靜態連結:各 function call 只知道各個參數的型態而不是值 – 較有效率 2018/12/3
Similar presentations