Software Engineering - Simbo 課堂共筆

這是這三週大家可共同維護的筆記。型式不拘,主要方便參與者與講者留存課堂上交流過的資訊。


暖場 (FizzBuzz)

3 的倍數喊 Fizz, 5 的倍數喊 Buzz, 3&5 的倍數是 FizzBuzz.

#Specification By Example

Week1

電商算運費1

依長寬高之和計費,每單位(CM)收5元(黑貓)。 10min,帶測試。

增加新竹貨運的運費算法

依體積計費

重構

  1. 把長寬高物件化
  2. 去掉 if-else

重構方法

  1. 修改小地方
  2. 執行測試通過
  3. commit

Week2

何謂物件導向

程式工程師以 Domain Model 來描述世界並試著解決問題

Domain Model 越擬真,成本越高,在關注議題足夠像就可以了

物件導向特性

封裝

將資料「bundle」在一起

沒有行為的物件不是好物件

多型

對外介面一樣,實作內容不同 => 接受呼叫者決定意義,而非呼叫者

Static: Overloading 同名 function 但 parameters 不同

Dynamic: Overriding 改寫父類別 function

繼承

除了重複利用程式碼外不是目的,只是附帶作用,繼承的最大好處是可以多型。

反之,沒有要多型的時候不要繼承

重構目的與時機

重構:維持一樣的對外介面,但改變內部設定

目的

需求改變時得到更適合的設計

時機

  • 就目前已知的場景設計
  • 用測試保護功能,確保未來情境改變時,原有功能依舊正確

OOP 設計原則

高內聚

做一起的事就放在一起

低耦合

做不同事就分離它們

SOLID

Week 3

Coding Session

  • 訂單總價計算器:

    • Input be like: { "items": [ { "product": "book", "price": 500, "quantity": 3 }, { "product": "pen", "price": 30, "quantity": 4 } ], "transportation": 80 }

    • 無任何優惠:500 * 3 + 30 * 4 + 80 = 1,700

    • Out: the total price

課後問卷

https://forms.gle/HwCLEJFgH2U4PJP97

推薦書目

重構

你就是不寫測試才會沒時間

Select a repo