物件導向系列 - 1: 物件導向簡介與 SOLID 設計原則

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

在這個章節中,我將介紹物件導向中常用的觀念,以及在面試中經常會碰到的主題。在本系列的第一集中,我們將先來探討物件導向的基本概念與特性。

物件導向 v.s. 程序導向

在一開始,我們來探討什麼是物件導向,以及它與我們偶爾聽到的程序導向之間的關係。這兩種模式的核心差異在於程式設計上的不同,而不僅僅是所使用的程式語言不同。

程序導向主要著重於流程的運作,例如在執行完 A 功能後接著執行 B 功能,這樣一步一步地進行,直到整個流程完成。由於每個環節高度相關,因此程序導向通常呈現出高耦合的狀態。

相對而言,物件導向則著重於單個物件的操作。我們的操作是針對物件進行,而非直接針對資料結構本身。這樣一來,我們可以透過修改原物件的方式,使相關函數一同調整,因此物件導向的耦合度通常較低[註1]。

考量到維護性和擴展性,現今大部分的設計都以物件導向為主流。

物件導向的五大原則 —— SOLID

在物件導向中,有五個重要原則,分別是單一功能原則、開放封閉原則、里氏替換原則、介面隔離原則和依賴反轉原則。以下將一一介紹這些原則:

  1. 單一功能原則(Single Responsibility Principle):每個類別應只負責一種功能。
    • 舉例來說,如果一個類別同時具有增加序列、移除序列和複製序列等多種功能,則可以將其視為「變動序列」,並將複製序列的功能拆分至另一個新類別。
  2. 開放封閉原則(Open-Closed Principle):實體應對於擴充開放,但對於修改封閉。這意味著在進行調整時,應能擴充現有功能,而不需修改原有的程式碼。
  3. 里氏替換原則(Liskov Substitution Principle):子類別應能夠替換其父類別,而不影響程式的正確性,以確保繼承關係的一致性。
  4. 介面隔離原則(Interface Segregation Principle):每個介面應僅包含其必要的功能,並根據需要拆分介面,以避免不必要的依賴。
  5. 依賴反轉原則(Dependency Inversion Principle):模組應共同依賴於抽象,而非依賴於具體實例,以減少程式間的耦合。

此外,將這五個原則的首字母合併起來,就是我們常提到的 SOLID 原則!

[註1] 嚴格來說,物件導向下的耦合程度在很大程度上取決於設計的方式。

參考資料

  1. https://zxuanhong.medium.com/物件導向-vs-程序式導向-平庸與高級工程師開發速度差異的秘密-19e6357b54e6
  2. https://zh.wikipedia.org/wiki/SOLID_(面向对象设计)
留言
avatar-img
留言分享你的想法!
avatar-img
林柏宇的沙龍
2會員
50內容數
test
林柏宇的沙龍的其他內容
2025/04/27
JWT(JSON Web Token)是基於 JSON 格式的開放標準,主要用於身份驗證與權限確認。本文介紹了JWT的基本結構,並闡述其特點,如降低資料庫壓力、靈活性及無狀態性。JWT 特別適用於分佈式系統。本篇將協助讀者深入理解 JWT 的重要性與實際應用。
Thumbnail
2025/04/27
JWT(JSON Web Token)是基於 JSON 格式的開放標準,主要用於身份驗證與權限確認。本文介紹了JWT的基本結構,並闡述其特點,如降低資料庫壓力、靈活性及無狀態性。JWT 特別適用於分佈式系統。本篇將協助讀者深入理解 JWT 的重要性與實際應用。
Thumbnail
2025/04/20
本文介紹了容器的基本概念、組成部分以及其在應用開發中的重要性,特別是對初階和高階工程師的影響。透過深入探討容器的優點,以及Docker、Kubernetes和ArgoCD等相關技術,幫助讀者理解容器化的應用與管理,進而簡化開發過程並提高效率。適合對容器技術感興趣的開發者從零開始學習與掌握。
Thumbnail
2025/04/20
本文介紹了容器的基本概念、組成部分以及其在應用開發中的重要性,特別是對初階和高階工程師的影響。透過深入探討容器的優點,以及Docker、Kubernetes和ArgoCD等相關技術,幫助讀者理解容器化的應用與管理,進而簡化開發過程並提高效率。適合對容器技術感興趣的開發者從零開始學習與掌握。
Thumbnail
2025/04/13
本文探討自動化測試的核心理念與實際應用,涵蓋如何模擬運行環境、確保程式碼在各種情境下的穩定性,以及進行錯誤處理的方法。文中指出自動化測試的各種優點,並提到設計測試的注意事項。透過使用相關工具和方法,讀者可以有效進行功能測試,並掌握相關技巧以應對常見問題,讓開發過程更為順利。
Thumbnail
2025/04/13
本文探討自動化測試的核心理念與實際應用,涵蓋如何模擬運行環境、確保程式碼在各種情境下的穩定性,以及進行錯誤處理的方法。文中指出自動化測試的各種優點,並提到設計測試的注意事項。透過使用相關工具和方法,讀者可以有效進行功能測試,並掌握相關技巧以應對常見問題,讓開發過程更為順利。
Thumbnail
看更多
你可能也想看
Thumbnail
物件導向的SOLID原則包含:單一職責、開閉、里氏替換、介面隔離、依賴反轉 而常見設計模式有:原型、單例、工廠、抽象工廠、建造者、依賴注入 軟體設計模式的三層式架構,衍生出 MVC、MVP、MVVM 等 文章以淺顯易懂的方式說明上述概念,並搭配生活化的例子,幫助讀者理解這些設計原則和模式
Thumbnail
物件導向的SOLID原則包含:單一職責、開閉、里氏替換、介面隔離、依賴反轉 而常見設計模式有:原型、單例、工廠、抽象工廠、建造者、依賴注入 軟體設計模式的三層式架構,衍生出 MVC、MVP、MVVM 等 文章以淺顯易懂的方式說明上述概念,並搭配生活化的例子,幫助讀者理解這些設計原則和模式
Thumbnail
本文章深入探討物件導向程式設計的三大核心特性,包括封裝、多型和繼承。這些特性對於建立模組化、可擴充以及易於維護的程式架構至關重要。封裝確保資料的隱私和完整性,多型實現靈活的系統設計,繼承則促進程式碼的重用。瞭解這些概念將幫助開發者設計更高效的程式系統。
Thumbnail
本文章深入探討物件導向程式設計的三大核心特性,包括封裝、多型和繼承。這些特性對於建立模組化、可擴充以及易於維護的程式架構至關重要。封裝確保資料的隱私和完整性,多型實現靈活的系統設計,繼承則促進程式碼的重用。瞭解這些概念將幫助開發者設計更高效的程式系統。
Thumbnail
本文探討物件導向編程及其在面試中常見的必備知識,特別是物件導向與程序導向的基本概念與特性分析。此外,介紹了物件導向的五大原則——SOLID,分別為單一功能原則、開放封閉原則、里氏替換原則、介面隔離原則及依賴反轉原則,重點在於提高程式的維護性與擴展性。這些原則對於現代軟體設計具有重要的指導意義。
Thumbnail
本文探討物件導向編程及其在面試中常見的必備知識,特別是物件導向與程序導向的基本概念與特性分析。此外,介紹了物件導向的五大原則——SOLID,分別為單一功能原則、開放封閉原則、里氏替換原則、介面隔離原則及依賴反轉原則,重點在於提高程式的維護性與擴展性。這些原則對於現代軟體設計具有重要的指導意義。
Thumbnail
這個單元我一直很想學習,物件導向 Object Oriented Programming 以前一直以為是一種程式碼,其實是設計程式的觀念,文中我分享了程式碼還有自己想的比喻讓讀者更好理解。除了物件導向,我還介紹其他四種風格的程式碼設計,跟大家一起學習。
Thumbnail
這個單元我一直很想學習,物件導向 Object Oriented Programming 以前一直以為是一種程式碼,其實是設計程式的觀念,文中我分享了程式碼還有自己想的比喻讓讀者更好理解。除了物件導向,我還介紹其他四種風格的程式碼設計,跟大家一起學習。
Thumbnail
這篇文章介紹物件導向程式設計(OOP)的基本概念,包括類和物件的定義以及四大核心概念:封裝、繼承、多型和抽象。讀者將瞭解如何在Python中定義類和物件,並學習如何使用這些OOP特性來構建更具組織性和可維護性的程式碼。透過實例,文章探討如何將真實世界的物件模擬到程式設計中。
Thumbnail
這篇文章介紹物件導向程式設計(OOP)的基本概念,包括類和物件的定義以及四大核心概念:封裝、繼承、多型和抽象。讀者將瞭解如何在Python中定義類和物件,並學習如何使用這些OOP特性來構建更具組織性和可維護性的程式碼。透過實例,文章探討如何將真實世界的物件模擬到程式設計中。
Thumbnail
這是 30 天寫作挑戰的第 16 天。今天要跟大家分享的主題是:3 個學習前端時,重要的程式框架
Thumbnail
這是 30 天寫作挑戰的第 16 天。今天要跟大家分享的主題是:3 個學習前端時,重要的程式框架
Thumbnail
一、前言   這篇文章將會簡單介紹物件導向的設計模式,以及學習這項技術需要有哪些先備知識,學習才會比較順利。 二、設計模式   在物件導向中,除了最基本的五大原則以外,其實還有一知名的概念,那就是設計模式(Design Pattern),它能運用到很多層面。 1. 解決一再出現的問題   許多程式設
Thumbnail
一、前言   這篇文章將會簡單介紹物件導向的設計模式,以及學習這項技術需要有哪些先備知識,學習才會比較順利。 二、設計模式   在物件導向中,除了最基本的五大原則以外,其實還有一知名的概念,那就是設計模式(Design Pattern),它能運用到很多層面。 1. 解決一再出現的問題   許多程式設
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News