写点什么

架構師訓練營第 1 期 - 第 02 周總結

用户头像
Panda
关注
发布于: 2020 年 10 月 03 日

編程的歷史

  • 萊布尼茲 (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

  • 倒轉層次依賴關係



发布于: 2020 年 10 月 03 日阅读数: 36
用户头像

Panda

关注

还未添加个人签名 2015.06.29 加入

还未添加个人简介

评论

发布
暂无评论
架構師訓練營第 1 期 - 第 02 周總結