慣性聚合 高效追讀感興趣之博客、新聞、科技資訊
閱原文 以慣性聚合開啟

推薦訂閱源

Google DeepMind News
Google DeepMind News
人人都是产品经理
人人都是产品经理
M
MIT News - Artificial intelligence
博客园 - 叶小钗
MyScale Blog
MyScale Blog
V
Visual Studio Blog
月光博客
月光博客
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
量子位
I
InfoQ
有赞技术团队
有赞技术团队
阮一峰的网络日志
阮一峰的网络日志
Jina AI
Jina AI
V
V2EX
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Blog — PlanetScale
Blog — PlanetScale
Last Week in AI
Last Week in AI
雷峰网
雷峰网
Stack Overflow Blog
Stack Overflow Blog
博客园 - Franky

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python)
自面向对象至SOLID原则:一篇尽述所需之文
Sanudin · 2026-05-25 · via DEV Community

🕐 ~八分鐘讀

📝 關於此文的筆記
此文乃吾個人學習OOP及SOLID原則之筆記所成。欲使此筆記易讀且有益——對吾及他人而言——吾乃借助AI之力,以發展並編輯之,成為博客文章。其意、其學、其解,皆吾之所有;AI僅助於文辭之呈現。


好读易改非偶然。每有悦目之码,其背后必有诸般理念,导其结构,联其脉络。

是文将述其全境——自何为OOP,物如何相系,劣构之状若何,终至SOLID五则,统摄一切。

且进。


篇一:何谓面向对象?

Object Oriented Programming (OOP) 乃摹拟真实之术也。非列长篇之指令,乃将相涉之数据与行止,集于物象中。

🤖 想象玩具之机械。机械有属性(顏色、高度、電池)與行為(行走、言談、揮手)。於面向對象之學,此機器人即為一對象——而用以製造之藍圖謂之

要義有二:

  • ——藍圖(模板)
  • 對象。 — wujud nyata yang dibuat dari cetak biru tersebut

Empat Pilar OOP

Pilar Fungsinya
Inheritance Class anak mewarisi properti dan perilaku dari class induk
Encapsulation Data internal disembunyikan — akses dari luar hanya melalui jalur yang ditentukan
Abstraction 四柱OOP 柱之用 承袭者,子类承父类之性 封装者,内蕴隐秘,外求有径 抽象者 其内蕴隐,唯所须者显;
多态性; 同举而异效,视乎其体;

第二部:物相系之由

物非独存,相系相协,互为依凭—— 之关联,甚为要义。

乃协会也。

两者相知相认,可互为应答。其主次有三:

  • 一对一 — 一人持一护照。
  • 一对多 — 一师,众弟子。
  • 多对多 — 众弟子,众科目。

於協會之中,若一物"有"他物,其關係有二:

  • 聚合 (疏) — 子物可獨存於母物亡也。囊盛書,書雖在,囊可棄。
  • 組成 (密) — 子物無母物則不立。宅有室;宅毀,室隨之亡。

依賴

权宜之关联。一法中用他法,然不永存之。较之关联,其弱矣.

泛化 & 实现

  • 泛化 — 提诸类共性于上位类(继承)
  • 实现 — 一类实现接口,承诺履行已定义之契约

第三部分:设计之弊若何?

未习其法,先明所避之要。Robert C. Martin识得设计之弊有三:

🪨 刚硬 — 系统难改。触一端,则众端随之更易。开发者遂畏于更易。

🍪 脆弱(Kerapuhan) — 更易之际,系统无故崩坏。汝修支付模块之虫,而邮件通知骤停。

🏗️ 固定(Ketidakmampuan Dipindahkan) — 件无用之物,不可复用。其与周遭之物磨损过甚,故欲取之,需时更久于从头书写。

三者之弊,根由相同: 组件间依赖管理不善


第四章:SOLID

SOLID乃五项原则,直解前患。各针对设计之特定缺失。


S — 单一职责原则

一模块当负于一,且仅于一,之角色。

每类必有所适一故而更 — ia melayani satu aktor (satu kelompok stakeholder).

👨‍🍳 Seorang pekerja restoran yang sekaligus menjadi koki, kasir, satpam, dan pengantar makanan adalah bencana yang menunggu terjadi. Perubahan di satu peran mengganggu semua peran lainnya.

Pisahkan class-mu. Satu tanggung jawab per class.


O — Open/Closed Principle

"工器当开以增,当闭以改。"

增新行宜以之,非更旧码之已行也。"

🔌插头可令新器相接,无需解其缆。此OCP之实也。

需更易,则增新码于旧码之侧,勿复书已行之文。


L — 李斯科夫替换原则

若S为T之亚型,则T型之对象可代之以S型之对象,而程序之真不变。

一子类必須可全然替代之乃父类。父所立之誓,子必践之。

🤖若父机能烹,子机亦当能烹,非徒掷错或默然无所为。

若子类有虚法,或施伪实现,或抛"不支持",此乃Liskov之违。


我——接口分离之理。

"客不可强令依其不欲之表。"

勿作广表,强令类施所不必之法于其类。析表为精微之小节。

🍴勿予每客以牛排刀、汤勺、叉、fondue签,若其但索汤。

小之界面即狭之依存,依存之变恒定于局。


D — 依存倒置之则

"高阶模块勿依存低阶模块,二者皆须依存于抽象。"

业务之理不可直系于具体之实。当与界面语。 — 程度低微之细,实践行此界面。

🤖 切勿以烙铁柄触机器人之手。予其手以标准接插件,任其工具可更易。

此乃使基础架构(数据库、API、文件系统)可易换,而不损商业逻辑之理。


简述要旨:SOLID略览

原则 所解之问题 要旨之问
单一职责原则(SRP) 课业繁重 "此课是否服务于多个利益相关者群体?"
开放系统互操作性原则 修舊码以增新能 "可否将此添加为扩展,而非修改?"
乐施善教 Hierarchy yang rusak "Apakah anak dapat menggantikan induk tanpa kerusakan?"
ISP Interface berlebihan dengan method yang tidak digunakan "Apakah class ini dipaksa untuk mengimplementasikan sesuatu yang tidak diperlukan?"
DIP Logika bisnis terikat pada infrastruktur "Apakah kode tingkat tinggi bergantung pada class konkret yang seharusnya tidak?"

Mulai dari Mana?

Kalau kamu baru pertama kali menerapkan ini:

  1. Mulai dengan SRP — cari class yang "mengerjakan terlalu banyak" dan pecah
  2. Periksa pewarisan untuk pelanggaran LSP — method kosong adalah tanda peringatannya 何謂高階代碼偏倚於本應無關之具體類別?其始何在? 若君初習此道:自單一職責原則始——尋類別「職責過重」者而析之。 察繼承以違反里氏替換原則——空方法乃警示之徵。
  3. 于基设之畔增接口 — 此乃DIP于实践之要义

此等原则非清单。乃每执笔为码时当自诘之问.


初载于sanudin.dev