架構師訓練營第 1 期 - 第 02 周總結
編程的歷史
- 萊布尼茲 (1700年代) 
- 各種事物透過一種邏輯語言進行描述 
- 用一種可執行演算規則的機器進行計算 
- 通用計算機 
- 讀取數據進行計算 
- 數據包含計算的邏輯及數值 
- 計算邏輯 --> 程序 
- 馮諾伊曼 ENIAC 
- 編程 ->將電線編來編去 
- 打孔紙帶引入,提升編程效率 
- 匯編語言 (Assembly) 
- 與機器指令一對一對應 
- 面向機器編程 
- 由程式員自己控制硬件 
- 高級編程語言 (60年代) 
- 使用人類的邏輯思維方式 
- basic, pascal, fortran, c 
- 面向程序員自己的思維判斷 
- 面向過程編程 
- 耦合度隨系統增大而增大 
- 面向編程語言 
- 依對象之間的交互映射到計算機軟件中 
- 將對象設計出來,將對象間的交互設計出來 
編程語言的實質
- 目的: 用計算機來解決現實問題 
- 過程: 在計算機能理解的 "模型" (解空間)和現實世界(問題空間)之間,建立一種關聯 

- 各類語言的抽象 
- 問題領域 
- 包含宇系統所要解決的問題相關的實物和概念的空間 
- 機器代碼與匯編語言 
- 對基礎機器進行抽象 
- 非結構化高級語言 
- 對計算處理邏輯抽象 
- 結構化高級語言 
- 對問題領域進行一定程度的抽象 
- 面相對象的程序設計 
- 直接表達問題空間內的元素 
面向對象編程
- 面向對象 
- 萬物皆對象 
- 關心的是所要解決問題本身就是對象 
- 程序是對象的集合,他們通過發送消息(程序調用)來告知彼此所要做的事 
- 每個對象都又自己的由其他對象所構成的存儲 
- 每個對象都擁有其類型 
- 某一特定類型的所有對象都可以接收同樣的消息 
- 面向對象編程的三要素 
- 封裝性 (Encapsulation) 
- 隱藏實現細節 (訪問控制) 
- 定義接口 
- 構建對象邊界 
- 繼承性 (Inheritance) 
- is - a 關係 
- has -a 關係 
- 實現重用 
- 多態性 (Polyorphism) 
- 後期綁定 (虛函數) 
- 向上轉型 (Up casting) 
- 面向對象編程利用多態特性進行編程 
- 作法 
- 子類實現父類或者接口的抽象方法 
- 程序使用抽象父類或者接口編程 
- 運行時注入不同子類,程序就表現出不同的型態 
糟糕的代碼
- 僵化性 (Rigidity) 
- 每個改動都會迫使對系統其他部分的改動 
- 脆弱性 (Fragility) 
- 每個改動會使系統其他無關的地方出現問題 
- 牢固性 (Immobility) 
- 很難解開系統的糾結,使之成為一些可在其他系統中重用的組件 
- 黏滯性 (Viscosity) 
- 那些可以保持系统設計的方法比那些破壞設計的方法更難應用,就表明設計具有高的黏滯性,作錯誤的事情就很容易 
- 不必要的複雜性 (Needless Complexity) 
- 設計中包含當前沒有用的組成部分 
- 常出現於預測需求變化,並在系統中處理那些潛在變化的代碼時 
- 不必要的重複性 (Needless Repetition) 
- 設計中包含重複的結構 
- 常於 copy, cut, paste 編程時出現 
- 晦澀性 (Opacity) 
- 使用晦澀、費解的方式編寫 
面向對象編程原則 (SOLID)
- SRP (Single Responsibility Principle) 
- 內聚性原則 
- 一個模塊的組成元素之間的功能相關性 
- 將它與引起一個模塊改變的作用力相聯 
- 一個類,只能有一個引起它變化的原因 
- 一個職責 
- 一個變化的原因 
- OCP (Open Close Principle) 
- Open for extension 
- Close for modification 
- 不需要修改軟件實體(類、模塊、函式等),就能實現功能的擴展 
- 關鍵是抽象,針對抽象接口進行編程 
- LSP ( Liskov Substitute Principle) 
- 正確繼承的原則 
- 衡量繼承是否合理的原則 
- 在應用場景下,子類必須能夠替換掉它們的基類別,而不會影響程序的運行 
- ISP (Interface Segregation Principle 
- 不應該強派客戶程序依賴它們不需要的方法 
- ISP 與 SRP 的關係 
- ISP 與 SRP 都和 "內聚性" 有關 
- SRP 指出應該如何設計一個類 
- 只能有一種原因才能促使類發生改變 
- ISP 指出該如何設計一個接口 
- 從客戶需要出發,強調不要讓客戶看到他們不需要的方法 
- DIP (Dependency Inversion Principle) 
- 高層模塊不能依賴低層模塊,而是都依賴於抽象接口 
- 抽象不能依賴實現,而是實現依賴抽象 
- 框架設計的基本原則 
- 框架定義一些抽象接口 
- 由我們去實現這些接口 
- 框架只依賴這些接口,不依賴我們的實現 
- 好萊塢原則 
- Don't call me, I'll call you 
- Don't call 框架, 框架 will call you 
- 倒轉層次依賴關係 
版权声明: 本文为 InfoQ 作者【Panda】的原创文章。
原文链接:【http://xie.infoq.cn/article/10793786192c1879c06bf455d】。未经作者许可,禁止转载。












 
    
评论