抽象化就是你的超能力

更新於 發佈於 閱讀時間約 3 分鐘

Abstraction is your power to software design

前幾天突然想起好多年前到泰國出差的時候,同事看到我在找垃圾桶要做垃圾分類,他突然冒出一句 「Everything’s general」。意思是你不知道怎麼分類就放進一般垃圾就對了,貌似玩笑的一句話其實隱含著軟體抽象設計的道理。

天天用的能力

不管你的物件導向程式設計是自學的還是從學校課程學會的,一定對 is a, has a 表示方式感到熟悉。書上最常見的範例就像是 trangle is a shape, cat is an animal 這類的範例來描述兩個物件的關係。這種表示方式不是什麼偉大發明,就算是不懂程式設計的人來看也會覺得自然,那是因為觀察、分類與定義物件之間關係本來就是人類擅長且天天會用的能力,也就是抽象化思考的能力。

分類與定義物件之間關係本來就是人類擅長且天天會用的能力

什麼是 Is a?

說到觀察、分類定義物件關係我覺得最經典的案例就是生物學的分類系統。我們就拿三個物種,智人、尼安德特人與黑猩猩來説,我們可以問為什麼智人與尼安德特人會被分在同一屬?為什麼 「長得很像」人類的黑猩猩被分到黑猩猩屬?因為在分類的過程中智人與尼安德特人所擁有的共同特徵數量上會比智人跟黑猩猩的共同特徵更多。一但某些特徵被識別出來作為分類後就能確定不同分類間的從屬關係,因此我們可以說智人 is a 人;也可以說尼安德特人 is a 人;就不能說黑猩猩 is a 人。假設未來有全新進化的人形物種,當他符合人屬的分類特徵條件,理論上我們就能說此新人形物種 is a 人。

特徵被識別出來作為分類後就能確定不同分類間的從屬關係

當 Is a 少了 a 會發生什麼事?

不知道大家有沒有聽過白馬非馬論?它是戰國時期的公孫龍為了搞定守門人的馬不能過關口的規定而為它的白馬所提出的一個(詭)辯論。他的論點是這樣的,如果黑馬 is 馬,在白馬 is not 黑馬的前提下,就會得出白馬 is not 馬的結論。之所以白馬不是馬是因為白馬比馬特徵定義上多出一個顏色屬性,同理黑馬也不是馬,但我們都知道白馬與黑馬都是 is a 馬,這就是抽象化。

白馬與黑馬都是一種馬

結論

最後再回到程式設計上,我們在設計過程會經過識別出流程中不同物件的特徵進行分類找出彼此的關係的抽象化過程,不同的抽象方式會有不同的結果。當我們抽象化的目標是物件的共同的特徵時就會得到一組繼承關係;當把抽象化的是物件重點放在共同行為上就會得到一組介面設計;如果同時考慮的是特徵與介面抽象化的共存設計,你就得到一組抽象類別,或更抽象再抽象的設計模式。

留言
avatar-img
留言分享你的想法!
avatar-img
Warren Lo的沙龍
22會員
70內容數
WarrenLo's 軟體設計武功祕笈
Warren Lo的沙龍的其他內容
2024/09/25
當我們從事軟體開發工作一段時間後,有些人會開始接觸軟體架構設計。由於每個軟體架構設計者的對問題的理解與知識經驗差異會導出不同的設計架構。近期與同事的軟體設計案例經驗交流後,就很希望自己剛開始學習軟體架構設計的時候就有人能用實際的軟體架構設計經驗來帶我入門...
Thumbnail
2024/09/25
當我們從事軟體開發工作一段時間後,有些人會開始接觸軟體架構設計。由於每個軟體架構設計者的對問題的理解與知識經驗差異會導出不同的設計架構。近期與同事的軟體設計案例經驗交流後,就很希望自己剛開始學習軟體架構設計的時候就有人能用實際的軟體架構設計經驗來帶我入門...
Thumbnail
2024/07/02
如果你也是從事軟體相關工作的人,一定會遭遇突然需要你去學習一套你不熟悉的程式語言狀況吧,此時你會怎麼做呢? 是趕快去買書來看嗎? 還是趕快找一門程式課來上? 又或者乾脆去找會的同事來教學?
Thumbnail
2024/07/02
如果你也是從事軟體相關工作的人,一定會遭遇突然需要你去學習一套你不熟悉的程式語言狀況吧,此時你會怎麼做呢? 是趕快去買書來看嗎? 還是趕快找一門程式課來上? 又或者乾脆去找會的同事來教學?
Thumbnail
2024/04/08
經過這麼多年的觀察與實踐,一個成熟的軟體工程師還需要第四個要素,它是讓決定你通往熟手的重要關鍵沒有之一。
Thumbnail
2024/04/08
經過這麼多年的觀察與實踐,一個成熟的軟體工程師還需要第四個要素,它是讓決定你通往熟手的重要關鍵沒有之一。
Thumbnail
看更多
你可能也想看
Thumbnail
常常被朋友問「哪裡買的?」嗎?透過蝦皮分潤計畫,把日常購物的分享多加一個步驟,就能轉換成現金回饋。門檻低、申請簡單,特別適合學生與上班族,讓零碎時間也能創造小確幸。
Thumbnail
常常被朋友問「哪裡買的?」嗎?透過蝦皮分潤計畫,把日常購物的分享多加一個步驟,就能轉換成現金回饋。門檻低、申請簡單,特別適合學生與上班族,讓零碎時間也能創造小確幸。
Thumbnail
最近的能量似乎非常的黏稠 有一種很深的拉扯感,不管是人事物都有 或許自己也該來一場大整理吧 讓自己重新整理一下往前走 這次我也不知道牌牌會想跟你/妳說些甚麼 所以~就呼吸吧,挑一個喜歡的或是第一眼直覺的 其他的...就交給牌牌吧
Thumbnail
最近的能量似乎非常的黏稠 有一種很深的拉扯感,不管是人事物都有 或許自己也該來一場大整理吧 讓自己重新整理一下往前走 這次我也不知道牌牌會想跟你/妳說些甚麼 所以~就呼吸吧,挑一個喜歡的或是第一眼直覺的 其他的...就交給牌牌吧
Thumbnail
前段時候看了老高的影片,沒想到他對於極簡主義者有蠻深入的理解,由於他也說自己「能不扔東西就盡可能不扔」,卻能有這方面的洞見,實在讓我眼睛一亮。 對於影片中有感的部份,我稍微整理了一下並延伸自己的想法,也讓久未觸碰極簡的頭腦刷新一番。 | 並非不珍惜,而是選擇止損。 每個觀點會有反對的呼聲是
Thumbnail
前段時候看了老高的影片,沒想到他對於極簡主義者有蠻深入的理解,由於他也說自己「能不扔東西就盡可能不扔」,卻能有這方面的洞見,實在讓我眼睛一亮。 對於影片中有感的部份,我稍微整理了一下並延伸自己的想法,也讓久未觸碰極簡的頭腦刷新一番。 | 並非不珍惜,而是選擇止損。 每個觀點會有反對的呼聲是
Thumbnail
相信你一定和我一樣,從小到大經歷過無數次各種規模的整理,為了營造舒適空間,為了除舊佈新,為了搬家。 2021年初,我挑戰了「一日丟一物」90天。當時初學極簡主義的我,原本是想藉此養成隨手整理的習慣,以維護我那才搬來還不到一年的新家,避免雜物在不知不覺中又叢生。雖然總共只捨棄了90樣物品,對家中整體
Thumbnail
相信你一定和我一樣,從小到大經歷過無數次各種規模的整理,為了營造舒適空間,為了除舊佈新,為了搬家。 2021年初,我挑戰了「一日丟一物」90天。當時初學極簡主義的我,原本是想藉此養成隨手整理的習慣,以維護我那才搬來還不到一年的新家,避免雜物在不知不覺中又叢生。雖然總共只捨棄了90樣物品,對家中整體
Thumbnail
很久沒有跟大家談論「實體收納」的話題了,那麼今天就來聊聊跟我們日常實體收納有關的「整理力」的幾個重點和小技巧吧!
Thumbnail
很久沒有跟大家談論「實體收納」的話題了,那麼今天就來聊聊跟我們日常實體收納有關的「整理力」的幾個重點和小技巧吧!
Thumbnail
從以前就喜歡整理
Thumbnail
從以前就喜歡整理
Thumbnail
近年來全球掀起一陣收納與整理的風潮,也讓「斷捨離」成為了熱門關鍵字,因此許多相關的職業也應運而生。然而,真的在整理過後就能讓我們的生活變得更加順遂,工作也更充滿專注力嗎? 日本作家森博嗣在《人生超整理》這本書中坦承自己的工作室及書房都非常凌亂,但卻不認為這些東西有必要不時去整理或捨棄,更不
Thumbnail
近年來全球掀起一陣收納與整理的風潮,也讓「斷捨離」成為了熱門關鍵字,因此許多相關的職業也應運而生。然而,真的在整理過後就能讓我們的生活變得更加順遂,工作也更充滿專注力嗎? 日本作家森博嗣在《人生超整理》這本書中坦承自己的工作室及書房都非常凌亂,但卻不認為這些東西有必要不時去整理或捨棄,更不
Thumbnail
★一日一掃除、一週一整理,建立「家事常規化」。
Thumbnail
★一日一掃除、一週一整理,建立「家事常規化」。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News