Slide 1

Slide 1 text

物件導向的 文 藝復興: 用 DCI重塑程式設計的藝術 高 海峰 Hai Feng Kao iOS 工 程師, 苦命iOS@Taipei固定講者

Slide 2

Slide 2 text

https://robiul.dev/what-are-programming-paradigms-master-all-popular-ones 什麼是物件導向程式設計?

Slide 3

Slide 3 text

學校的答案 繼承 物件導向的核 心 概念, 用 於建立 類別之間的階層關係。 封裝 將數據和 行 為封裝在物件內部, 隱藏實現細節。 多型 為不同資料類型的實體提供統 一 的介 面

Slide 4

Slide 4 text

真實的客 戶 評價

Slide 5

Slide 5 text

學校的答案帶來的軟體浩劫 奇怪的繼承關係 物件導向程式設計中,複雜的繼 承階層和令 人 困惑的關係 錯誤的設計實例 適當的抽象化和封裝概念,會產 生 不合理的程式設計實例 物件肥 大 的問題 需求增加導致物件肥 大 ,使得物 件的程式碼長達數千 行 ,創造離 職的念頭 隱藏的依賴關係 物件之間隱藏的依賴關係,增加 了系統的複雜度和脆弱性。改 一 個地 方 壞三個地 方

Slide 6

Slide 6 text

奇怪的繼承關係

Slide 7

Slide 7 text

奇怪的繼承關係

Slide 8

Slide 8 text

奇怪的繼承關係 到底是誰要繼承誰? 鳥 到底是什麼?

Slide 9

Slide 9 text

奇怪的繼承關係 1 UIScrollViewController 負責滾動 2 ZoomableViewController 負責畫 面 放 大 縮 小 3 PullToRefreshViewController 負責下拉刷新

Slide 10

Slide 10 text

物件肥 大 的問題 封裝導致上帝物件(God Object)出現,使程式碼難以維護。私有變數(private variable)造成資料分散,增加系統複雜度

Slide 11

Slide 11 text

模組化就是童話故事 模組就像 一 棵棵樹 木 ,長在我們的程式碼 里 。 隨著時間經過,開枝散葉,最後連的亂七八糟,把 自己 和我們的 人 生 都毀了 千萬不要挑戰抽象滲漏法則 這種以類別為中 心 的設計,忽視了林 木 之間的互動和依存關係。 https://www.youtube.com/watch?v=ZDpPmK5VQLA

Slide 12

Slide 12 text

Alan Kay的先 見 之明 I thought of objects being like biological cells and/or individual computers on a network, only able to communicate with messages (so messaging came at the very beginning it took a while to see how to do messaging in a programming language efficiently enough to be useful). • Kay早有將物件比作活細胞的巧思,展現其前瞻性思維和深邃的物件導向理解。

Slide 13

Slide 13 text

Alan Kay的先 見 之明 I thought of objects being like biological cells and/or individual computers on a network, only able to communicate with messages (so messaging came at the very beginning it took a while to see how to do messaging in a programming language efficiently enough to be useful). • Kay早有將物件比作活細胞的巧思,展現其前瞻性思維和深邃的物件導向理解。

Slide 14

Slide 14 text

學校教育中的誤解 誤解物件 學校教學 一 味強調類別與繼承,忽略了物件 之間的互動設計。 缺乏物件 許多教材所謂的「物件導向」實際上只是 堆疊類別,背離了物件導向的本質。 真正的物件導向 真正的物件導向強調物件彼此合作,以互動 為重, 而 非僅是類別繼承。

Slide 15

Slide 15 text

引入DCI架構 Trygve Reenskaug不僅是物件導向思想的先驅,也是MVC模式的發明 人 。 DCI(Data-Context-Interaction)是 一 個與類別導向截然不同的架構設計,提出以情 境(Context)和互動(Interaction)作為設計的核 心 ,顛覆了現有OOP的思維。 這位先驅性 人 物的貢獻,為物件導向的未來指明了全新的 方 向。

Slide 16

Slide 16 text

DCI的三 大支 柱 Data 物件的本質,純粹的資料存在。不 論是企鵝還是鴨 子 ,都可以是資料 的載體。 Context 負責定義物件的 角色 分配,使物件 的 行 為有了意義。 Role (Interaction) 物件的 行 為,純粹的函數存在。相 同Context的Role組成了物件的互 動關係

Slide 17

Slide 17 text

DCI之Data 企鵝、鴨 子 等動物都可以是Data的載 體,因為Data本質上只是純粹的資訊存 在。 即使是抽象的UUID也可以擔任Data的 角色 ,Data本 身 並不具備任何 行 為。

Slide 18

Slide 18 text

DCI之Context與Role Context Context負責處理依賴注入(Dependency Injection)並創造 角色 (Role),確保物件之間有明確的互動關係。 Role (Interactions) Context會賦予Data特定的 角色 ,並可創造其他Context以建立更複 雜的互動網絡。

Slide 19

Slide 19 text

DCI之Context與Role Context Context負責處理依賴注入(Dependency Injection)並創造 角色 (Role),確保物件之間有明確的互動關係。 Role (Interactions) Context會賦予Data特定的 角色 ,並可創造其他Context以建立更複 雜的互動網絡。

Slide 20

Slide 20 text

DCI之Context與Role Context Context負責處理依賴注入(Dependency Injection)並創造 角色 (Role),確保物件之間有明確的互動關係。除此以外,Context還要 負責執 行 Role (Interactions) Context會賦予Data特定的 角色 ,並可創造其他Context以建立更複 雜的互動網絡。

Slide 21

Slide 21 text

多型不 見 了 • Swift不 支 援

Slide 22

Slide 22 text

結語 更多課程 想學更多可以參加Jim Copilen開 設的課程。 課程內容 課程時間為2天,費 用 為800歐 元。 課程網址 課程網址為https://codecamp.ro/masterclasses/data-context-and- interaction-dci-2/。