」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 抽象:一種程式化的思考方式

抽象:一種程式化的思考方式

發佈於2024-11-08
瀏覽:329

Abstractions: A Way of Thinking Programmatically

「為什麼程式設計師拒絕起床?他們陷入了太多的抽象層!」

在程式設計中,就像在生活中一樣,我們經常需要簡化複雜的事情以使它們更易於管理。想像一下,試圖向從未見過電腦的人解釋互聯網,您不會從談論伺服器和協定開始。相反,你可以使用類比、故事或簡化版本來傳達這個想法。這就是程式設計中抽象的意義所在:簡化複雜的事情。

抽象:簡單的秘訣
把程式設計想像成烹飪。當您遵循食譜時,您不會考慮烤箱中發生的化學反應;您會考慮烤箱中發生的化學反應。只要按照步驟做就可以做出一道美味的菜餚。程式設計中的抽像是類似的 - 它允許您專注於您想要實現的目標,而不必擔心幕後的複雜細節。

什麼是抽象?
抽像是管理程式設計複雜性的一種方法。它涉及創建複雜系統的簡化模型,使您能夠專注於高級操作而不是複雜的細節。透過抽象程式碼的某些部分,您可以更有效地工作、重複使用程式碼並減少出錯的機會。

三明治隱喻:建構抽象層
讓我們深入研究一個使用三明治比喻的實際例子。
1.成分(低級細節) 在最基本的層面上,你有成分:麵包、生菜、番茄、起司和火雞。這些就像程式設計中的原始資料或低階操作。它們很重要,但直接處理它們可能很麻煩。

例子:

let bread = "whole grain";
let lettuce = "romaine";
let tomato = "sliced";
let cheese = "cheddar";
let turkey = "smoked";

2.三明治(更高層次的抽象) 您無需單獨處理每種成分,而是創建一個三明治。這是一個抽象概念,將各種成分捆綁在一起形成一個更易於管理的實體。

例子:

function makeSandwich(bread, lettuce, tomato, cheese, turkey) {
    return `${bread} sandwich with ${lettuce}, ${tomato}, ${cheese}, and ${turkey}`;
}
let myLunch = makeSandwich("whole grain", "romaine", "sliced", "cheddar", "smoked");

透過將細節抽像到 makeSandwich 函數中,您不必每次想要做午餐時都擔心各個成分 - 您只需調用該函數即可。

3.午餐訂單(甚至更高的抽象) 現在,如果您想在熟食店訂購午餐怎麼辦?你甚至不需要考慮三明治的製作過程;您只需下訂單即可。這是更高層次的抽象,您可以與更簡化的介面進行互動。

例子:

function orderLunch(type) {
    if (type === "sandwich") {
        return makeSandwich("whole grain", "romaine", "sliced", "cheddar", "smoked");
    }
    // Other lunch options could go here
}
let myOrder = orderLunch("sandwich");

實際使用案例場景:建立使用者介面
在建立複雜系統(例如使用者介面(UI))時,抽象至關重要。假設您正在為社交媒體應用程式建立 UI。您無需為每個按鈕、文字方塊和圖像單獨編寫程式碼,而是建立代表它們的抽像元件。

function createButton(label) {
    return ``;
}
function createUserProfile(name, bio) {
    return `
        

${name}

${bio}

${createButton("Follow")}
`; } let profile = createUserProfile("Koobimdi", "Passionate about coding and storytelling.");

這裡,createButton函數抽象化了按鈕的創建,createUserProfile函數抽象化了使用者設定檔。您並不是每次都處理原始 HTML 標籤 - 只是更高層級的抽象。

需要注意的要點
抽象化簡化了複雜性:它允許您在更高的細節層級上工作,而無需擔心底層的複雜性。
抽象層:您創建的抽象層越多,您就越能專注於每個層級的重要內容。
可重複使用性: 抽象化可讓您建立可在多個情境中使用的通用函數或元件,從而鼓勵可重複使用性。
效率:透過抽象重複性任務,您可以編寫更有效率且可維護的程式碼。

結論
抽象就像一個食譜,可以簡化烹飪過程,讓您可以製作複雜的菜餚,而不必陷入細節。在程式設計中,它是一個強大的工具,可以幫助您管理複雜性、更有效率地工作並編寫更簡潔的程式碼。

「記住,當事情變得太複雜時,是時候抽像出解決辦法了——就像廚房太亂時你點外賣一樣!」

版本聲明 本文轉載於:https://dev.to/koobimdi/abstractions-a-way-of-thinking-programmatically-3cdc?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • Java 的內建功能如何可靠地驗證電子郵件地址?
    Java 的內建功能如何可靠地驗證電子郵件地址?
    探討 Java 中的電子郵件驗證方法電子郵件地址的有效性在各種應用中至關重要。雖然 Apache Commons Validator 一直是 Java 電子郵件驗證的熱門選擇,但開發人員經常尋求替代解決方案。本文深入研究了使用官方 Java 電子郵件包驗證電子郵件地址的綜合方法。 isValidEm...
    程式設計 發佈於2024-12-22
  • 掌握 JavaScript 中的對象
    掌握 JavaScript 中的對象
    JavaScript 中的对象 在 JavaScript 中,对象是键值对的集合,其中值可以是数据(属性)或函数(方法)。对象是 JavaScript 的基础,因为 JavaScript 中几乎所有内容都是对象,包括数组、函数,甚至其他对象。 1.创建对象 ...
    程式設計 發佈於2024-12-22
  • C++ 中與運算子 (&) 的使用方式有哪些不同?
    C++ 中與運算子 (&) 的使用方式有哪些不同?
    && 在 C 語言中如何運作 && 在 C 語言中如何運作 理解 & 運算子& C中的運算子有多種用途,包括:取得某個位址變數: &x 傳回變數 x 的記憶體位址。 透過引用傳遞參數: void foo(CDummy& x);透過引用將變數 x 傳遞給函數 foo,允許在 foo 內部所做的修改反映...
    程式設計 發佈於2024-12-22
  • 馬尼拉 DevFest 推動創新、包容性和負責任的人工智慧
    馬尼拉 DevFest 推動創新、包容性和負責任的人工智慧
    图片来自GDG Manila Facebook页面(https://m.facebook.com/story.php?story_fbid=pfbid02Xh4ED8NwUnfrh9wrDS2pJKhYbpya4QxCMFWcNCeKuCpg9LgkmQ96B85FUSqo5w7bl&id=6156...
    程式設計 發佈於2024-12-22
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-12-22
  • C++中靜態工廠方法和工廠類別如何選擇?
    C++中靜態工廠方法和工廠類別如何選擇?
    如何在C 中正確實現工廠方法模式工廠方法模式是一種設計模式,允許創建對象而無需指定對象的確切類別要創建的對象。當運行時確定要建立的物件的類別時,或者需要提供統一的介面來建立不同類型的物件時,通常會使用這種模式。 在 C 中,有以下幾種方式實現工廠方法模式。一種常見的方法是使用在要為其建立物件的類別中...
    程式設計 發佈於2024-12-22
  • Java 中的 HashMap 或 Hashtable:對於單執行緒應用程式來說,哪個更有效率?
    Java 中的 HashMap 或 Hashtable:對於單執行緒應用程式來說,哪個更有效率?
    Java 中的HashMap 與Hashtable:非線程應用程式的主要區別和效率HashMap 和Hashtable 是Java 中的基本資料結構,它們儲存鍵值對。了解它們的差異對於選擇最合適的選項至關重要。 主要差異:同步: Hashtable 是同步的,而 HashMap 是同步的不是。同步意...
    程式設計 發佈於2024-12-22
  • MySQL 能否處理遙遠過去的日期,例如 1200 年?
    MySQL 能否處理遙遠過去的日期,例如 1200 年?
    MySQL 對歷史日期的支援許多資料庫系統,包括 MySQL,在處理歷史日期時都有限制。本文探討了儲存和使用公曆之前的日期的限制和替代方案。 MySQL 可以處理像 1200 這樣的日期嗎? 從技術上講,MySQL 可以儲存日期早在 1000 年。然而,對於在此之前的日期,存在潛在的問題考量。 歷史...
    程式設計 發佈於2024-12-22
  • 如何偵測和計算 PHP 數組中的唯一值?
    如何偵測和計算 PHP 數組中的唯一值?
    偵測並顯示陣列中唯一值的出現在 PHP 中,使用陣列通常涉及處理重複值。為了有效地管理和分析數據,必須識別並計算這些重複出現的次數。讓我們探索針對這項挑戰的詳細解決方案。 使用 array_count_values() 函數提供了一個簡單的方法。此函數接受一個陣列作為輸入並傳回一個關聯數組,其中鍵代...
    程式設計 發佈於2024-12-22
  • HTML 格式標籤
    HTML 格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2024-12-22
  • 如何避免 JavaScript 中 parseInt 的八進位解釋問題?
    如何避免 JavaScript 中 parseInt 的八進位解釋問題?
    JavaScript 的八進制危險:parseInt 錯誤行為的解決方法JavaScript 的parseInt 函數在遇到帶有前導零的數字時可能會出錯。該問題源於其將前導零解釋為八進制數字的傾向,從而導致錯誤的結果。 範例:parseInt('01'); // 1 parseInt('08'); ...
    程式設計 發佈於2024-12-22
  • Golang 是否提供行動語義,它如何實現類似的最佳化?
    Golang 是否提供行動語義,它如何實現類似的最佳化?
    Golang 中的行動語義Bjarne Stroustrup 在 C 11 中引入了行動語義,透過消除不必要的複製來優化資料傳輸。這種技術在處理大型資料結構時特別有用。 Golang 支援行動語意嗎? 與 C 不同,Golang 不以同樣的方式明確支援行動語意。然而,Go 採用了一種獨特的方法,透過...
    程式設計 發佈於2024-12-22
  • Go ":=" 與 "=":何時使用短變數宣告?
    Go ":=" 與 "=":何時使用短變數宣告?
    理解Go中“:=”和“=”的區別作為Go新手,你可能會困惑對於變量賦值,“ :=”和“=”似乎可以互換使用。然而,圍繞變數聲明的上下文有一個微妙的區別。 「=」的作用在 Go 中,「=」主要用於變數賦值。它遵循“var name type = expression”的語法,其中“name”代表要分配...
    程式設計 發佈於2024-12-22
  • 如何在 Python 中建立類似 Cron 的調度?
    如何在 Python 中建立類似 Cron 的調度?
    Python 類別 Cron 調度基於靈活表達式的調度任務的需求出現在各種環境中。雖然 cron 在許多環境中都能實現此目的,但它可能並不普遍可用或可行。在這種情況下,Python 提供了多種選項來建立您自己的類似 cron 的排程器。 使用調度庫的輕量級方法如果輕量級且純粹基於Python 的解決...
    程式設計 發佈於2024-12-22
  • 如何防止 JDBC 應用程式中的 ORA-01000:最大開啟遊標錯誤?
    如何防止 JDBC 應用程式中的 ORA-01000:最大開啟遊標錯誤?
    管理遊標和JDBC 物件以防止ORA-01000了解遊標和JDBC 之間的連接 ]當資料庫執行個體耗盡可用空間時,會發生ORA-01000 最大開啟遊標錯誤遊標。 資料庫上的單一遊標支援每個 JDBC ResultSet。 每個 JDBC Connection 可以處理多個事務,但一次只能處理一個事...
    程式設計 發佈於2024-12-22

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3