[post] new post
All checks were successful
/ deploy (push) Successful in 53s

This commit is contained in:
SouthFox 2024-06-23 23:35:40 +08:00
parent 12506255f0
commit 0cc0bff05a

View file

@ -0,0 +1,43 @@
+++
title = "程序员的底层思维"
author = ["SouthFox"]
date = 2024-06-23T21:57:00+08:00
lastmod = 2024-06-23T23:35:39+08:00
tags = ["publish"]
draft = false
+++
## 抽象思维 P3 {#抽象思维-p3}
[抽象]({{< relref "../main/20240623221313-抽象.md" >}})是指将众多事物中的一些共有特性抽取出来。例如实际的牛(实例)和壁画上的简笔画牛(类)。
## 1.4.3 抽象会导致基本类型偏执 P9 {#1-dot-4-dot-3-抽象会导致基本类型偏执-p9}
[抽象]({{< relref "../main/20240623221313-抽象.md" >}})不足导致的[基本类型偏执]({{< relref "../main/20240623222006-基本类型偏执.md" >}})是一种典型的坏味道。
对于一个手机号不仅仅是一个数字类型或是字符串,它或许有区号、校验等属性。
- ISBN: 校验、形式转换
- 货币:数量,单位
## 1.4.6 不要为了抽象而抽象 P15 {#1-dot-4-dot-6-不要为了抽象而抽象-p15}
[抽象]({{< relref "../main/20240623221313-抽象.md" >}})并非百利而无一害,有时只是两个类型碰巧表现一致但底层可是完全不同的类型。
## 1.5.3 子类应该能完全代替亲类 P22 {#1-dot-5-dot-3-子类应该能完全代替亲类-p22}
[SOLID]({{< relref "../main/20240623230409-solid.md" >}}) 原则,其中 I 代表里氏替换原则Liskov Substitution Principle即是子类应该替换任何亲类之后依然能正常工作。
例如对于水果,定义 `isSweet``isJuicy` 为什么不在亲类定义 `isTasty` 然后给具体子类实现?
## 抽象层次应该一致 P24 {#抽象层次应该一致-p24}
[抽象一致性原则]({{< relref "../main/20240623233206-抽象一致性原则.md" >}}) Single Level of Abstration Principle SLAP ,意为应该把抽象层次相同的代码放在一起。
例如冲泡咖啡这件事,应该把判断要冲的咖啡和要加的调料方法提前抽出来然后在实际操作中进行实例化而不是直接在冲泡方法中进行判断。
\*