歡迎來到程式設計!

在本章中,我們將探討電腦科學家最常用的兩大「思維工具」:抽象化 (Abstraction)分解 (Decomposition)。別被這些艱深的詞彙嚇到了!事實上,它們只是你每天用來解決問題時所運用的技巧,只是換了個專業名稱而已。讀完這些筆記後,你將會發現,這些技巧能將一個「不可能的任務」般的程式編寫專案,轉變為一系列輕鬆、易於管理的小任務。


1. 抽象化:專注於重點

試想一下,當你在查閱城市地圖尋找巴士站時,地圖會顯示每一根草嗎?它會顯示每個人家門口的顏色嗎?當然不會!如果地圖包含了所有細節,就會變得太雜亂而無法閱讀了。

抽象化是移除或隱藏問題中不必要細節的過程,目的是讓你能夠專注於重要的部分。在電腦科學中,我們利用抽象化來降低複雜度,並讓設計解決方案的過程變得更容易。

現實生活中的比喻:駕駛汽車

當你在開車時,你其實就在使用抽象化。你只需要操作方向盤、腳踏板和排檔桿。你不需要知道引擎內部的活塞如何運作,也不需要了解燃油噴射系統的原理,就能順利開車去超市。這些細節因為對於「駕駛」這個任務來說並不重要,所以被「抽象化」了。

為什麼抽象化很重要?

1. 簡化問題: 讓核心邏輯更容易被看見。
2. 節省時間: 不會把精力浪費在對結果沒有影響的細節上。
3. 提升設計: 讓你能夠建立出真正有效的模型(例如氣象圖或飛行模擬器)。

你知道嗎? 著名的倫敦地鐵圖就是抽象化的經典例子。它並沒有顯示軌道的實際距離或彎曲程度,它只顯示車站之間的連接關係,因為這就是乘客需要知道的一切!

快速複習:抽象化

定義: 隱藏不必要的細節。
目標: 簡化問題。
例子: 汽車儀表板或簡化的地圖。


2. 分解:拆解問題

如果有人叫你「蓋一棟房子」,你可能會感到不知所措,甚至不知道從何下手。但如果他叫你「為前牆鋪磚」,這聽起來就容易多了。

分解是將一個大型且複雜的問題,拆解成較小、較易於管理的子問題的過程。每一個子問題都對應一個具體且明確的任務。這些小任務可以進一步拆解,直到它們變得足夠簡單,能輕易解決為止。

步驟範例:泡一杯茶

如果我們將「泡茶」這個任務進行分解,可能會像這樣:

1. 燒開水:(裝水入水壺、插電、等待水開)。
2. 準備杯子:(拿杯子、放入茶包)。
3. 沖泡:(倒入熱水、等待 3 分鐘、取出茶包)。
4. 完成:(加入牛奶/糖、攪拌)。

這些步驟中的每一個都是一個明確的任務。只要你能完成這四件小事,你就成功解決了「泡茶」這個大問題。

程式設計中的分解

在 9645 電腦科學領域中,我們透過使用子程式 (subroutines)(也稱為函數或程序)來達成分解。我們不會編寫一大段程式碼,而是編寫多個小型的子程式,每個子程式處理程式的一部分,例如 calculateTax()(計算稅款)或 validatePassword()(驗證密碼)。

記憶法:分而治之 (Divide and Conquer)

分解想像成「分而治之」。你把巨大的敵人(問題)分開 (divide),變成一支你可以逐一 征服 (conquer) 的小軍隊。

快速複習:分解

定義: 將問題拆解成較小的子問題。
目標: 使複雜的任務變得可管理。
程式實作: 我們使用子程式來代表這些子問題。


3. 兩者如何協同運作

如果起初覺得這兩者很像,也不用擔心!它們就像硬幣的兩面。以下是如何區分它們的方法:

抽象化關於細節 (DETAIL)。(我能忽略什麼?)
分解關於結構 (STRUCTURE)。(我該如何將此拆解成碎片?)

範例:製作一款電子遊戲
你使用抽象化來決定「玩家」只是一個擁有「生命值」數字和「位置」的角色——你忽略了他們的眼睛顏色或早餐吃了什麼。
你使用分解將遊戲拆解為各個任務:「處理輸入」、「更新物理模擬」以及「渲染圖形」。


4. 常見錯誤,需多加留意

混淆兩者: 請記住,如果你是在刪除資訊,那就是抽象化;如果你是在將問題切割成各個部分,那就是分解。
過度分解: 不要將任務拆解到變得難以管理!如果拆解後的碎片比原本的任務還難處理,那就沒必要了(你不需要為 1 + 1 寫一個單獨的子程式)。
忘記目標: 這兩者的共同目標,都是為了讓人類程式設計師在程式設計 (Program Design) 階段時,工作能更輕鬆。


總結重點

1. 抽象化透過移除不必要的細節來簡化問題。
2. 分解透過將問題拆解為較小的子任務,使問題變得易於管理。
3. 結合使用這兩種技巧是結構化程式設計的必要條件。
4. 子程式是我們在程式碼中實作分解的主要方式。

做得好!你剛剛掌握了程式設計的基礎。這些概念將會讓你學習 Oxford AQA 大綱中其他章節時,感到更加輕鬆!